@esri/telemetry-amazon 6.0.0-beta.1 → 6.0.0-beta.10

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 (83) hide show
  1. package/README.md +7 -7
  2. package/dist/esm/auth.js +22 -31
  3. package/dist/esm/auth.js.map +1 -1
  4. package/dist/esm/create-event-log.js +15 -15
  5. package/dist/esm/create-event-log.js.map +1 -1
  6. package/dist/esm/create-event-log.test.js +50 -8
  7. package/dist/esm/create-event-log.test.js.map +1 -1
  8. package/dist/esm/create-page-view-log.js +0 -5
  9. package/dist/esm/create-page-view-log.js.map +1 -1
  10. package/dist/esm/format-telemetry-attributes.js +8 -4
  11. package/dist/esm/format-telemetry-attributes.js.map +1 -1
  12. package/dist/esm/index.js +41 -25
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/index.test.js +90 -16
  15. package/dist/esm/index.test.js.map +1 -1
  16. package/dist/esm/plugins/esri.js +346 -65
  17. package/dist/esm/plugins/esri.js.map +1 -1
  18. package/dist/esm/plugins/esri.test.js +498 -36
  19. package/dist/esm/plugins/esri.test.js.map +1 -1
  20. package/dist/esm/plugins/utils/browser.js +97 -0
  21. package/dist/esm/plugins/utils/browser.js.map +1 -0
  22. package/dist/esm/plugins/utils/browser.test.js +130 -0
  23. package/dist/esm/plugins/utils/browser.test.js.map +1 -0
  24. package/dist/esm/plugins/utils/os.js +140 -0
  25. package/dist/esm/plugins/utils/os.js.map +1 -0
  26. package/dist/esm/plugins/utils/os.test.js +54 -0
  27. package/dist/esm/plugins/utils/os.test.js.map +1 -0
  28. package/dist/esm/plugins/{shared.js → utils/shared.js} +1 -1
  29. package/dist/esm/plugins/utils/shared.js.map +1 -0
  30. package/dist/esm/types.js +97 -1
  31. package/dist/esm/types.js.map +1 -1
  32. package/dist/node/auth.js +22 -31
  33. package/dist/node/auth.js.map +1 -1
  34. package/dist/node/create-event-log.js +15 -15
  35. package/dist/node/create-event-log.js.map +1 -1
  36. package/dist/node/create-event-log.test.js +50 -8
  37. package/dist/node/create-event-log.test.js.map +1 -1
  38. package/dist/node/create-page-view-log.js +0 -5
  39. package/dist/node/create-page-view-log.js.map +1 -1
  40. package/dist/node/format-telemetry-attributes.js +8 -4
  41. package/dist/node/format-telemetry-attributes.js.map +1 -1
  42. package/dist/node/index.js +42 -25
  43. package/dist/node/index.js.map +1 -1
  44. package/dist/node/index.test.js +91 -16
  45. package/dist/node/index.test.js.map +1 -1
  46. package/dist/node/plugins/esri.js +346 -65
  47. package/dist/node/plugins/esri.js.map +1 -1
  48. package/dist/node/plugins/esri.test.js +499 -36
  49. package/dist/node/plugins/esri.test.js.map +1 -1
  50. package/dist/node/plugins/utils/browser.js +101 -0
  51. package/dist/node/plugins/utils/browser.js.map +1 -0
  52. package/dist/node/plugins/utils/browser.test.js +132 -0
  53. package/dist/node/plugins/utils/browser.test.js.map +1 -0
  54. package/dist/node/plugins/utils/os.js +144 -0
  55. package/dist/node/plugins/utils/os.js.map +1 -0
  56. package/dist/node/plugins/utils/os.test.js +56 -0
  57. package/dist/node/plugins/utils/os.test.js.map +1 -0
  58. package/dist/node/plugins/{shared.js → utils/shared.js} +3 -2
  59. package/dist/node/plugins/utils/shared.js.map +1 -0
  60. package/dist/node/types.js +98 -0
  61. package/dist/node/types.js.map +1 -1
  62. package/dist/types/create-event-log.d.ts +2 -2
  63. package/dist/types/format-telemetry-attributes.d.ts +3 -3
  64. package/dist/types/index.d.ts +7 -3
  65. package/dist/types/plugins/esri.d.ts +5 -9
  66. package/dist/types/plugins/utils/browser.d.ts +12 -0
  67. package/dist/types/plugins/utils/browser.test.d.ts +1 -0
  68. package/dist/types/plugins/utils/os.d.ts +5 -0
  69. package/dist/types/plugins/utils/os.test.d.ts +1 -0
  70. package/dist/types/plugins/{shared.d.ts → utils/shared.d.ts} +1 -0
  71. package/dist/types/types.d.ts +108 -18
  72. package/dist/umd/telemetry-amazon.js +915 -368
  73. package/dist/umd/telemetry-amazon.js.map +1 -1
  74. package/dist/umd/telemetry-amazon.min.js +915 -368
  75. package/dist/umd/telemetry-amazon.min.js.map +1 -1
  76. package/package.json +4 -2
  77. package/dist/esm/plugins/pinpoint.js +0 -163
  78. package/dist/esm/plugins/pinpoint.js.map +0 -1
  79. package/dist/esm/plugins/shared.js.map +0 -1
  80. package/dist/node/plugins/pinpoint.js +0 -167
  81. package/dist/node/plugins/pinpoint.js.map +0 -1
  82. package/dist/node/plugins/shared.js.map +0 -1
  83. package/dist/types/plugins/pinpoint.d.ts +0 -11
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBrowserClientInfo = void 0;
4
+ const os_1 = require("./os");
5
+ function getNavigatorSafe() {
6
+ if (typeof window === 'undefined' || !window.navigator) {
7
+ return undefined;
8
+ }
9
+ return window.navigator;
10
+ }
11
+ function getLanguageInfo(nav) {
12
+ if (!nav) {
13
+ return '';
14
+ }
15
+ const lang = nav.language ||
16
+ nav.browserLanguage ||
17
+ (Array.isArray(nav.languages) && nav.languages.length > 0
18
+ ? nav.languages[0]
19
+ : 'en_US') ||
20
+ '';
21
+ return String(lang).toLowerCase().replace('-', '_');
22
+ }
23
+ function getBrowserTimezone() {
24
+ const tzMatch = /\(([A-Za-z\s].*)\)/.exec(new Date().toString());
25
+ return tzMatch ? tzMatch[1] || '' : '';
26
+ }
27
+ function parseBrowserType(userAgent) {
28
+ const operaMatch = /.+(Opera[\s[A-Z]*|OPR[\sA-Z]*)\/([0-9\.]+).*/i.exec(userAgent);
29
+ if (operaMatch) {
30
+ return {
31
+ type: operaMatch[1],
32
+ version: operaMatch[2],
33
+ };
34
+ }
35
+ const edgeOrTridentMatch = /.+(Trident|Edge)\/([0-9\.]+).*/i.exec(userAgent);
36
+ if (edgeOrTridentMatch) {
37
+ return {
38
+ type: edgeOrTridentMatch[1],
39
+ version: edgeOrTridentMatch[2],
40
+ };
41
+ }
42
+ const headlessMatch = /(headlesschrome)(?:\/([\w\.]+)| )/i.exec(userAgent);
43
+ if (headlessMatch) {
44
+ return {
45
+ type: headlessMatch[1],
46
+ version: headlessMatch[2],
47
+ };
48
+ }
49
+ const browserMatch = /.+(Chrome|Firefox|FxiOS)\/([0-9\.]+).*/i.exec(userAgent);
50
+ if (browserMatch) {
51
+ return {
52
+ type: browserMatch[1],
53
+ version: browserMatch[2],
54
+ };
55
+ }
56
+ const safariMatch = /.+(Safari)\/([0-9\.]+).*/i.exec(userAgent);
57
+ if (safariMatch) {
58
+ return {
59
+ type: safariMatch[1],
60
+ version: safariMatch[2],
61
+ };
62
+ }
63
+ const webkitMatch = /.+(AppleWebKit)\/([0-9\.]+).*/i.exec(userAgent);
64
+ if (webkitMatch) {
65
+ return {
66
+ type: webkitMatch[1],
67
+ version: webkitMatch[2],
68
+ };
69
+ }
70
+ const anyMatch = /.*([A-Z]+)\/([0-9\.]+).*/i.exec(userAgent);
71
+ const fallback = anyMatch || ['', 'NA', '0.0.0'];
72
+ return {
73
+ type: fallback[1],
74
+ version: fallback[2],
75
+ };
76
+ }
77
+ function getBrowserClientInfo() {
78
+ const nav = getNavigatorSafe();
79
+ if (!nav) {
80
+ return {};
81
+ }
82
+ const userAgent = nav.userAgent || '';
83
+ const browser = parseBrowserType(userAgent);
84
+ const isBrave = (nav.brave && nav.brave.isBrave) || false;
85
+ const type = isBrave ? 'Brave' : browser.type;
86
+ const os = (0, os_1.parseOS)(userAgent);
87
+ const vendorToken = (nav.vendor || '').split(' ').filter(Boolean)[0];
88
+ const make = type === 'Brave' ? type : vendorToken || nav.product || '';
89
+ return {
90
+ language: getLanguageInfo(nav),
91
+ make,
92
+ model: type,
93
+ version: browser.version,
94
+ name: [type, browser.version].filter(Boolean).join('/'),
95
+ timezone: getBrowserTimezone(),
96
+ platform: nav.platform,
97
+ os,
98
+ };
99
+ }
100
+ exports.getBrowserClientInfo = getBrowserClientInfo;
101
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/plugins/utils/browser.ts"],"names":[],"mappings":";;;AAAA,6BAA8C;AAa9C,SAAS,gBAAgB;IACvB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACtD,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,GAAe;IACtC,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,EAAE,CAAC;KACX;IACD,MAAM,IAAI,GACR,GAAG,CAAC,QAAQ;QACX,GAAW,CAAC,eAAe;QAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACvD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,OAAO,CAAC;QACZ,EAAE,CAAC;IACL,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IAIzC,MAAM,UAAU,GAAG,+CAA+C,CAAC,IAAI,CACrE,SAAS,CACV,CAAC;IACF,IAAI,UAAU,EAAE;QACd,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;SACvB,CAAC;KACH;IAED,MAAM,kBAAkB,GAAG,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7E,IAAI,kBAAkB,EAAE;QACtB,OAAO;YACL,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;SAC/B,CAAC;KACH;IAED,MAAM,aAAa,GAAG,oCAAoC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,aAAa,EAAE;QACjB,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;SAC1B,CAAC;KACH;IAED,MAAM,YAAY,GAAG,yCAAyC,CAAC,IAAI,CACjE,SAAS,CACV,CAAC;IACF,IAAI,YAAY,EAAE;QAChB,OAAO;YACL,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;SACzB,CAAC;KACH;IAED,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChE,IAAI,WAAW,EAAE;QACf,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YACpB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;SACxB,CAAC;KACH;IAED,MAAM,WAAW,GAAG,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,IAAI,WAAW,EAAE;QACf,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YACpB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;SACxB,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB;IAClC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,EAAE,CAAC;KACX;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAE,GAAW,CAAC,KAAK,IAAK,GAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAA,YAAO,EAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAExE,OAAO;QACL,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC;QAC9B,IAAI;QACJ,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,QAAQ,EAAE,kBAAkB,EAAE;QAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,EAAE;KACH,CAAC;AACJ,CAAC;AAxBD,oDAwBC"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const browser_1 = require("./browser");
4
+ function mockNavigator(overrides) {
5
+ const navigatorMock = Object.assign({ userAgent: '', language: 'en-US', languages: ['en-US'], vendor: '', product: 'Gecko', platform: '' }, overrides);
6
+ jest.spyOn(window, 'navigator', 'get').mockReturnValue(navigatorMock);
7
+ }
8
+ describe('getBrowserClientInfo', () => {
9
+ beforeEach(() => {
10
+ jest
11
+ .spyOn(Date.prototype, 'toString')
12
+ .mockReturnValue('Tue May 21 2024 09:00:00 GMT-0700 (Pacific Daylight Time)');
13
+ });
14
+ afterEach(() => {
15
+ jest.restoreAllMocks();
16
+ });
17
+ test('returns empty object when navigator is unavailable', () => {
18
+ jest.spyOn(window, 'navigator', 'get').mockReturnValue(undefined);
19
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual({});
20
+ });
21
+ test('parses Chrome on Windows with vendor make and normalized language', () => {
22
+ mockNavigator({
23
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
24
+ language: 'en-US',
25
+ vendor: 'Google Inc.',
26
+ platform: 'Win32',
27
+ });
28
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
29
+ language: 'en_us',
30
+ make: 'Google',
31
+ model: 'Chrome',
32
+ version: '126.0.6478.127',
33
+ name: 'Chrome/126.0.6478.127',
34
+ timezone: 'Pacific Daylight Time',
35
+ platform: 'Win32',
36
+ os: {
37
+ name: 'Windows',
38
+ version: '10.0',
39
+ },
40
+ }));
41
+ });
42
+ test('parses Safari on iPhone', () => {
43
+ mockNavigator({
44
+ userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
45
+ language: 'en-GB',
46
+ vendor: 'Apple Computer, Inc.',
47
+ platform: 'iPhone',
48
+ });
49
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
50
+ language: 'en_gb',
51
+ make: 'Apple',
52
+ model: 'Safari',
53
+ version: '604.1',
54
+ name: 'Safari/604.1',
55
+ platform: 'iPhone',
56
+ os: {
57
+ name: 'iOS',
58
+ version: '17.2',
59
+ },
60
+ }));
61
+ });
62
+ test('parses Firefox on Ubuntu and falls back to product for make', () => {
63
+ mockNavigator({
64
+ userAgent: 'Mozilla/5.0 (X11; Ubuntu 22.04; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0',
65
+ language: '',
66
+ languages: ['fr-FR'],
67
+ vendor: '',
68
+ product: 'Gecko',
69
+ platform: 'Linux x86_64',
70
+ });
71
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
72
+ language: 'fr_fr',
73
+ make: 'Gecko',
74
+ model: 'Firefox',
75
+ version: '127.0',
76
+ name: 'Firefox/127.0',
77
+ platform: 'Linux x86_64',
78
+ os: {
79
+ name: 'Ubuntu',
80
+ version: '22.04',
81
+ },
82
+ }));
83
+ });
84
+ test('parses legacy Edge on Windows', () => {
85
+ mockNavigator({
86
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246',
87
+ language: 'en-US',
88
+ vendor: 'Microsoft Corporation',
89
+ platform: 'Win32',
90
+ });
91
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
92
+ make: 'Microsoft',
93
+ model: 'Edge',
94
+ version: '12.246',
95
+ name: 'Edge/12.246',
96
+ os: {
97
+ name: 'Windows',
98
+ version: '10.0',
99
+ },
100
+ }));
101
+ });
102
+ test('parses HeadlessChrome user agent', () => {
103
+ mockNavigator({
104
+ userAgent: 'Mozilla/5.0 (X11; Linux x86_64; Ubuntu 22.04) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/126.0.0.0 Safari/537.36',
105
+ language: 'en-US',
106
+ vendor: 'Google Inc.',
107
+ platform: 'Linux x86_64',
108
+ });
109
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
110
+ make: 'Google',
111
+ model: 'HeadlessChrome',
112
+ version: '126.0.0.0',
113
+ name: 'HeadlessChrome/126.0.0.0',
114
+ }));
115
+ });
116
+ test('overrides browser type with Brave when navigator.brave is present', () => {
117
+ mockNavigator({
118
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
119
+ language: 'en-US',
120
+ vendor: 'Google Inc.',
121
+ platform: 'Win32',
122
+ brave: { isBrave: jest.fn() },
123
+ });
124
+ expect((0, browser_1.getBrowserClientInfo)()).toEqual(expect.objectContaining({
125
+ make: 'Brave',
126
+ model: 'Brave',
127
+ version: '126.0.6478.127',
128
+ name: 'Brave/126.0.6478.127',
129
+ }));
130
+ });
131
+ });
132
+ //# sourceMappingURL=browser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.test.js","sourceRoot":"","sources":["../../../../src/plugins/utils/browser.test.ts"],"names":[],"mappings":";;AAAA,uCAAiD;AAIjD,SAAS,aAAa,CAAC,SAA6B;IAClD,MAAM,aAAa,GAAG,gBACpB,SAAS,EAAE,EAAE,EACb,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,CAAC,OAAO,CAAC,EACpB,MAAM,EAAE,EAAE,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,EAAE,IACT,SAAS,CACA,CAAC;IAEf,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACxE,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI;aACD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;aACjC,eAAe,CACd,2DAA2D,CAC5D,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,SAAgB,CAAC,CAAC;QAEzE,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC7E,aAAa,CAAC;YACZ,SAAS,EACP,sHAAsH;YACxH,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,uBAAuB;YACjC,QAAQ,EAAE,OAAO;YACjB,EAAE,EAAE;gBACF,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,aAAa,CAAC;YACZ,SAAS,EACP,yIAAyI;YAC3I,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,QAAQ;YAClB,EAAE,EAAE;gBACF,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACvE,aAAa,CAAC;YACZ,SAAS,EACP,sFAAsF;YACxF,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,cAAc;YACxB,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,aAAa,CAAC;YACZ,SAAS,EACP,iIAAiI;YACnI,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE;gBACF,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,aAAa,CAAC;YACZ,SAAS,EACP,6HAA6H;YAC/H,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,0BAA0B;SACjC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC7E,aAAa,CAAC;YACZ,SAAS,EACP,sHAAsH;YACxH,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC,OAAO,CACpC,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseOS = void 0;
4
+ const LINUX_DISTRO_TOKENS = [
5
+ 'ubuntu',
6
+ 'debian',
7
+ 'opensuse',
8
+ 'suse',
9
+ 'gentoo',
10
+ 'arch linux',
11
+ 'arch',
12
+ 'fedora',
13
+ 'centos',
14
+ 'red hat',
15
+ 'rhel',
16
+ 'rocky linux',
17
+ 'rocky',
18
+ 'almalinux',
19
+ 'alma',
20
+ 'amazon linux',
21
+ 'amazonlinux',
22
+ 'amzn',
23
+ 'manjaro',
24
+ 'linux mint',
25
+ 'mint',
26
+ 'pop!_os',
27
+ 'pop_os',
28
+ 'kali',
29
+ 'alpine',
30
+ 'nixos',
31
+ 'linux',
32
+ ];
33
+ function escapeRegExp(value) {
34
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
35
+ }
36
+ const LINUX_DISTRO_TOKEN_SOURCE = [...LINUX_DISTRO_TOKENS]
37
+ .sort((a, b) => b.length - a.length)
38
+ .map((token) => escapeRegExp(token))
39
+ .join('|');
40
+ const LINUX_DISTRO_TOKEN_REGEX = new RegExp(`\\b(${LINUX_DISTRO_TOKEN_SOURCE})\\b`, 'i');
41
+ const LINUX_DISTRO_VERSION_REGEX = new RegExp(`\\b(?:${LINUX_DISTRO_TOKEN_SOURCE})[\\s\\/_-]*([\\d\\.]+)`, 'i');
42
+ const LINUX_DISTRO_NAME_MAP = {
43
+ ubuntu: 'Ubuntu',
44
+ debian: 'Debian',
45
+ opensuse: 'openSUSE',
46
+ suse: 'SUSE',
47
+ gentoo: 'Gentoo',
48
+ arch: 'Arch Linux',
49
+ 'arch linux': 'Arch Linux',
50
+ fedora: 'Fedora',
51
+ centos: 'CentOS',
52
+ 'red hat': 'Red Hat',
53
+ rhel: 'Red Hat',
54
+ rocky: 'Rocky Linux',
55
+ 'rocky linux': 'Rocky Linux',
56
+ alma: 'AlmaLinux',
57
+ almalinux: 'AlmaLinux',
58
+ 'amazon linux': 'Amazon Linux',
59
+ amazonlinux: 'Amazon Linux',
60
+ amzn: 'Amazon Linux',
61
+ manjaro: 'Manjaro',
62
+ 'linux mint': 'Linux Mint',
63
+ mint: 'Linux Mint',
64
+ 'pop!_os': 'Pop!_OS',
65
+ pop_os: 'Pop!_OS',
66
+ kali: 'Kali Linux',
67
+ alpine: 'Alpine Linux',
68
+ nixos: 'NixOS',
69
+ linux: 'Linux',
70
+ };
71
+ function resolveLinuxDistroName(userAgent) {
72
+ const token = (userAgent.match(LINUX_DISTRO_TOKEN_REGEX) || [])[1];
73
+ if (!token) {
74
+ return undefined;
75
+ }
76
+ return LINUX_DISTRO_NAME_MAP[token.toLowerCase()];
77
+ }
78
+ function extractVersion(userAgent, versionRegex) {
79
+ if (!versionRegex) {
80
+ return undefined;
81
+ }
82
+ const version = (userAgent.match(versionRegex) || [])[1];
83
+ if (!version) {
84
+ return undefined;
85
+ }
86
+ return version.replace(/_/g, '.');
87
+ }
88
+ function parseOS(userAgent) {
89
+ if (!userAgent) {
90
+ return {};
91
+ }
92
+ const normalizedAgent = userAgent.toLowerCase();
93
+ const osMatchers = [
94
+ {
95
+ name: 'Windows Phone',
96
+ regex: /windows phone|windows mobile/i,
97
+ versionRegex: /windows (?:phone(?: os)?|mobile)[\s\/]*([\d\.]+)/i,
98
+ },
99
+ {
100
+ name: 'Windows',
101
+ regex: /windows nt|windows\s\d+/i,
102
+ versionRegex: /windows nt[\s\/]*([\d\.]+)/i,
103
+ },
104
+ {
105
+ name: 'iOS',
106
+ regex: /iphone|ipad|ipod|cpu (?:iphone )?os /i,
107
+ versionRegex: /os\s([\d_\.]+)/i,
108
+ },
109
+ {
110
+ name: 'Android',
111
+ regex: /android/i,
112
+ versionRegex: /android[\s\/]*([\d\.]+)/i,
113
+ },
114
+ {
115
+ name: 'ChromeOS',
116
+ regex: /\bcros\b/i,
117
+ versionRegex: /\bcros\b[^\)]*?([\d]+(?:\.[\d]+)+)/i,
118
+ },
119
+ {
120
+ name: 'MacOS',
121
+ regex: /mac os x|macos|macintosh|macintel|darwin/i,
122
+ versionRegex: /(?:mac os x|os x|macos)[\s\/]*([\d_\.]+)/i,
123
+ },
124
+ {
125
+ name: 'Linux',
126
+ regex: LINUX_DISTRO_TOKEN_REGEX,
127
+ versionRegex: LINUX_DISTRO_VERSION_REGEX,
128
+ },
129
+ ];
130
+ const matched = osMatchers.find((entry) => entry.regex.test(normalizedAgent));
131
+ if (!matched) {
132
+ return {};
133
+ }
134
+ const version = extractVersion(normalizedAgent, matched.versionRegex);
135
+ const name = matched.name === 'Linux'
136
+ ? resolveLinuxDistroName(normalizedAgent) || 'Linux'
137
+ : matched.name;
138
+ return {
139
+ name,
140
+ version,
141
+ };
142
+ }
143
+ exports.parseOS = parseOS;
144
+ //# sourceMappingURL=os.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os.js","sourceRoot":"","sources":["../../../../src/plugins/utils/os.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const os_1 = require("./os");
4
+ describe('parseOS', () => {
5
+ test('returns empty object for empty user agent', () => {
6
+ expect((0, os_1.parseOS)('')).toEqual({});
7
+ });
8
+ test.each([
9
+ {
10
+ name: 'Windows desktop Chrome',
11
+ ua: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
12
+ expected: { name: 'Windows', version: '10.0' },
13
+ },
14
+ {
15
+ name: 'Windows Phone',
16
+ ua: 'Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; RM-1152) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15254',
17
+ expected: { name: 'Windows Phone', version: '10.0' },
18
+ },
19
+ {
20
+ name: 'iPhone Safari',
21
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
22
+ expected: { name: 'iOS', version: '17.2' },
23
+ },
24
+ {
25
+ name: 'Android Chrome',
26
+ ua: 'Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36',
27
+ expected: { name: 'Android', version: '14' },
28
+ },
29
+ {
30
+ name: 'MacOS Safari',
31
+ ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15',
32
+ expected: { name: 'MacOS', version: '10.15.7' },
33
+ },
34
+ {
35
+ name: 'ChromeOS',
36
+ ua: 'Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.110 Safari/537.36',
37
+ expected: { name: 'ChromeOS', version: '14541.0.0' },
38
+ },
39
+ {
40
+ name: 'Ubuntu Linux Firefox',
41
+ ua: 'Mozilla/5.0 (X11; Ubuntu 22.04; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0',
42
+ expected: { name: 'Ubuntu', version: '22.04' },
43
+ },
44
+ {
45
+ name: 'Amazon Linux distro token',
46
+ ua: 'Mozilla/5.0 (X11; Amazon Linux 2023; x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
47
+ expected: { name: 'Amazon Linux', version: '2023' },
48
+ },
49
+ ])('parses $name user agent', ({ ua, expected }) => {
50
+ expect((0, os_1.parseOS)(ua)).toEqual(expected);
51
+ });
52
+ test('returns empty object for unknown agent', () => {
53
+ expect((0, os_1.parseOS)('customclient/1.0 (my-runtime)')).toEqual({});
54
+ });
55
+ });
56
+ //# sourceMappingURL=os.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os.test.js","sourceRoot":"","sources":["../../../../src/plugins/utils/os.test.ts"],"names":[],"mappings":";;AAAA,6BAA+B;AAE/B,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,IAAA,YAAO,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC;QACR;YACE,IAAI,EAAE,wBAAwB;YAC9B,EAAE,EAAE,sHAAsH;YAC1H,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;SAC/C;QACD;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,oKAAoK;YACxK,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE;SACrD;QACD;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,yIAAyI;YAC7I,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;SAC3C;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,2HAA2H;YAC/H,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;SAC7C;QACD;YACE,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,uHAAuH;YAC3H,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;SAChD;QACD;YACE,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,qHAAqH;YACzH,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;SACrD;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,EAAE,EAAE,sFAAsF;YAC1F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;SAC/C;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,EAAE,EAAE,oHAAoH;YACxH,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;SACpD;KACF,CAAC,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjD,MAAM,CAAC,IAAA,YAAO,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,IAAA,YAAO,EAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildEventData = exports.getEndpointId = exports.warnLog = exports.debugLog = exports.isDebugEnabled = exports.LOG_PREFIX = exports.DEFAULT_PINPOINT_REGION = exports.PINPOINT_ENDPOINT_KEY = void 0;
4
- // Shared utilities for plugins
3
+ exports.buildEventData = exports.getEndpointId = exports.warnLog = exports.debugLog = exports.isDebugEnabled = exports.LOG_PREFIX = exports.DEFAULT_PINPOINT_REGION = exports.PINPOINT_ENDPOINT_KEY = exports.getBrowserClientInfo = void 0;
5
4
  const telemetry_1 = require("@esri/telemetry");
