@amplitude/analytics-browser 1.0.3 → 1.1.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 (46) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/browser-client.d.ts +14 -1
  3. package/lib/cjs/browser-client.d.ts.map +1 -1
  4. package/lib/cjs/browser-client.js +35 -5
  5. package/lib/cjs/browser-client.js.map +1 -1
  6. package/lib/cjs/index.d.ts +1 -1
  7. package/lib/cjs/index.d.ts.map +1 -1
  8. package/lib/cjs/index.js +2 -1
  9. package/lib/cjs/index.js.map +1 -1
  10. package/lib/cjs/plugins/identity.d.ts +9 -0
  11. package/lib/cjs/plugins/identity.d.ts.map +1 -0
  12. package/lib/cjs/plugins/identity.js +30 -0
  13. package/lib/cjs/plugins/identity.js.map +1 -0
  14. package/lib/cjs/utils/analytics-connector.d.ts +3 -0
  15. package/lib/cjs/utils/analytics-connector.d.ts.map +1 -0
  16. package/lib/cjs/utils/analytics-connector.js +8 -0
  17. package/lib/cjs/utils/analytics-connector.js.map +1 -0
  18. package/lib/cjs/version.d.ts +1 -1
  19. package/lib/cjs/version.js +1 -1
  20. package/lib/cjs/version.js.map +1 -1
  21. package/lib/esm/browser-client.d.ts +14 -1
  22. package/lib/esm/browser-client.d.ts.map +1 -1
  23. package/lib/esm/browser-client.js +34 -4
  24. package/lib/esm/browser-client.js.map +1 -1
  25. package/lib/esm/index.d.ts +1 -1
  26. package/lib/esm/index.d.ts.map +1 -1
  27. package/lib/esm/index.js +1 -1
  28. package/lib/esm/index.js.map +1 -1
  29. package/lib/esm/plugins/identity.d.ts +9 -0
  30. package/lib/esm/plugins/identity.d.ts.map +1 -0
  31. package/lib/esm/plugins/identity.js +28 -0
  32. package/lib/esm/plugins/identity.js.map +1 -0
  33. package/lib/esm/utils/analytics-connector.d.ts +3 -0
  34. package/lib/esm/utils/analytics-connector.d.ts.map +1 -0
  35. package/lib/esm/utils/analytics-connector.js +5 -0
  36. package/lib/esm/utils/analytics-connector.js.map +1 -0
  37. package/lib/esm/version.d.ts +1 -1
  38. package/lib/esm/version.js +1 -1
  39. package/lib/esm/version.js.map +1 -1
  40. package/lib/scripts/amplitude-min.js +1 -1
  41. package/lib/scripts/amplitude-min.js.gz +0 -0
  42. package/lib/scripts/amplitude-min.umd.js +1 -1
  43. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  44. package/lib/scripts/amplitude-snippet-instructions.html +1 -1
  45. package/lib/scripts/amplitude-snippet-min.js +1 -1
  46. package/package.json +4 -3
package/README.md CHANGED
@@ -32,7 +32,7 @@ Alternatively, the package is also distributed through a CDN. Copy and paste the
32
32
  <!-- README_SNIPPET_BLOCK -->
