@amplitude/analytics-browser 1.8.0 → 1.9.0-beta.1

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 (90) hide show
  1. package/lib/cjs/browser-client-factory.js +10 -10
  2. package/lib/cjs/browser-client-factory.js.map +1 -1
  3. package/lib/cjs/browser-client.d.ts +11 -7
  4. package/lib/cjs/browser-client.d.ts.map +1 -1
  5. package/lib/cjs/browser-client.js +88 -44
  6. package/lib/cjs/browser-client.js.map +1 -1
  7. package/lib/cjs/config.d.ts +4 -4
  8. package/lib/cjs/config.d.ts.map +1 -1
  9. package/lib/cjs/config.js +37 -29
  10. package/lib/cjs/config.js.map +1 -1
  11. package/lib/cjs/constants.d.ts +7 -0
  12. package/lib/cjs/constants.d.ts.map +1 -0
  13. package/lib/cjs/constants.js +9 -0
  14. package/lib/cjs/constants.js.map +1 -0
  15. package/lib/cjs/cookie-migration/index.d.ts.map +1 -1
  16. package/lib/cjs/cookie-migration/index.js +32 -25
  17. package/lib/cjs/cookie-migration/index.js.map +1 -1
  18. package/lib/cjs/plugins/context.d.ts +0 -1
  19. package/lib/cjs/plugins/context.d.ts.map +1 -1
  20. package/lib/cjs/plugins/context.js +0 -14
  21. package/lib/cjs/plugins/context.js.map +1 -1
  22. package/lib/cjs/plugins/file-download-tracking.d.ts.map +1 -1
  23. package/lib/cjs/plugins/file-download-tracking.js +3 -3
  24. package/lib/cjs/plugins/file-download-tracking.js.map +1 -1
  25. package/lib/cjs/plugins/form-interaction-tracking.d.ts.map +1 -1
  26. package/lib/cjs/plugins/form-interaction-tracking.js +5 -6
  27. package/lib/cjs/plugins/form-interaction-tracking.js.map +1 -1
  28. package/lib/cjs/plugins/session-handler.d.ts +3 -0
  29. package/lib/cjs/plugins/session-handler.d.ts.map +1 -0
  30. package/lib/cjs/plugins/session-handler.js +54 -0
  31. package/lib/cjs/plugins/session-handler.js.map +1 -0
  32. package/lib/cjs/version.d.ts +1 -1
  33. package/lib/cjs/version.d.ts.map +1 -1
  34. package/lib/cjs/version.js +1 -1
  35. package/lib/cjs/version.js.map +1 -1
  36. package/lib/esm/browser-client-factory.js +11 -11
  37. package/lib/esm/browser-client-factory.js.map +1 -1
  38. package/lib/esm/browser-client.d.ts +11 -7
  39. package/lib/esm/browser-client.d.ts.map +1 -1
  40. package/lib/esm/browser-client.js +91 -47
  41. package/lib/esm/browser-client.js.map +1 -1
  42. package/lib/esm/config.d.ts +4 -4
  43. package/lib/esm/config.d.ts.map +1 -1
  44. package/lib/esm/config.js +36 -27
  45. package/lib/esm/config.js.map +1 -1
  46. package/lib/esm/constants.d.ts +7 -0
  47. package/lib/esm/constants.d.ts.map +1 -0
  48. package/lib/esm/constants.js +7 -0
  49. package/lib/esm/constants.js.map +1 -0
  50. package/lib/esm/cookie-migration/index.d.ts.map +1 -1
  51. package/lib/esm/cookie-migration/index.js +35 -28
  52. package/lib/esm/cookie-migration/index.js.map +1 -1
  53. package/lib/esm/plugins/context.d.ts +0 -1
  54. package/lib/esm/plugins/context.d.ts.map +1 -1
  55. package/lib/esm/plugins/context.js +0 -14
  56. package/lib/esm/plugins/context.js.map +1 -1
  57. package/lib/esm/plugins/file-download-tracking.d.ts.map +1 -1
  58. package/lib/esm/plugins/file-download-tracking.js +3 -3
  59. package/lib/esm/plugins/file-download-tracking.js.map +1 -1
  60. package/lib/esm/plugins/form-interaction-tracking.d.ts.map +1 -1
  61. package/lib/esm/plugins/form-interaction-tracking.js +5 -6
  62. package/lib/esm/plugins/form-interaction-tracking.js.map +1 -1
  63. package/lib/esm/plugins/session-handler.d.ts +3 -0
  64. package/lib/esm/plugins/session-handler.d.ts.map +1 -0
  65. package/lib/esm/plugins/session-handler.js +50 -0
  66. package/lib/esm/plugins/session-handler.js.map +1 -0
  67. package/lib/esm/version.d.ts +1 -1
  68. package/lib/esm/version.d.ts.map +1 -1
  69. package/lib/esm/version.js +1 -1
  70. package/lib/esm/version.js.map +1 -1
  71. package/lib/scripts/amplitude-min.js +1 -1
  72. package/lib/scripts/amplitude-min.js.gz +0 -0
  73. package/lib/scripts/amplitude-min.umd.js +1 -1
  74. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  75. package/lib/scripts/browser-client.d.ts +11 -7
  76. package/lib/scripts/browser-client.d.ts.map +1 -1
  77. package/lib/scripts/config.d.ts +4 -4
  78. package/lib/scripts/config.d.ts.map +1 -1
  79. package/lib/scripts/constants.d.ts +7 -0
  80. package/lib/scripts/constants.d.ts.map +1 -0
  81. package/lib/scripts/cookie-migration/index.d.ts.map +1 -1
  82. package/lib/scripts/plugins/context.d.ts +0 -1
  83. package/lib/scripts/plugins/context.d.ts.map +1 -1
  84. package/lib/scripts/plugins/file-download-tracking.d.ts.map +1 -1
  85. package/lib/scripts/plugins/form-interaction-tracking.d.ts.map +1 -1
  86. package/lib/scripts/plugins/session-handler.d.ts +3 -0
  87. package/lib/scripts/plugins/session-handler.d.ts.map +1 -0
  88. package/lib/scripts/version.d.ts +1 -1
  89. package/lib/scripts/version.d.ts.map +1 -1
  90. package/package.json +7 -5