5
+ var browser_1 = require("./browser");
6
+ Object.defineProperty(exports, "getBrowserClientInfo", { enumerable: true, get: function () { return browser_1.getBrowserClientInfo; } });
6
7
  exports.PINPOINT_ENDPOINT_KEY = 'TELEMETRY_PINPOINT_ENDPOINT_ID';
7
8
  exports.DEFAULT_PINPOINT_REGION = 'us-east-1';
8
9
  exports.LOG_PREFIX = '[telemetry-amazon]';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/plugins/utils/shared.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,101 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AMAZON_EVENT_ATTRIBUTE_KEYS = exports.AMAZON_EVENT_METRIC_KEYS = void 0;
4
+ exports.AMAZON_EVENT_METRIC_KEYS = [
5
+ 'count',
6
+ 'duration',
7
+ 'number',
8
+ 'position',
9
+ 'size',
10
+ /**
11
+ * Original plan was to union this in as `AmazonMetricKey`, but it's strictly defined in the schema that there are 20 metrics
12
+ * so a little non-DRY is fine for readability's sake
13
+ */
14
+ 'metric1',
15
+ 'metric2',
16
+ 'metric3',
17
+ 'metric4',
18
+ 'metric5',
19
+ 'metric6',
20
+ 'metric7',
21
+ 'metric8',
22
+ 'metric9',
23
+ 'metric10',
24
+ 'metric11',
25
+ 'metric12',
26
+ 'metric13',
27
+ 'metric14',
28
+ 'metric15',
29
+ 'metric16',
30
+ 'metric17',
31
+ 'metric18',
32
+ 'metric19',
33
+ 'metric20',
34
+ ];
35
+ exports.AMAZON_EVENT_ATTRIBUTE_KEYS = [
36
+ 'action',
37
+ 'attribute',
38
+ 'category',
39
+ 'datasetId',
40
+ 'details',
41
+ 'error',
42
+ 'facetValue',
43
+ 'hostname',
44
+ 'json',
45
+ 'label',
46
+ 'lastLogin',
47
+ 'objectId',
48
+ 'org',
49
+ 'pageUrl',
50
+ 'path',
51
+ 'pageName',
52
+ 'previousPageName',
53
+ 'previousPageUrl',
54
+ 'referrer',
55
+ 'searchQuery',
56
+ 'serviceQuery',
57
+ 'statusCode',
58
+ 'user',
59
+ 'userSince',
60
+ 'urlRequested',
61
+ 'internalUser',
62
+ 'accountType',
63
+ 'workflowId',
64
+ 'browserWebCapabilities',
65
+ /**
66
+ * Original plan was to union this in as `AmazonDimensionKey`, but it's strictly defined in the schema that there are 20 dimensions
67
+ * so a little non-DRY is fine for readability's sake
68
+ */
69
+ 'dimension1',
70
+ 'dimension2',
71
+ 'dimension3',
72
+ 'dimension4',
73
+ 'dimension5',
74
+ 'dimension6',
75
+ 'dimension7',
76
+ 'dimension8',
77
+ 'dimension9',
78
+ 'dimension10',
79
+ 'dimension11',
80
+ 'dimension12',
81
+ 'dimension13',
82
+ 'dimension14',
83
+ 'dimension15',
84
+ 'dimension16',
85
+ 'dimension17',
86
+ 'dimension18',
87
+ 'dimension19',
88
+ 'dimension20',
89
+ /**
90
+ * NOTE: `eventType` is NOT an attribute, but instead a core property on the telemetry payload. Many apps have been treating it
91
+ * as an attribute though, so it's included here for backwards compatibility. Internally it is re-mapped to `eventType`, where all other attributes
92
+ * are mapped to `a_attributeName` in the telemetry payload. This is a known issue and will be addressed in a future release.
93
+ */
94
+ 'eventType',
95
+ /**
96
+ * NOTE: `pathname` is NOT an attribute, nor an official property at all. It is internally mapped to `path`, but is used interchangeably by consuming apps.
97
+ * It's included here for backwards compatibility, but should not be used in new telemetry events. If `path` is set, this will never be used.
98
+ */
99
+ 'pathname',
100
+ ];
3
101
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AA6Ha,QAAA,wBAAwB,GAAG;IACtC,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN;;;OAGG;IACH,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC;AAME,QAAA,2BAA2B,GAAG;IACzC,QAAQ;IACR,WAAW;IACX,UAAU;IACV,WAAW;IACX,SAAS;IACT,OAAO;IACP,YAAY;IACZ,UAAU;IACV,MAAM;IACN,OAAO;IACP,WAAW;IACX,UAAU;IACV,KAAK;IACL,SAAS;IACT,MAAM;IACN,UAAU;IACV,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,aAAa;IACb,cAAc;IACd,YAAY;IACZ,MAAM;IACN,WAAW;IACX,cAAc;IACd,cAAc;IACd,aAAa;IACb,YAAY;IACZ,wBAAwB;IACxB;;;OAGG;IACH,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb;;;;OAIG;IACH,WAAW;IACX;;;OAGG;IACH,UAAU;CACF,CAAC"}
@@ -1,6 +1,6 @@
1
- import { EventData, LogEventPayload } from './types';
1
+ import { EventAttributes, LogEventPayload } from './types';
2
2
  export declare function createEventLog({ event, dimensionLookup, metricLookup, }: {
3
- event: EventData;
3
+ event: EventAttributes;
4
4
  dimensionLookup: Record<string, any>;
5
5
  metricLookup: Record<string, any>;
6
6
  }): LogEventPayload;