33
33
  ```html
34
34
  <script type="text/javascript">
35
- !function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[]};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{r.invoked=!0;var n=t.createElement("script");n.type="text/javascript",n.integrity="sha384-vM2cWr/AdoFRpPDipKqTDuH20L7eu2AiDC+ZYz70+bIxWAK1fhYz+57V5xKd3VS5",n.crossOrigin="anonymous",n.async=!0,n.src="https://cdn.amplitude.com/libs/analytics-browser-1.0.2-min.js.gz",n.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var s=t.getElementsByTagName("script")[0];function v(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}}s.parentNode.insertBefore(n,s);for(var o=function(){return this._q=[],this},i=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],a=0;a<i.length;a++)v(o,i[a]);r.Identify=o;for(var u=function(){return this._q=[],this},c=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],p=0;p<c.length;p++)v(u,c[p]);r.Revenue=u;var d=["getDeviceId","setDeviceId","regenerateDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport"],l=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];function f(e){function t(t,r){e[t]=function(){var n={promise:new Promise((r=>{e._q.push({name:t,args:Array.prototype.slice.call(arguments,0),resolve:r})}))};if(r)return n}}for(var r=0;r<d.length;r++)t(d[r],!1);for(var n=0;n<l.length;n++)t(l[n],!0)}f(r),e.amplitude=r}}(window,document)}();
35
+ !function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[]};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{r.invoked=!0;var n=t.createElement("script");n.type="text/javascript",n.integrity="sha384-bOgag88cCbUrgxz1PjrCwsqjvX4PBHbKsdFMxw6SpeOKRCXcO1Bctvuacd/mRf3r",n.crossOrigin="anonymous",n.async=!0,n.src="https://cdn.amplitude.com/libs/analytics-browser-1.1.2-min.js.gz",n.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var s=t.getElementsByTagName("script")[0];function v(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}}s.parentNode.insertBefore(n,s);for(var o=function(){return this._q=[],this},i=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],a=0;a<i.length;a++)v(o,i[a]);r.Identify=o;for(var c=function(){return this._q=[],this},u=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],p=0;p<u.length;p++)v(c,u[p]);r.Revenue=c;var d=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset"],l=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];function f(e){function t(t,r){e[t]=function(){var n={promise:new Promise((r=>{e._q.push({name:t,args:Array.prototype.slice.call(arguments,0),resolve:r})}))};if(r)return n}}for(var r=0;r<d.length;r++)t(d[r],!1);for(var n=0;n<l.length;n++)t(l[n],!0)}f(r),e.amplitude=r}}(window,document)}();
36
36
 
37
37
  amplitude.init("YOUR_API_KEY_HERE");
38
38
  </script>
@@ -8,6 +8,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {
8
8
  getDeviceId(): string | undefined;
9
9
  setDeviceId(deviceId: string): void;
10
10
  regenerateDeviceId(): void;
11
+ reset(): void;
11
12
  getSessionId(): number | undefined;
12
13
  setSessionId(sessionId: number): void;
13
14
  setOptOut(optOut: boolean): void;
@@ -155,13 +156,25 @@ export declare const setDeviceId: (deviceId: string) => void;
155
156
  /**
156
157
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
157
158
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
158
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
159
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
159
160
  *
160
161
  * ```typescript
161
162
  * regenerateDeviceId();