@@ -1,42 +1,49 @@
1
- import { __awaiter, __generator, __read } from "tslib";
2
- import { getOldCookieName, CookieStorage } from '@amplitude/analytics-client-common';
3
- import { getDefaultConfig } from '../config';
4
- import { LocalStorage } from '../storage/local-storage';
1
+ import { __assign, __awaiter, __generator, __read } from "tslib";
2
+ import { getOldCookieName } from '@amplitude/analytics-client-common';
3
+ import { createCookieStorage, getDefaultConfig, getTopLevelDomain } from '../config';
5
4
  export var parseOldCookies = function (apiKey, options) { return __awaiter(void 0, void 0, void 0, function () {
6
- var storage, oldCookieName, cookies, _a, deviceId, userId, optOut, sessionId, lastEventTime;
7
- var _b;
8
- return __generator(this, function (_c) {
9
- switch (_c.label) {
5
+ var storage, _a, _b, _c, _d, oldCookieName, cookies, _e, deviceId, userId, optOut, sessionId, lastEventTime;
6
+ var _f;
7
+ var _g, _h;
8
+ return __generator(this, function (_j) {
9
+ switch (_j.label) {
10
10
  case 0:
11
- storage = new CookieStorage();
12
- return [4 /*yield*/, storage.isEnabled()];
11
+ _a = createCookieStorage;
12
+ _b = [__assign({}, options)];
13
+ _f = {};
14
+ if (!(options === null || options === void 0 ? void 0 : options.disableCookies)) return [3 /*break*/, 1];
15
+ _c = '';
16
+ return [3 /*break*/, 5];
13
17
  case 1:
14
- if (!(_c.sent()) || (options === null || options === void 0 ? void 0 : options.disableCookies)) {
15
- storage = new LocalStorage();
16
- }
17
- return [4 /*yield*/, storage.isEnabled()];
18
- case 2:
19
- if (!(_c.sent())) {
20
- return [2 /*return*/, {
21
- optOut: false,
22
- }];
23
- }
18
+ if (!((_g = options === null || options === void 0 ? void 0 : options.domain) !== null && _g !== void 0)) return [3 /*break*/, 2];
19
+ _d = _g;
20
+ return [3 /*break*/, 4];
21
+ case 2: return [4 /*yield*/, getTopLevelDomain()];
22
+ case 3:
23
+ _d = (_j.sent());
24
+ _j.label = 4;
25
+ case 4:
26
+ _c = _d;
27
+ _j.label = 5;
28
+ case 5: return [4 /*yield*/, _a.apply(void 0, [__assign.apply(void 0, _b.concat([(_f.domain = _c, _f)]))])];
29
+ case 6:
30
+ storage = _j.sent();
24
31
  oldCookieName = getOldCookieName(apiKey);
25
32
  return [4 /*yield*/, storage.getRaw(oldCookieName)];
26
- case 3:
27
- cookies = _c.sent();
33
+ case 7:
34
+ cookies = _j.sent();
28
35
  if (!cookies) {
29
36
  return [2 /*return*/, {
30
37
  optOut: false,
31
38
  }];
32
39
  }
33
- if (!((_b = options === null || options === void 0 ? void 0 : options.cookieUpgrade) !== null && _b !== void 0 ? _b : getDefaultConfig().cookieUpgrade)) return [3 /*break*/, 5];
40
+ if (!((_h = options === null || options === void 0 ? void 0 : options.cookieUpgrade) !== null && _h !== void 0 ? _h : getDefaultConfig().cookieUpgrade)) return [3 /*break*/, 9];
34
41
  return [4 /*yield*/, storage.remove(oldCookieName)];
35
- case 4:
36
- _c.sent();
37
- _c.label = 5;
38
- case 5:
39
- _a = __read(cookies.split('.'), 5), deviceId = _a[0], userId = _a[1], optOut = _a[2], sessionId = _a[3], lastEventTime = _a[4];
42
+ case 8:
43
+ _j.sent();
44
+ _j.label = 9;
45
+ case 9:
46
+ _e = __read(cookies.split('.'), 5), deviceId = _e[0], userId = _e[1], optOut = _e[2], sessionId = _e[3], lastEventTime = _e[4];
40
47
  return [2 /*return*/, {
41
48
  deviceId: deviceId,
42
49
  userId: decode(userId),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cookie-migration/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,IAAM,eAAe,GAAG,UAAO,MAAc,EAAE,OAAwB;;;;;;gBACxE,OAAO,GAAoB,IAAI,aAAa,EAAU,CAAC;gBACrD,qBAAM,OAAO,CAAC,SAAS,EAAE,EAAA;;gBAA/B,IAAI,CAAC,CAAC,SAAyB,CAAC,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAAA,EAAE;oBAC3D,OAAO,GAAG,IAAI,YAAY,EAAU,CAAC;iBACtC;gBACK,qBAAM,OAAO,CAAC,SAAS,EAAE,EAAA;;gBAA/B,IAAI,CAAC,CAAC,SAAyB,CAAC,EAAE;oBAChC,sBAAO;4BACL,MAAM,EAAE,KAAK;yBACd,EAAC;iBACH;gBAEK,aAAa,GAAG,gBAAgB,CAAC,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,gBAAgB,EAAE,CAAC,aAAa,CAAA,EAA1D,wBAA0D;gBAC5D,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAAnC,SAAmC,CAAC;;;gBAEhC,KAAA,OAAuD,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,MAAM,CAAC,MAAM,CAAC;wBACtB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;wBAC/B,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC;wBACvC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;qBACxB,EAAC;;;KACH,CAAC;AAEF,MAAM,CAAC,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;AAEF,MAAM,CAAC,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","sourcesContent":["import { BrowserOptions, Storage, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName, CookieStorage } from '@amplitude/analytics-client-common';\nimport { getDefaultConfig } from '../config';\nimport { LocalStorage } from '../storage/local-storage';\n\nexport const parseOldCookies = async (apiKey: string, options?: BrowserOptions): Promise<UserSession> => {\n let storage: Storage<string> = new CookieStorage<string>();\n if (!(await storage.isEnabled()) || options?.disableCookies) {\n storage = new LocalStorage<string>();\n }\n if (!(await storage.isEnabled())) {\n return {\n optOut: false,\n };\n }\n\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":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAErF,MAAM,CAAC,IAAM,eAAe,GAAG,UAAO,MAAc,EAAE,OAAwB;;;;;;;gBACtD,KAAA,mBAAmB,CAAA;mCACpC,OAAO;;sBACF,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc;gBAAG,KAAA,EAAE,CAAA;;;4BAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;;;oBAAK,qBAAM,iBAAiB,EAAE,EAAA;;gBAA1B,KAAA,CAAC,SAAyB,CAAC,CAAA;;;gBAA9C,QAA8C;;oBAFvE,qBAAM,qDAEpB,SAAM,eACN,EAAA;;gBAHI,OAAO,GAAG,SAGd;gBACI,aAAa,GAAG,gBAAgB,CAAC,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,gBAAgB,EAAE,CAAC,aAAa,CAAA,EAA1D,wBAA0D;gBAC5D,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAAnC,SAAmC,CAAC;;;gBAEhC,KAAA,OAAuD,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,MAAM,CAAC,MAAM,CAAC;wBACtB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;wBAC/B,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC;wBACvC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;qBACxB,EAAC;;;KACH,CAAC;AAEF,MAAM,CAAC,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;AAEF,MAAM,CAAC,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","sourcesContent":["import { BrowserOptions, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '@amplitude/analytics-client-common';\nimport { createCookieStorage, getDefaultConfig, getTopLevelDomain } from '../config';\n\nexport const parseOldCookies = async (apiKey: string, options?: BrowserOptions): Promise<UserSession> => {\n const storage = await createCookieStorage<string>({\n ...options,\n domain: options?.disableCookies ? '' : options?.domain ?? (await getTopLevelDomain()),\n });\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"]}
@@ -10,6 +10,5 @@ export declare class Context implements BeforePlugin {
10
10
  constructor();
11
11
  setup(config: BrowserConfig): Promise<undefined>;
12
12
  execute(context: Event): Promise<Event>;
13
- isSessionValid(): boolean;
14
13
  }
15
14
  //# sourceMappingURL=context.d.ts.map
@@ -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,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,OAAO,SAA6B;;IAWpC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAM1C,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IA6C7C,cAAc;CAKf"}
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,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,OAAO,SAA6B;;IAWpC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAM1C,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAmC9C"}
@@ -27,15 +27,6 @@ var Context = /** @class */ (function () {
27
27
  return __awaiter(this, void 0, void 0, function () {
28
28
  var time, osName, osVersion, deviceModel, deviceVendor, event;
29
29
  return __generator(this, function (_a) {
30
- /**
31
- * Manages user session triggered by new events
32
- */
33
- if (!this.isSessionValid()) {
34
- // Creates new session
35
- this.config.sessionId = Date.now();
36
- } // else use previously creates session
37
- // Updates last event time to extend time-based session
38
- this.config.lastEventTime = Date.now();
39
30
  time = new Date().getTime();
40
31
  osName = this.uaResult.browser.name;
41
32
  osVersion = this.uaResult.browser.version;
@@ -51,11 +42,6 @@ var Context = /** @class */ (function () {
51
42
  });
52
43
  });
53
44
  };
54
- Context.prototype.isSessionValid = function () {
55
- var lastEventTime = this.config.lastEventTime || Date.now();
56
- var timeSinceLastEvent = Date.now() - lastEventTime;
57
- return timeSinceLastEvent < this.config.sessionTimeout;
58
- };
59
45
  return Context;
60
46
  }());
61
47
  export { Context };
@@ -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 uaResult: UAParser.IResult;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).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 /**\n * Manages user session triggered by new events\n */\n if (!this.isSessionValid()) {\n // Creates new session\n this.config.sessionId = Date.now();\n } // else use previously creates session\n // Updates last event time to extend time-based session\n this.config.lastEventTime = Date.now();\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\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 };\n return event;\n }\n\n isSessionValid() {\n const lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = Date.now() - lastEventTime;\n return timeSinceLastEvent < this.config.sessionTimeout;\n }\n}\n"]}
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 uaResult: UAParser.IResult;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).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 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 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 };\n return event;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKhG,eAAO,MAAM,oBAAoB,QAAO,gBAuEvC,CAAC"}
1
+ {"version":3,"file":"file-download-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAIhG,eAAO,MAAM,oBAAoB,QAAO,gBAuEvC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { __awaiter, __generator } from "tslib";
2
2
  import { PluginType } from '@amplitude/analytics-types';
3
- var FILE_DOWNLOAD_EVENT = 'file_download';
3
+ import { DEFAULT_FILE_DOWNLOAD_EVENT } from '../constants';
4
4
  export var fileDownloadTracking = function () {
5
- var name = 'fileDownloadTracking';
5
+ var name = '@amplitude/plugin-file-download-tracking-browser';
6
6
  var type = PluginType.ENRICHMENT;
7
7
  var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
8
8
  var addFileDownloadListener, ext, links, observer;
@@ -21,7 +21,7 @@ export var fileDownloadTracking = function () {
21
21
  if (fileExtension_1) {
22
22
  a.addEventListener('click', function () {
23
23
  if (fileExtension_1) {
24
- amplitude.track(FILE_DOWNLOAD_EVENT, {
24
+ amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {
25
25
  file_extension: fileExtension_1,
26
26
  file_name: url_1.pathname,
27
27
  link_id: a.id,
@@ -1 +1 @@
1
- {"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,UAAU,EAA2B,MAAM,4BAA4B,CAAC;AAGhG,IAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,IAAM,IAAI,GAAG,sBAAsB,CAAC;IACpC,IAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IACnC,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAyB;;;YACnE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,wHAAwH,CACzH,CAAC;gBACF,sBAAO;aACR;YAEK,uBAAuB,GAAG,UAAC,CAAoB;gBACnD,IAAI;oBACF,IAAM,KAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAG,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAM,eAAa,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,CAAC;oBAElC,IAAI,eAAa,EAAE;wBACjB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE;4BAC1B,IAAI,eAAa,EAAE;gCACjB,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE;oCACnC,cAAc,EAAE,eAAa;oCAC7B,SAAS,EAAE,KAAG,CAAC,QAAQ;oCACvB,OAAO,EAAE,CAAC,CAAC,EAAE;oCACb,SAAS,EAAE,CAAC,CAAC,IAAI;oCACjB,QAAQ,EAAE,CAAC,CAAC,IAAI;iCACjB,CAAC,CAAC;6BACJ;wBACH,CAAC,CAAC,CAAC;qBACJ;iBACF;gBAAC,WAAM;oBACN,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;iBACxG;YACH,CAAC,CAAC;YAEI,GAAG,GACP,+GAA+G,CAAC;YAG5G,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAEvC,wDAAwD;YACxD,0BAA0B;YAC1B,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;gBACrC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAC,SAAS;oBAC9C,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;wBACzB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;4BAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE;gCACzB,uBAAuB,CAAC,IAAyB,CAAC,CAAC;6BACpD;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;aACJ;;;SACF,CAAC;IACF,IAAM,OAAO,GAAG,UAAO,KAAY;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { BrowserConfig } from '../config';\n\nconst FILE_DOWNLOAD_EVENT = 'file_download';\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n const name = 'fileDownloadTracking';\n const type = PluginType.ENRICHMENT;\n const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n try {\n const url = new URL(a.href);\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n a.addEventListener('click', () => {\n if (fileExtension) {\n amplitude.track(FILE_DOWNLOAD_EVENT, {\n file_extension: fileExtension,\n file_name: url.pathname,\n link_id: a.id,\n link_text: a.text,\n link_url: a.href,\n });\n }\n });\n }\n } catch {\n config.loggerProvider.error(`Something went wrong. File download events are not tracked for a#{a.id}`);\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n const execute = async (event: Event) => event;\n\n return {\n name,\n type,\n setup,\n execute,\n };\n};\n"]}
1
+ {"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,UAAU,EAA2B,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,IAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,IAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IACnC,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAyB;;;YACnE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,wHAAwH,CACzH,CAAC;gBACF,sBAAO;aACR;YAEK,uBAAuB,GAAG,UAAC,CAAoB;gBACnD,IAAI;oBACF,IAAM,KAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAG,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAM,eAAa,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,CAAC;oBAElC,IAAI,eAAa,EAAE;wBACjB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE;4BAC1B,IAAI,eAAa,EAAE;gCACjB,SAAS,CAAC,KAAK,CAAC,2BAA2B,EAAE;oCAC3C,cAAc,EAAE,eAAa;oCAC7B,SAAS,EAAE,KAAG,CAAC,QAAQ;oCACvB,OAAO,EAAE,CAAC,CAAC,EAAE;oCACb,SAAS,EAAE,CAAC,CAAC,IAAI;oCACjB,QAAQ,EAAE,CAAC,CAAC,IAAI;iCACjB,CAAC,CAAC;6BACJ;wBACH,CAAC,CAAC,CAAC;qBACJ;iBACF;gBAAC,WAAM;oBACN,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;iBACxG;YACH,CAAC,CAAC;YAEI,GAAG,GACP,+GAA+G,CAAC;YAG5G,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAEvC,wDAAwD;YACxD,0BAA0B;YAC1B,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;gBACrC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAC,SAAS;oBAC9C,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;wBACzB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;4BAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE;gCACzB,uBAAuB,CAAC,IAAyB,CAAC,CAAC;6BACpD;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;aACJ;;;SACF,CAAC;IACF,IAAM,OAAO,GAAG,UAAO,KAAY;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FILE_DOWNLOAD_EVENT } from '../constants';\nimport { BrowserConfig } from '../config';\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n const name = '@amplitude/plugin-file-download-tracking-browser';\n const type = PluginType.ENRICHMENT;\n const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n try {\n const url = new URL(a.href);\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n a.addEventListener('click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n file_extension: fileExtension,\n file_name: url.pathname,\n link_id: a.id,\n link_text: a.text,\n link_url: a.href,\n });\n }\n });\n }\n } catch {\n config.loggerProvider.error(`Something went wrong. File download events are not tracked for a#{a.id}`);\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n const execute = async (event: Event) => event;\n\n return {\n name,\n type,\n setup,\n execute,\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMhG,eAAO,MAAM,uBAAuB,QAAO,gBAgF1C,CAAC"}
1
+ {"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAIhG,eAAO,MAAM,uBAAuB,QAAO,gBAgF1C,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { __awaiter, __generator } from "tslib";
2
2
  import { PluginType } from '@amplitude/analytics-types';
3
- var FORM_START_EVENT = 'form_start';
4
- var FORM_SUBMIT_EVENT = 'form_submit';
3
+ import { DEFAULT_FORM_START_EVENT, DEFAULT_FORM_SUBMIT_EVENT } from '../constants';
5
4
  export var formInteractionTracking = function () {
6
- var name = 'formInteractionTracking';
5
+ var name = '@amplitude/plugin-form-interaction-tracking-browser';
7
6
  var type = PluginType.ENRICHMENT;
8
7
  var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
9
8
  var addFormInteractionListener, forms, observer;
@@ -18,7 +17,7 @@ export var formInteractionTracking = function () {
18
17
  var hasFormChanged = false;
19
18
  form.addEventListener('change', function () {
20
19
  if (!hasFormChanged) {
21
- amplitude.track(FORM_START_EVENT, {
20
+ amplitude.track(DEFAULT_FORM_START_EVENT, {
22
21
  form_id: form.id,
23
22
  form_name: form.name,
24
23
  form_destination: form.action,
@@ -28,13 +27,13 @@ export var formInteractionTracking = function () {
28
27
  }, {});
29
28
  form.addEventListener('submit', function () {
30
29
  if (!hasFormChanged) {
31
- amplitude.track(FORM_START_EVENT, {
30
+ amplitude.track(DEFAULT_FORM_START_EVENT, {
32
31
  form_id: form.id,
33
32
  form_name: form.name,
34
33
  form_destination: form.action,
35
34
  });
36
35
  }
37
- amplitude.track(FORM_SUBMIT_EVENT, {
36
+ amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {
38
37
  form_id: form.id,
39
38
  form_name: form.name,
40
39
  form_destination: form.action,
@@ -1 +1 @@
1
- {"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,UAAU,EAA2B,MAAM,4BAA4B,CAAC;AAGhG,IAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,IAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC,MAAM,CAAC,IAAM,uBAAuB,GAAG;IACrC,IAAM,IAAI,GAAG,yBAAyB,CAAC;IACvC,IAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IACnC,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAyB;;;YACnE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,8HAA8H,CAC/H,CAAC;gBACF,sBAAO;aACR;YAEK,0BAA0B,GAAG,UAAC,IAAqB;gBACvD,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,IAAI,CAAC,gBAAgB,CACnB,QAAQ,EACR;oBACE,IAAI,CAAC,cAAc,EAAE;wBACnB,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE;4BAChC,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,IAAI,CAAC,IAAI;4BACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;yBAC9B,CAAC,CAAC;qBACJ;oBACD,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC,EACD,EAAE,CACH,CAAC;gBAEF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;oBAC9B,IAAI,CAAC,cAAc,EAAE;wBACnB,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE;4BAChC,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,IAAI,CAAC,IAAI;4BACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;yBAC9B,CAAC,CAAC;qBACJ;oBAED,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE;wBACjC,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;wBACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;qBAC9B,CAAC,CAAC;oBACH,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAGI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAE1C,wDAAwD;YACxD,0BAA0B;YAC1B,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;gBACrC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAC,SAAS;oBAC9C,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;wBACzB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;4BAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;gCAC5B,0BAA0B,CAAC,IAAuB,CAAC,CAAC;6BACrD;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;aACJ;;;SACF,CAAC;IACF,IAAM,OAAO,GAAG,UAAO,KAAY;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { BrowserConfig } from '../config';\n\nconst FORM_START_EVENT = 'form_start';\nconst FORM_SUBMIT_EVENT = 'form_submit';\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n const name = 'formInteractionTracking';\n const type = PluginType.ENRICHMENT;\n const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n form.addEventListener(\n 'change',\n () => {\n if (!hasFormChanged) {\n amplitude.track(FORM_START_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n }\n hasFormChanged = true;\n },\n {},\n );\n\n form.addEventListener('submit', () => {\n if (!hasFormChanged) {\n amplitude.track(FORM_START_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n }\n\n amplitude.track(FORM_SUBMIT_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n const execute = async (event: Event) => event;\n\n return {\n name,\n type,\n setup,\n execute,\n };\n};\n"]}
1
+ {"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiB,UAAU,EAA2B,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAGnF,MAAM,CAAC,IAAM,uBAAuB,GAAG;IACrC,IAAM,IAAI,GAAG,qDAAqD,CAAC;IACnE,IAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IACnC,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAyB;;;YACnE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,8HAA8H,CAC/H,CAAC;gBACF,sBAAO;aACR;YAEK,0BAA0B,GAAG,UAAC,IAAqB;gBACvD,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,IAAI,CAAC,gBAAgB,CACnB,QAAQ,EACR;oBACE,IAAI,CAAC,cAAc,EAAE;wBACnB,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,IAAI,CAAC,IAAI;4BACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;yBAC9B,CAAC,CAAC;qBACJ;oBACD,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC,EACD,EAAE,CACH,CAAC;gBAEF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;oBAC9B,IAAI,CAAC,cAAc,EAAE;wBACnB,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,SAAS,EAAE,IAAI,CAAC,IAAI;4BACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;yBAC9B,CAAC,CAAC;qBACJ;oBAED,SAAS,CAAC,KAAK,CAAC,yBAAyB,EAAE;wBACzC,OAAO,EAAE,IAAI,CAAC,EAAE;wBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;wBACpB,gBAAgB,EAAE,IAAI,CAAC,MAAM;qBAC9B,CAAC,CAAC;oBACH,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAGI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAE1C,wDAAwD;YACxD,0BAA0B;YAC1B,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;gBACrC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAC,SAAS;oBAC9C,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ;wBACzB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI;4BAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE;gCAC5B,0BAA0B,CAAC,IAAuB,CAAC,CAAC;6BACrD;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;aACJ;;;SACF,CAAC;IACF,IAAM,OAAO,GAAG,UAAO,KAAY;QAAK,sBAAA,KAAK,EAAA;aAAA,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BrowserClient, PluginType, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FORM_START_EVENT, DEFAULT_FORM_SUBMIT_EVENT } from '../constants';\nimport { BrowserConfig } from '../config';\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = PluginType.ENRICHMENT;\n const setup = async (config: BrowserConfig, amplitude?: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n form.addEventListener(\n 'change',\n () => {\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n }\n hasFormChanged = true;\n },\n {},\n );\n\n form.addEventListener('submit', () => {\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n form_id: form.id,\n form_name: form.name,\n form_destination: form.action,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n const execute = async (event: Event) => event;\n\n return {\n name,\n type,\n setup,\n execute,\n };\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { BeforePlugin } from '@amplitude/analytics-types';
2
+ export declare const sessionHandlerPlugin: () => BeforePlugin;
3
+ //# sourceMappingURL=session-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-handler.d.ts","sourceRoot":"","sources":["../../../src/plugins/session-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmD,MAAM,4BAA4B,CAAC;AAG3G,eAAO,MAAM,oBAAoB,QAAO,YAiDvC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { PluginType } from '@amplitude/analytics-types';
3
+ import { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from '../constants';
4
+ export var sessionHandlerPlugin = function () {
5
+ // browserConfig is defined in setup() which will always be called first
6
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
7
+ // @ts-ignore
8
+ var browserConfig;
9
+ // amplitude is defined in setup() which will always be called first
10
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
11
+ // @ts-ignore
12
+ var amplitude;
13
+ var name = '@amplitude/plugin-session-handler';
14
+ var type = PluginType.BEFORE;
15
+ var setup = function (config, client) { return __awaiter(void 0, void 0, void 0, function () {
16
+ return __generator(this, function (_a) {
17
+ browserConfig = config;
18
+ amplitude = client;
19
+ return [2 /*return*/];
20
+ });
21
+ }); };
22
+ var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {
23
+ var now, lastEventTime, timeSinceLastEvent;
24
+ return __generator(this, function (_a) {
25
+ now = Date.now();
26
+ if (event.event_type === DEFAULT_SESSION_START_EVENT || event.event_type === DEFAULT_SESSION_END_EVENT) {
27
+ browserConfig.lastEventTime = now;
28
+ return [2 /*return*/, event];
29
+ }
30
+ lastEventTime = browserConfig.lastEventTime || now;
31
+ timeSinceLastEvent = now - lastEventTime;
32
+ if (timeSinceLastEvent > browserConfig.sessionTimeout) {
33
+ // assigns new session
34
+ amplitude.setSessionId(now);
35
+ event.session_id = amplitude.getSessionId();
36
+ event.time = now;
37
+ } // else use existing session
38
+ // updates last event time to extend time-based session
39
+ browserConfig.lastEventTime = now;
40
+ return [2 /*return*/, event];
41
+ });
42
+ }); };
43
+ return {
44
+ name: name,
45
+ type: type,
46
+ setup: setup,
47
+ execute: execute,
48
+ };
49
+ };
50
+ //# sourceMappingURL=session-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-handler.js","sourceRoot":"","sources":["../../../src/plugins/session-handler.ts"],"names":[],"mappings":";AAAA,OAAO,EAAqD,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC3G,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEtF,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,wEAAwE;IACxE,6DAA6D;IAC7D,aAAa;IACb,IAAI,aAA4B,CAAC;IACjC,oEAAoE;IACpE,6DAA6D;IAC7D,aAAa;IACb,IAAI,SAAwB,CAAC;IAE7B,IAAM,IAAI,GAAG,mCAAmC,CAAC;IAEjD,IAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;IAE/B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,MAAqB;;YAC/D,aAAa,GAAG,MAAM,CAAC;YACvB,SAAS,GAAG,MAAM,CAAC;;;SACpB,CAAC;IAEF,IAAM,OAAO,GAAG,UAAO,KAAY;;;YAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,IAAI,KAAK,CAAC,UAAU,KAAK,2BAA2B,IAAI,KAAK,CAAC,UAAU,KAAK,yBAAyB,EAAE;gBACtG,aAAa,CAAC,aAAa,GAAG,GAAG,CAAC;gBAClC,sBAAO,KAAK,EAAC;aACd;YAEK,aAAa,GAAG,aAAa,CAAC,aAAa,IAAI,GAAG,CAAC;YACnD,kBAAkB,GAAG,GAAG,GAAG,aAAa,CAAC;YAE/C,IAAI,kBAAkB,GAAG,aAAa,CAAC,cAAc,EAAE;gBACrD,sBAAsB;gBACtB,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC5B,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;aAClB,CAAC,4BAA4B;YAE9B,uDAAuD;YACvD,aAAa,CAAC,aAAa,GAAG,GAAG,CAAC;YAElC,sBAAO,KAAK,EAAC;;SACd,CAAC;IAEF,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BeforePlugin, BrowserClient, BrowserConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from '../constants';\n\nexport const sessionHandlerPlugin = (): BeforePlugin => {\n // browserConfig is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n let browserConfig: BrowserConfig;\n // amplitude is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n let amplitude: BrowserClient;\n\n const name = '@amplitude/plugin-session-handler';\n\n const type = PluginType.BEFORE;\n\n const setup = async (config: BrowserConfig, client: BrowserClient) => {\n browserConfig = config;\n amplitude = client;\n };\n\n const execute = async (event: Event) => {\n const now = Date.now();\n\n if (event.event_type === DEFAULT_SESSION_START_EVENT || event.event_type === DEFAULT_SESSION_END_EVENT) {\n browserConfig.lastEventTime = now;\n return event;\n }\n\n const lastEventTime = browserConfig.lastEventTime || now;\n const timeSinceLastEvent = now - lastEventTime;\n\n if (timeSinceLastEvent > browserConfig.sessionTimeout) {\n // assigns new session\n amplitude.setSessionId(now);\n event.session_id = amplitude.getSessionId();\n event.time = now;\n } // else use existing session\n\n // updates last event time to extend time-based session\n browserConfig.lastEventTime = now;\n\n return event;\n };\n\n return {\n name,\n type,\n setup,\n execute,\n };\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.8.0";
1
+ export declare const VERSION = "1.9.0-beta.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,iBAAiB,CAAC"}
@@ -1,2 +1,2 @@
1
- export var VERSION = '1.8.0';
1
+ export var VERSION = '1.9.0-beta.1';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.8.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,cAAc,CAAC","sourcesContent":["export const VERSION = '1.9.0-beta.1';\n"]}