@@ -1,5 +1,5 @@
1
- export declare function formatTelemetryAttributes({ telemetryData, dimensionLookup, excludeKeys, }: {
2
- telemetryData: Record<string, any>;
1
+ import { AmazonEventAttribute } from './types';
2
+ export declare function formatTelemetryAttributes({ telemetryData, dimensionLookup, }: {
3
+ telemetryData: Partial<Record<AmazonEventAttribute, string>>;
3
4
  dimensionLookup?: Record<string, string>;
4
- excludeKeys?: string[];
5
5
  }): Record<string, any>;
@@ -1,10 +1,10 @@
1
- import { AmazonTracker, AmazonTelemetryOptions, AmazonTelemetryEndpointMode, Dimensions, Metrics, IAmazon, PageViewOptions, EventOptions, ISetAccessPermissionsParams, IGetAccessPermissionsParams } from './types';
1
+ import { AmazonAnalytics, AmazonTelemetryOptions, AmazonTelemetryEndpointMode, Dimensions, Metrics, IAmazon, PageViewOptions, EventOptions, EventTrackOptions, ISetAccessPermissionsParams, IGetAccessPermissionsParams } from './types';
2
2
  /**
3
3
  * Amazon Telemetry
4
4
  * Supports Pinpoint and Esri endpoint modes
5
5
  */
6
6
  export declare class Amazon implements IAmazon<Dimensions, Metrics> {
7
- analytics: AmazonTracker;
7
+ analytics: AmazonAnalytics;
8
8
  name: string;
9
9
  previousPage: {
10
10
  pageUrl?: string;
@@ -15,10 +15,14 @@ export declare class Amazon implements IAmazon<Dimensions, Metrics> {
15
15
  disabled: boolean;
16
16
  isInitialized: boolean;
17
17
  mode: AmazonTelemetryEndpointMode;
18
+ private appConfig;
19
+ private userPoolIDConfig;
20
+ private fipsConfig?;
18
21
  constructor(options: AmazonTelemetryOptions);
22
+ private isPinpointRetired;
19
23
  init(): Promise<void>;
20
24
  static setAccessPermissions({ id, authentication, username, accessChangeset, }: ISetAccessPermissionsParams): Promise<import("@esri/arcgis-rest-portal").IUpdateItemResponse>;
21
25
  static getAccessPermissions({ id, authentication, }: IGetAccessPermissionsParams): Promise<Record<string, any>>;
22
26
  logPageView(page: string, options?: PageViewOptions): boolean;
23
- logEvent(event?: EventOptions): boolean;
27
+ logEvent(event?: EventOptions, trackOptions?: EventTrackOptions): boolean;
24
28
  }
@@ -1,10 +1,6 @@
1
- import { AmazonTracker } from '../types';
2
- declare type EsriPluginOptions = {
3
- url?: string;
4
- headers?: Record<string, string>;
5
- trackerName: string;
6
- appName?: string;
7
- appVersion?: string;
1
+ import { AmazonTracker, EsriPluginOptions } from '../types';
2
+ /** TODO: enforce official event payload type from core telemetry library */
3
+ export declare type Payload = {
4
+ [key: string]: any;
8
5
  };
9
- export declare function createEsriPlugin({ url, headers, trackerName, appName, appVersion, }: EsriPluginOptions): AmazonTracker;
10
- export {};
6
+ export declare function createEsriPlugin({ trackerName, appName, appId, appVersion, userPoolID, fips, debounceMs, }: EsriPluginOptions): AmazonTracker;