162
163
  * ```
163
164
  */
164
165
  export declare const regenerateDeviceId: () => void;
166
+ /**
167
+ * reset is a shortcut to anonymize users after they log out, by:
168
+ * - setting userId to `undefined`
169
+ * - regenerating a new random deviceId
170
+ *
171
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
172
+ *
173
+ * ```typescript
174
+ * reset();
175
+ * ```
176
+ */
177
+ export declare const reset: () => void;
165
178
  /**
166
179
  * Returns current session ID.
167
180
  *
@@ -1 +1 @@
1
- {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,MAAM,EACN,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAOpC,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB;IA2CzF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,EAAE,YAAY,UAAQ;IAehG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;IAKlB,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,YAAY,CAAC,SAAS,EAAE,aAAa;IAIrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,CAAC;IASlB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;CAQvD;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,yLAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,4OAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,4OAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,yIAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,0LAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,4HAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,uIAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAlMF,MAAM,GAAG,SAAS,SAkMgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aA9MA,MAAM,SA8M4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA/NC,MAAM,SA+N4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WAxOF,OAAO,SAwO2B,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,cApPC,aAAa,SAoPqB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
1
+ {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,MAAM,EACN,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AASpC,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB;IAwDzF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,EAAE,YAAY,UAAQ;IAehG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;IAKlB,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,YAAY,CAAC,SAAS,EAAE,aAAa;IAIrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,CAAC;IASlB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;CAQvD;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,yLAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,4OAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,4OAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,yIAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,0LAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,4HAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,uIAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAvMF,MAAM,GAAG,SAAS,SAuMgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aAnNA,MAAM,SAmN4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,YAA4B,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA5OC,MAAM,SA4O4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WArPF,OAAO,SAqP2B,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,cAjQC,aAAa,SAiQqB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.flush = exports.setTransport = exports.setOptOut = exports.setSessionId = exports.getSessionId = exports.regenerateDeviceId = exports.setDeviceId = exports.getDeviceId = exports.setUserId = exports.getUserId = exports.revenue = exports.setGroup = exports.groupIdentify = exports.identify = exports.logEvent = exports.track = exports.remove = exports.add = exports.init = exports.AmplitudeBrowser = void 0;
2
+ exports.flush = exports.setTransport = exports.setOptOut = exports.setSessionId = exports.getSessionId = exports.reset = exports.regenerateDeviceId = exports.setDeviceId = exports.getDeviceId = exports.setUserId = exports.getUserId = exports.revenue = exports.setGroup = exports.groupIdentify = exports.identify = exports.logEvent = exports.track = exports.remove = exports.add = exports.init = exports.AmplitudeBrowser = void 0;
3
3
  var tslib_1 = require("tslib");
4
4
  var analytics_core_1 = require("@amplitude/analytics-core");
5
5
  var snippet_helper_1 = require("./utils/snippet-helper");
@@ -7,6 +7,8 @@ var context_1 = require("./plugins/context");
7
7
  var config_1 = require("./config");
8
8
  var cookie_migration_1 = require("./cookie-migration");
9
9
  var campaign_tracker_1 = require("./attribution/campaign-tracker");
10
+ var analytics_connector_1 = require("./utils/analytics-connector");
11
+ var identity_1 = require("./plugins/identity");
10
12
  var AmplitudeBrowser = /** @class */ (function (_super) {
11
13
  (0, tslib_1.__extends)(AmplitudeBrowser, _super);
12
14
  function AmplitudeBrowser() {
@@ -15,7 +17,8 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
15
17
  AmplitudeBrowser.prototype.init = function (apiKey, userId, options) {
16
18
  var _a, _b, _c;
17
19
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
18
- var oldCookies, browserOptions, isNewSession;
20
+ var oldCookies, browserOptions, isNewSession, connector;
21
+ var _this = this;
19
22
  return (0, tslib_1.__generator)(this, function (_d) {
20
23
  switch (_d.label) {
21
24
  case 0: return [4 /*yield*/, (0, cookie_migration_1.parseOldCookies)(apiKey, options)];
@@ -36,6 +39,14 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
36
39
  this.config.sessionId = Date.now();
37
40
  isNewSession = true;
38
41
  }
42
+ connector = (0, analytics_connector_1.getAnalyticsConnector)();
43
+ connector.eventBridge.setEventReceiver(function (event) {
44
+ void _this.track(event.eventType, event.eventProperties);
45
+ });
46
+ connector.identityStore.setIdentity({
47
+ userId: this.config.userId,
48
+ deviceId: this.config.deviceId,
49
+ });
39
50
  // Step 4: Install plugins
40
51
  // Do not track any events before this
41
52
  return [4 /*yield*/, this.add(new context_1.Context())];
@@ -43,8 +54,11 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
43
54
  // Step 4: Install plugins
44
55
  // Do not track any events before this
45
56
  _d.sent();
46
- return [4 /*yield*/, this.add(new analytics_core_1.Destination())];
57
+ return [4 /*yield*/, this.add(new identity_1.IdentityEventSender())];
47
58
  case 5:
59
+ _d.sent();
60
+ return [4 /*yield*/, this.add(new analytics_core_1.Destination())];
61
+ case 6:
48
62
  _d.sent();
49
63
  // Step 5: Set timeline ready for processing events
50
64
  // Send existing events, which might be collected by track before init
@@ -54,7 +68,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
54
68
  }
55
69
  // Step 6: Track attributions
56
70
  return [4 /*yield*/, this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession)];
57
- case 6:
71
+ case 7:
58
72
  // Step 6: Track attributions
59
73
  _d.sent();
60
74
  return [2 /*return*/];
@@ -99,6 +113,10 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
99
113
  var deviceId = (0, config_1.createDeviceId)();
100
114
  this.setDeviceId(deviceId);
101
115
  };
116
+ AmplitudeBrowser.prototype.reset = function () {
117
+ this.setUserId(undefined);
118
+ this.regenerateDeviceId();
119
+ };
102
120
  AmplitudeBrowser.prototype.getSessionId = function () {
103
121
  return this.config.sessionId;
104
122
  };
@@ -278,13 +296,25 @@ exports.setDeviceId = client.setDeviceId.bind(client);
278
296
  /**
279
297
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
280
298
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
281
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
299
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
282
300
  *
283
301
  * ```typescript
284
302
  * regenerateDeviceId();
285
303
  * ```
286
304
  */
287
305
  exports.regenerateDeviceId = client.regenerateDeviceId.bind(client);
306
+ /**
307
+ * reset is a shortcut to anonymize users after they log out, by:
308
+ * - setting userId to `undefined`
309
+ * - regenerating a new random deviceId
310
+ *
311
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
312
+ *
313
+ * ```typescript
314
+ * reset();
315
+ * ```
316
+ */
317
+ exports.reset = client.reset.bind(client);
288
318
  /**
289
319
  * Returns current session ID.
290
320
  *
@@ -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, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n AdditionalBrowserOptions,\n AttributionBrowserOptions,\n BrowserConfig,\n BrowserOptions,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\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, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(browserOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.config.sessionId = Date.now();\n isNewSession = true;\n }\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\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\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n\n/**\n * Flush and send all the events which haven't been sent.\n *\n *```typescript\n * // Send all the unsent events\n * flush();\n *\n * // alternatively, this tracking method is awaitable\n * await flush().promise;\n * ```\n */\nexport const flush = returnWrapper(client.flush.bind(client));\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, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n AdditionalBrowserOptions,\n AttributionBrowserOptions,\n BrowserConfig,\n BrowserOptions,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\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, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\nimport { IdentityEventSender } from './plugins/identity';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(browserOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.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.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\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 Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n reset() {\n this.setUserId(undefined);\n this.regenerateDeviceId();\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\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\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * reset is a shortcut to anonymize users after they log out, by:\n * - setting userId to `undefined`\n * - regenerating a new random deviceId\n *\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * reset();\n * ```\n */\nexport const reset = client.reset.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n\n/**\n * Flush and send all the events which haven't been sent.\n *\n *```typescript\n * // Send all the unsent events\n * flush();\n *\n * // alternatively, this tracking method is awaitable\n * await flush().promise;\n * ```\n */\nexport const flush = returnWrapper(client.flush.bind(client));\n"]}
@@ -1,4 +1,4 @@
1
- export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setTransport, setUserId, track, } from './browser-client';
1
+ export { add, flush, getDeviceId, getSessionId, getUserId, groupIdentify, identify, init, logEvent, remove, reset, revenue, setDeviceId, setGroup, setOptOut, setSessionId, setTransport, setUserId, track, } from './browser-client';
2
2
  export { runQueuedFunctions } from './utils/snippet-helper';
3
3
  export { Revenue, Identify } from '@amplitude/analytics-core';
4
4
  export * as Types from '@amplitude/analytics-types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC"}
package/lib/cjs/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.Types = exports.Identify = exports.Revenue = exports.runQueuedFunctions = exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setGroup = exports.setDeviceId = exports.revenue = exports.remove = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getDeviceId = exports.flush = exports.add = void 0;
2
+ exports.Types = exports.Identify = exports.Revenue = exports.runQueuedFunctions = exports.track = exports.setUserId = exports.setTransport = exports.setSessionId = exports.setOptOut = exports.setGroup = exports.setDeviceId = exports.revenue = exports.reset = exports.remove = exports.logEvent = exports.init = exports.identify = exports.groupIdentify = exports.getUserId = exports.getSessionId = exports.getDeviceId = exports.flush = exports.add = void 0;
3
3
  var tslib_1 = require("tslib");
4
4
  var browser_client_1 = require("./browser-client");
5
5
  Object.defineProperty(exports, "add", { enumerable: true, get: function () { return browser_client_1.add; } });
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "identify", { enumerable: true, get: function ()
12
12
  Object.defineProperty(exports, "init", { enumerable: true, get: function () { return browser_client_1.init; } });
13
13
  Object.defineProperty(exports, "logEvent", { enumerable: true, get: function () { return browser_client_1.logEvent; } });
14
14
  Object.defineProperty(exports, "remove", { enumerable: true, get: function () { return browser_client_1.remove; } });
15
+ Object.defineProperty(exports, "reset", { enumerable: true, get: function () { return browser_client_1.reset; } });
15
16
  Object.defineProperty(exports, "revenue", { enumerable: true, get: function () { return browser_client_1.revenue; } });
16
17
  Object.defineProperty(exports, "setDeviceId", { enumerable: true, get: function () { return browser_client_1.setDeviceId; } });
17
18
  Object.defineProperty(exports, "setGroup", { enumerable: true, get: function () { return browser_client_1.setGroup; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAmB0B;AAlBxB,qGAAA,GAAG,OAAA;AACH,uGAAA,KAAK,OAAA;AACL,6GAAA,WAAW,OAAA;AACX,8GAAA,YAAY,OAAA;AACZ,2GAAA,SAAS,OAAA;AACT,+GAAA,aAAa,OAAA;AACb,0GAAA,QAAQ,OAAA;AACR,sGAAA,IAAI,OAAA;AACJ,0GAAA,QAAQ,OAAA;AACR,wGAAA,MAAM,OAAA;AACN,yGAAA,OAAO,OAAA;AACP,6GAAA,WAAW,OAAA;AACX,0GAAA,QAAQ,OAAA;AACR,2GAAA,SAAS,OAAA;AACT,8GAAA,YAAY,OAAA;AACZ,8GAAA,YAAY,OAAA;AACZ,2GAAA,SAAS,OAAA;AACT,uGAAA,KAAK,OAAA;AAEP,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC1B,iFAAoD","sourcesContent":["export {\n add,\n flush,\n getDeviceId,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport * as Types from '@amplitude/analytics-types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAoB0B;AAnBxB,qGAAA,GAAG,OAAA;AACH,uGAAA,KAAK,OAAA;AACL,6GAAA,WAAW,OAAA;AACX,8GAAA,YAAY,OAAA;AACZ,2GAAA,SAAS,OAAA;AACT,+GAAA,aAAa,OAAA;AACb,0GAAA,QAAQ,OAAA;AACR,sGAAA,IAAI,OAAA;AACJ,0GAAA,QAAQ,OAAA;AACR,wGAAA,MAAM,OAAA;AACN,uGAAA,KAAK,OAAA;AACL,yGAAA,OAAO,OAAA;AACP,6GAAA,WAAW,OAAA;AACX,0GAAA,QAAQ,OAAA;AACR,2GAAA,SAAS,OAAA;AACT,8GAAA,YAAY,OAAA;AACZ,8GAAA,YAAY,OAAA;AACZ,2GAAA,SAAS,OAAA;AACT,uGAAA,KAAK,OAAA;AAEP,yDAA4D;AAAnD,oHAAA,kBAAkB,OAAA;AAC3B,4DAA8D;AAArD,yGAAA,OAAO,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC1B,iFAAoD","sourcesContent":["export {\n add,\n flush,\n getDeviceId,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n} from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport * as Types from '@amplitude/analytics-types';\n"]}
@@ -0,0 +1,9 @@
1
+ import { BeforePlugin, Config, Event, PluginType } from '@amplitude/analytics-types';
2
+ export declare class IdentityEventSender implements BeforePlugin {
3
+ name: string;
4
+ type: PluginType.BEFORE;
5
+ identityStore: import("@amplitude/analytics-connector/dist/types/src/identityStore").IdentityStoreImpl;
6
+ execute(context: Event): Promise<Event>;
7
+ setup(_: Config): Promise<undefined>;
8
+ }
9
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/plugins/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGrF,qBAAa,mBAAoB,YAAW,YAAY;IACtD,IAAI,SAAc;IAClB,IAAI,oBAA8B;IAElC,aAAa,0FAAyC;IAEhD,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAQ7C,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAGrC"}
@@ -0,0 +1,30 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ exports.IdentityEventSender = void 0;
3
+ var tslib_1 = require("tslib");
4
+ var analytics_types_1 = require("@amplitude/analytics-types");
5
+ var analytics_connector_1 = require("../utils/analytics-connector");
6
+ var IdentityEventSender = /** @class */ (function () {
7
+ function IdentityEventSender() {
8
+ this.name = 'identity';
9
+ this.type = analytics_types_1.PluginType.BEFORE;
10
+ this.identityStore = (0, analytics_connector_1.getAnalyticsConnector)().identityStore;
11
+ }
12
+ IdentityEventSender.prototype.execute = function (context) {
13
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
14
+ var userProperties;
15
+ return (0, tslib_1.__generator)(this, function (_a) {
16
+ userProperties = context.user_properties;
17
+ if (userProperties) {
18
+ this.identityStore.editIdentity().updateUserProperties(userProperties).commit();
19
+ }
20
+ return [2 /*return*/, context];
21
+ });
22
+ });
23
+ };
24
+ IdentityEventSender.prototype.setup = function (_) {
25
+ return Promise.resolve(undefined);
26
+ };
27
+ return IdentityEventSender;
28
+ }());
29
+ exports.IdentityEventSender = IdentityEventSender;
30
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/plugins/identity.ts"],"names":[],"mappings":";;;AAAA,8DAAqF;AACrF,oEAAqE;AAErE;IAAA;QACE,SAAI,GAAG,UAAU,CAAC;QAClB,SAAI,GAAG,4BAAU,CAAC,MAAe,CAAC;QAElC,kBAAa,GAAG,IAAA,2CAAqB,GAAE,CAAC,aAAa,CAAC;IAaxD,CAAC;IAXO,qCAAO,GAAb,UAAc,OAAc;;;;gBACpB,cAAc,GAAG,OAAO,CAAC,eAAsC,CAAC;gBACtE,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjF;gBACD,sBAAO,OAAO,EAAC;;;KAChB;IAED,mCAAK,GAAL,UAAM,CAAS;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACH,0BAAC;AAAD,CAAC,AAjBD,IAiBC;AAjBY,kDAAmB","sourcesContent":["import { BeforePlugin, Config, Event, PluginType } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../utils/analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n name = 'identity';\n type = PluginType.BEFORE as const;\n\n identityStore = getAnalyticsConnector().identityStore;\n\n async execute(context: Event): Promise<Event> {\n const userProperties = context.user_properties as Record<string, any>;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return context;\n }\n\n setup(_: Config): Promise<undefined> {\n return Promise.resolve(undefined);\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { AnalyticsConnector } from '@amplitude/analytics-connector';
2
+ export declare const getAnalyticsConnector: () => AnalyticsConnector;
3
+ //# sourceMappingURL=analytics-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-connector.d.ts","sourceRoot":"","sources":["../../../src/utils/analytics-connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,eAAO,MAAM,qBAAqB,QAAO,kBAExC,CAAC"}
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ exports.getAnalyticsConnector = void 0;
3
+ var analytics_connector_1 = require("@amplitude/analytics-connector");
4
+ var getAnalyticsConnector = function () {
5
+ return analytics_connector_1.AnalyticsConnector.getInstance('$default_instance');
6
+ };
7
+ exports.getAnalyticsConnector = getAnalyticsConnector;
8
+ //# sourceMappingURL=analytics-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-connector.js","sourceRoot":"","sources":["../../../src/utils/analytics-connector.ts"],"names":[],"mappings":";;AAAA,sEAAoE;AAE7D,IAAM,qBAAqB,GAAG;IACnC,OAAO,wCAAkB,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,qBAAqB,yBAEhC","sourcesContent":["import { AnalyticsConnector } from '@amplitude/analytics-connector';\n\nexport const getAnalyticsConnector = (): AnalyticsConnector => {\n return AnalyticsConnector.getInstance('$default_instance');\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.0.3";
1
+ export declare const VERSION = "1.1.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.0.3';
3
+ exports.VERSION = '1.1.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,OAAO,CAAC","sourcesContent":["export const VERSION = '1.0.3';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.1.2';\n"]}
@@ -8,6 +8,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {
8
8
  getDeviceId(): string | undefined;
9
9
  setDeviceId(deviceId: string): void;
10
10
  regenerateDeviceId(): void;
11
+ reset(): void;
11
12
  getSessionId(): number | undefined;
12
13
  setSessionId(sessionId: number): void;
13
14
  setOptOut(optOut: boolean): void;
@@ -155,13 +156,25 @@ export declare const setDeviceId: (deviceId: string) => void;
155
156
  /**
156
157
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
157
158
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
158
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
159
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
159
160
  *
160
161
  * ```typescript
161
162
  * regenerateDeviceId();
162
163
  * ```
163
164
  */
164
165
  export declare const regenerateDeviceId: () => void;
166
+ /**
167
+ * reset is a shortcut to anonymize users after they log out, by:
168
+ * - setting userId to `undefined`
169
+ * - regenerating a new random deviceId
170
+ *
171
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
172
+ *
173
+ * ```typescript
174
+ * reset();
175
+ * ```
176
+ */
177
+ export declare const reset: () => void;
165
178
  /**
166
179
  * Returns current session ID.
167
180
  *
@@ -1 +1 @@
1
- {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,MAAM,EACN,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAOpC,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB;IA2CzF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,EAAE,YAAY,UAAQ;IAehG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;IAKlB,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,YAAY,CAAC,SAAS,EAAE,aAAa;IAIrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,CAAC;IASlB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;CAQvD;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,yLAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,4OAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,4OAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,yIAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,0LAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,4HAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,uIAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAlMF,MAAM,GAAG,SAAS,SAkMgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aA9MA,MAAM,SA8M4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA/NC,MAAM,SA+N4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WAxOF,OAAO,SAwO2B,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,cApPC,aAAa,SAoPqB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
1
+ {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiD,MAAM,2BAA2B,CAAC;AACzG,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,MAAM,EACN,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AASpC,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,wBAAwB;IAwDzF,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,EAAE,YAAY,UAAQ;IAehG,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;IAKlB,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,YAAY,CAAC,SAAS,EAAE,aAAa;IAIrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3E,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAC5B,QAAQ,EAAE,SAAS,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,CAAC;IASlB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;CAQvD;AAID;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,yLAA0C,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,8HAAyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,6FAA4C,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK,4OAA2C,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,QAAQ,4OAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,yIAA8C,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,0LAAmD,CAAC;AAC9E,eAAO,MAAM,QAAQ,4HAA8C,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,uIAA6C,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,0BAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,WAvMF,MAAM,GAAG,SAAS,SAuMgB,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0BAAkC,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aAnNA,MAAM,SAmN4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,YAAyC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,YAA4B,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0BAAmC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,cA5OC,MAAM,SA4O4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,WArPF,OAAO,SAqP2B,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,cAjQC,aAAa,SAiQqB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK,2EAA2C,CAAC"}
@@ -5,6 +5,8 @@ import { Context } from './plugins/context';
5
5
  import { useBrowserConfig, createTransport, createDeviceId, createFlexibleStorage } from './config';
6
6
  import { parseOldCookies } from './cookie-migration';
7
7
  import { CampaignTracker } from './attribution/campaign-tracker';
8
+ import { getAnalyticsConnector } from './utils/analytics-connector';
9
+ import { IdentityEventSender } from './plugins/identity';
8
10
  var AmplitudeBrowser = /** @class */ (function (_super) {
9
11
  __extends(AmplitudeBrowser, _super);
10
12
  function AmplitudeBrowser() {
@@ -13,7 +15,8 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
13
15
  AmplitudeBrowser.prototype.init = function (apiKey, userId, options) {
14
16
  var _a, _b, _c;
15
17
  return __awaiter(this, void 0, void 0, function () {
16
- var oldCookies, browserOptions, isNewSession;
18
+ var oldCookies, browserOptions, isNewSession, connector;
19
+ var _this = this;
17
20
  return __generator(this, function (_d) {
18
21
  switch (_d.label) {
19
22
  case 0: return [4 /*yield*/, parseOldCookies(apiKey, options)];
@@ -34,6 +37,14 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
34
37
  this.config.sessionId = Date.now();
35
38
  isNewSession = true;
36
39
  }
40
+ connector = getAnalyticsConnector();
41
+ connector.eventBridge.setEventReceiver(function (event) {
42
+ void _this.track(event.eventType, event.eventProperties);
43
+ });
44
+ connector.identityStore.setIdentity({
45
+ userId: this.config.userId,
46
+ deviceId: this.config.deviceId,
47
+ });
37
48
  // Step 4: Install plugins
38
49
  // Do not track any events before this
39
50
  return [4 /*yield*/, this.add(new Context())];
@@ -41,8 +52,11 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
41
52
  // Step 4: Install plugins
42
53
  // Do not track any events before this
43
54
  _d.sent();
44
- return [4 /*yield*/, this.add(new Destination())];
55
+ return [4 /*yield*/, this.add(new IdentityEventSender())];
45
56
  case 5:
57
+ _d.sent();
58
+ return [4 /*yield*/, this.add(new Destination())];
59
+ case 6:
46
60
  _d.sent();
47
61
  // Step 5: Set timeline ready for processing events
48
62
  // Send existing events, which might be collected by track before init
@@ -52,7 +66,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
52
66
  }
53
67
  // Step 6: Track attributions
54
68
  return [4 /*yield*/, this.runAttributionStrategy(options === null || options === void 0 ? void 0 : options.attribution, isNewSession)];
55
- case 6:
69
+ case 7:
56
70
  // Step 6: Track attributions
57
71
  _d.sent();
58
72
  return [2 /*return*/];
@@ -97,6 +111,10 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
97
111
  var deviceId = createDeviceId();
98
112
  this.setDeviceId(deviceId);
99
113
  };
114
+ AmplitudeBrowser.prototype.reset = function () {
115
+ this.setUserId(undefined);
116
+ this.regenerateDeviceId();
117
+ };
100
118
  AmplitudeBrowser.prototype.getSessionId = function () {
101
119
  return this.config.sessionId;
102
120
  };
@@ -276,13 +294,25 @@ export var setDeviceId = client.setDeviceId.bind(client);
276
294
  /**
277
295
  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you
278
296
  * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.
279
- * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
297
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
280
298
  *
281
299
  * ```typescript
282
300
  * regenerateDeviceId();
283
301
  * ```
284
302
  */
285
303
  export var regenerateDeviceId = client.regenerateDeviceId.bind(client);
304
+ /**
305
+ * reset is a shortcut to anonymize users after they log out, by:
306
+ * - setting userId to `undefined`
307
+ * - regenerating a new random deviceId
308
+ *
309
+ * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.
310
+ *
311
+ * ```typescript
312
+ * reset();
313
+ * ```
314
+ */
315
+ export var reset = client.reset.bind(client);
286
316
  /**
287
317
  * Returns current session ID.
288
318
  *
@@ -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, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n AdditionalBrowserOptions,\n AttributionBrowserOptions,\n BrowserConfig,\n BrowserOptions,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\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, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(browserOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.config.sessionId = Date.now();\n isNewSession = true;\n }\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\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\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `unefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n\n/**\n * Flush and send all the events which haven't been sent.\n *\n *```typescript\n * // Send all the unsent events\n * flush();\n *\n * // alternatively, this tracking method is awaitable\n * await flush().promise;\n * ```\n */\nexport const flush = returnWrapper(client.flush.bind(client));\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, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n AdditionalBrowserOptions,\n AttributionBrowserOptions,\n BrowserConfig,\n BrowserOptions,\n Campaign,\n EventOptions,\n Identify as IIdentify,\n Result,\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, createDeviceId, createFlexibleStorage } from './config';\nimport { parseOldCookies } from './cookie-migration';\nimport { CampaignTracker } from './attribution/campaign-tracker';\nimport { getAnalyticsConnector } from './utils/analytics-connector';\nimport { IdentityEventSender } from './plugins/identity';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions & AdditionalBrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = await parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n lastEventTime: oldCookies.lastEventTime,\n });\n await super._init(browserOptions);\n\n // Step 3: Manage session\n let isNewSession = false;\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.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.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\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 Context());\n await this.add(new IdentityEventSender());\n await this.add(new Destination());\n\n // Step 5: Set timeline ready for processing events\n // Send existing events, which might be collected by track before init\n this.timeline.isReady = true;\n if (!this.config.optOut) {\n this.timeline.scheduleApply(0);\n }\n\n // Step 6: Track attributions\n await this.runAttributionStrategy(options?.attribution, isNewSession);\n }\n\n async runAttributionStrategy(attributionConfig?: AttributionBrowserOptions, isNewSession = false) {\n const track = this.track.bind(this);\n const onNewCampaign = this.setSessionId.bind(this, Date.now());\n\n const storage = await createFlexibleStorage<Campaign>(this.config);\n const campaignTracker = new CampaignTracker(this.config.apiKey, {\n ...attributionConfig,\n storage,\n track,\n onNewCampaign,\n });\n\n await campaignTracker.send(isNewSession);\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string | undefined) {\n this.config.userId = userId;\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n }\n\n regenerateDeviceId() {\n const deviceId = createDeviceId();\n this.setDeviceId(deviceId);\n }\n\n reset() {\n this.setUserId(undefined);\n this.regenerateDeviceId();\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n }\n\n setOptOut(optOut: boolean) {\n this.config.optOut = optOut;\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\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\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(undefined)` to anonymize users after they log out.\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * regenerateDeviceId();\n * ```\n */\nexport const regenerateDeviceId = client.regenerateDeviceId.bind(client);\n\n/**\n * reset is a shortcut to anonymize users after they log out, by:\n * - setting userId to `undefined`\n * - regenerating a new random deviceId\n *\n * With an `undefined` userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n *\n * ```typescript\n * reset();\n * ```\n */\nexport const reset = client.reset.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n\n/**\n * Flush and send all the events which haven't been sent.\n *\n *```typescript\n * // Send all the unsent events\n * flush();\n *\n * // alternatively, this tracking method is awaitable\n * await flush().promise;\n * ```\n */\nexport const flush = returnWrapper(client.flush.bind(client));\n"]}