@esri/telemetry-amazon 6.0.0-beta.0 → 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 (78) hide show
  1. package/README.md +26 -9
  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 +1 -6
  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 +43 -19
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/index.test.js +106 -160
  15. package/dist/esm/index.test.js.map +1 -1
  16. package/dist/esm/plugins/esri.js +419 -0
  17. package/dist/esm/plugins/esri.js.map +1 -0
  18. package/dist/esm/plugins/esri.test.js +556 -0
  19. package/dist/esm/plugins/esri.test.js.map +1 -0
  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/utils/shared.js +74 -0
  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 +1 -6
  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 +43 -19
  43. package/dist/node/index.js.map +1 -1
  44. package/dist/node/index.test.js +106 -160
  45. package/dist/node/index.test.js.map +1 -1
  46. package/dist/node/plugins/esri.js +423 -0
  47. package/dist/node/plugins/esri.js.map +1 -0
  48. package/dist/node/plugins/esri.test.js +559 -0
  49. package/dist/node/plugins/esri.test.js.map +1 -0
  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/utils/shared.js +83 -0
  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/create-page-view-log.d.ts +1 -1
  64. package/dist/types/format-telemetry-attributes.d.ts +3 -3
  65. package/dist/types/index.d.ts +14 -7
  66. package/dist/types/plugins/esri.d.ts +6 -0
  67. package/dist/types/plugins/esri.test.d.ts +1 -0
  68. package/dist/types/plugins/utils/browser.d.ts +12 -0
  69. package/dist/types/plugins/utils/browser.test.d.ts +1 -0
  70. package/dist/types/plugins/utils/os.d.ts +5 -0
  71. package/dist/types/plugins/utils/os.test.d.ts +1 -0
  72. package/dist/types/plugins/utils/shared.d.ts +12 -0
  73. package/dist/types/types.d.ts +114 -19
  74. package/dist/umd/telemetry-amazon.js +1253 -141
  75. package/dist/umd/telemetry-amazon.js.map +1 -1
  76. package/dist/umd/telemetry-amazon.min.js +1253 -141
  77. package/dist/umd/telemetry-amazon.min.js.map +1 -1
  78. package/package.json +4 -3
@@ -0,0 +1,97 @@
1
+ import { parseOS } from './os';
2
+ function getNavigatorSafe() {
3
+ if (typeof window === 'undefined' || !window.navigator) {
4
+ return undefined;
5
+ }
6
+ return window.navigator;
7
+ }
8
+ function getLanguageInfo(nav) {
9
+ if (!nav) {
10
+ return '';
11
+ }
12
+ const lang = nav.language ||
13
+ nav.browserLanguage ||
14
+ (Array.isArray(nav.languages) && nav.languages.length > 0
15
+ ? nav.languages[0]
16
+ : 'en_US') ||
17
+ '';
18
+ return String(lang).toLowerCase().replace('-', '_');
19
+ }
20
+ function getBrowserTimezone() {
21
+ const tzMatch = /\(([A-Za-z\s].*)\)/.exec(new Date().toString());
22
+ return tzMatch ? tzMatch[1] || '' : '';
23
+ }
24
+ function parseBrowserType(userAgent) {
25
+ const operaMatch = /.+(Opera[\s[A-Z]*|OPR[\sA-Z]*)\/([0-9\.]+).*/i.exec(userAgent);
26
+ if (operaMatch) {
27
+ return {
28
+ type: operaMatch[1],
29
+ version: operaMatch[2],
30
+ };
31
+ }
32
+ const edgeOrTridentMatch = /.+(Trident|Edge)\/([0-9\.]+).*/i.exec(userAgent);
33
+ if (edgeOrTridentMatch) {
34
+ return {
35
+ type: edgeOrTridentMatch[1],
36
+ version: edgeOrTridentMatch[2],
37
+ };
38
+ }
39
+ const headlessMatch = /(headlesschrome)(?:\/([\w\.]+)| )/i.exec(userAgent);
40
+ if (headlessMatch) {
41
+ return {
42
+ type: headlessMatch[1],
43
+ version: headlessMatch[2],
44
+ };
45
+ }
46
+ const browserMatch = /.+(Chrome|Firefox|FxiOS)\/([0-9\.]+).*/i.exec(userAgent);
47
+ if (browserMatch) {
48
+ return {
49
+ type: browserMatch[1],
50
+ version: browserMatch[2],
51
+ };
52
+ }
53
+ const safariMatch = /.+(Safari)\/([0-9\.]+).*/i.exec(userAgent);
54
+ if (safariMatch) {
55
+ return {
56
+ type: safariMatch[1],
57
+ version: safariMatch[2],
58
+ };
59
+ }
60
+ const webkitMatch = /.+(AppleWebKit)\/([0-9\.]+).*/i.exec(userAgent);
61
+ if (webkitMatch) {
62
+ return {
63
+ type: webkitMatch[1],
64
+ version: webkitMatch[2],
65
+ };
66
+ }
67
+ const anyMatch = /.*([A-Z]+)\/([0-9\.]+).*/i.exec(userAgent);
68
+ const fallback = anyMatch || ['', 'NA', '0.0.0'];
69
+ return {
70
+ type: fallback[1],
71
+ version: fallback[2],
72
+ };
73
+ }
74
+ export function getBrowserClientInfo() {
75
+ const nav = getNavigatorSafe();
76
+ if (!nav) {
77
+ return {};
78
+ }
79
+ const userAgent = nav.userAgent || '';
80
+ const browser = parseBrowserType(userAgent);
81
+ const isBrave = (nav.brave && nav.brave.isBrave) || false;
82
+ const type = isBrave ? 'Brave' : browser.type;
83
+ const os = parseOS(userAgent);
84
+ const vendorToken = (nav.vendor || '').split(' ').filter(Boolean)[0];
85
+ const make = type === 'Brave' ? type : vendorToken || nav.product || '';
86
+ return {
87
+ language: getLanguageInfo(nav),
88
+ make,
89
+ model: type,
90
+ version: browser.version,
91
+ name: [type, browser.version].filter(Boolean).join('/'),
92
+ timezone: getBrowserTimezone(),
93
+ platform: nav.platform,
94
+ os,
95
+ };
96
+ }
97
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/plugins/utils/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { getBrowserClientInfo } from './browser';
2
+ function mockNavigator(overrides) {
3
+ const navigatorMock = Object.assign({ userAgent: '', language: 'en-US', languages: ['en-US'], vendor: '', product: 'Gecko', platform: '' }, overrides);
4
+ jest.spyOn(window, 'navigator', 'get').mockReturnValue(navigatorMock);
5
+ }
6
+ describe('getBrowserClientInfo', () => {
7
+ beforeEach(() => {
8
+ jest
9
+ .spyOn(Date.prototype, 'toString')
10
+ .mockReturnValue('Tue May 21 2024 09:00:00 GMT-0700 (Pacific Daylight Time)');
11
+ });
12
+ afterEach(() => {
13
+ jest.restoreAllMocks();
14
+ });
15
+ test('returns empty object when navigator is unavailable', () => {
16
+ jest.spyOn(window, 'navigator', 'get').mockReturnValue(undefined);
17
+ expect(getBrowserClientInfo()).toEqual({});
18
+ });
19
+ test('parses Chrome on Windows with vendor make and normalized language', () => {
20
+ mockNavigator({
21
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
22
+ language: 'en-US',
23
+ vendor: 'Google Inc.',
24
+ platform: 'Win32',
25
+ });
26
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
27
+ language: 'en_us',
28
+ make: 'Google',
29
+ model: 'Chrome',
30
+ version: '126.0.6478.127',
31
+ name: 'Chrome/126.0.6478.127',
32
+ timezone: 'Pacific Daylight Time',
33
+ platform: 'Win32',
34
+ os: {
35
+ name: 'Windows',
36
+ version: '10.0',
37
+ },
38
+ }));
39
+ });
40
+ test('parses Safari on iPhone', () => {
41
+ mockNavigator({
42
+ 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',
43
+ language: 'en-GB',
44
+ vendor: 'Apple Computer, Inc.',
45
+ platform: 'iPhone',
46
+ });
47
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
48
+ language: 'en_gb',
49
+ make: 'Apple',
50
+ model: 'Safari',
51
+ version: '604.1',
52
+ name: 'Safari/604.1',
53
+ platform: 'iPhone',
54
+ os: {
55
+ name: 'iOS',
56
+ version: '17.2',
57
+ },
58
+ }));
59
+ });
60
+ test('parses Firefox on Ubuntu and falls back to product for make', () => {
61
+ mockNavigator({
62
+ userAgent: 'Mozilla/5.0 (X11; Ubuntu 22.04; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0',
63
+ language: '',
64
+ languages: ['fr-FR'],
65
+ vendor: '',
66
+ product: 'Gecko',
67
+ platform: 'Linux x86_64',
68
+ });
69
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
70
+ language: 'fr_fr',
71
+ make: 'Gecko',
72
+ model: 'Firefox',
73
+ version: '127.0',
74
+ name: 'Firefox/127.0',
75
+ platform: 'Linux x86_64',
76
+ os: {
77
+ name: 'Ubuntu',
78
+ version: '22.04',
79
+ },
80
+ }));
81
+ });
82
+ test('parses legacy Edge on Windows', () => {
83
+ mockNavigator({
84
+ 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',
85
+ language: 'en-US',
86
+ vendor: 'Microsoft Corporation',
87
+ platform: 'Win32',
88
+ });
89
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
90
+ make: 'Microsoft',
91
+ model: 'Edge',
92
+ version: '12.246',
93
+ name: 'Edge/12.246',
94
+ os: {
95
+ name: 'Windows',
96
+ version: '10.0',
97
+ },
98
+ }));
99
+ });
100
+ test('parses HeadlessChrome user agent', () => {
101
+ mockNavigator({
102
+ 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',
103
+ language: 'en-US',
104
+ vendor: 'Google Inc.',
105
+ platform: 'Linux x86_64',
106
+ });
107
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
108
+ make: 'Google',
109
+ model: 'HeadlessChrome',
110
+ version: '126.0.0.0',
111
+ name: 'HeadlessChrome/126.0.0.0',
112
+ }));
113
+ });
114
+ test('overrides browser type with Brave when navigator.brave is present', () => {
115
+ mockNavigator({
116
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
117
+ language: 'en-US',
118
+ vendor: 'Google Inc.',
119
+ platform: 'Win32',
120
+ brave: { isBrave: jest.fn() },
121
+ });
122
+ expect(getBrowserClientInfo()).toEqual(expect.objectContaining({
123
+ make: 'Brave',
124
+ model: 'Brave',
125
+ version: '126.0.6478.127',
126
+ name: 'Brave/126.0.6478.127',
127
+ }));
128
+ });
129
+ });
130
+ //# 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,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,oBAAoB,EAAE,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,140 @@
1
+ const LINUX_DISTRO_TOKENS = [
2
+ 'ubuntu',
3
+ 'debian',
4
+ 'opensuse',
5
+ 'suse',
6
+ 'gentoo',
7
+ 'arch linux',
8
+ 'arch',
9
+ 'fedora',
10
+ 'centos',
11
+ 'red hat',
12
+ 'rhel',
13
+ 'rocky linux',
14
+ 'rocky',
15
+ 'almalinux',
16
+ 'alma',
17
+ 'amazon linux',
18
+ 'amazonlinux',
19
+ 'amzn',
20
+ 'manjaro',
21
+ 'linux mint',
22
+ 'mint',
23
+ 'pop!_os',
24
+ 'pop_os',
25
+ 'kali',
26
+ 'alpine',
27
+ 'nixos',
28
+ 'linux',
29
+ ];
30
+ function escapeRegExp(value) {
31
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
32
+ }
33
+ const LINUX_DISTRO_TOKEN_SOURCE = [...LINUX_DISTRO_TOKENS]
34
+ .sort((a, b) => b.length - a.length)
35
+ .map((token) => escapeRegExp(token))
36
+ .join('|');
37
+ const LINUX_DISTRO_TOKEN_REGEX = new RegExp(`\\b(${LINUX_DISTRO_TOKEN_SOURCE})\\b`, 'i');
38
+ const LINUX_DISTRO_VERSION_REGEX = new RegExp(`\\b(?:${LINUX_DISTRO_TOKEN_SOURCE})[\\s\\/_-]*([\\d\\.]+)`, 'i');
39
+ const LINUX_DISTRO_NAME_MAP = {
40
+ ubuntu: 'Ubuntu',
41
+ debian: 'Debian',
42
+ opensuse: 'openSUSE',
43
+ suse: 'SUSE',
44
+ gentoo: 'Gentoo',
45
+ arch: 'Arch Linux',
46
+ 'arch linux': 'Arch Linux',
47
+ fedora: 'Fedora',
48
+ centos: 'CentOS',
49
+ 'red hat': 'Red Hat',
50
+ rhel: 'Red Hat',
51
+ rocky: 'Rocky Linux',
52
+ 'rocky linux': 'Rocky Linux',
53
+ alma: 'AlmaLinux',
54
+ almalinux: 'AlmaLinux',
55
+ 'amazon linux': 'Amazon Linux',
56
+ amazonlinux: 'Amazon Linux',
57
+ amzn: 'Amazon Linux',
58
+ manjaro: 'Manjaro',
59
+ 'linux mint': 'Linux Mint',
60
+ mint: 'Linux Mint',
61
+ 'pop!_os': 'Pop!_OS',
62
+ pop_os: 'Pop!_OS',
63
+ kali: 'Kali Linux',
64
+ alpine: 'Alpine Linux',
65
+ nixos: 'NixOS',
66
+ linux: 'Linux',
67
+ };
68
+ function resolveLinuxDistroName(userAgent) {
69
+ const token = (userAgent.match(LINUX_DISTRO_TOKEN_REGEX) || [])[1];
70
+ if (!token) {
71
+ return undefined;
72
+ }
73
+ return LINUX_DISTRO_NAME_MAP[token.toLowerCase()];
74
+ }
75
+ function extractVersion(userAgent, versionRegex) {
76
+ if (!versionRegex) {
77
+ return undefined;
78
+ }
79
+ const version = (userAgent.match(versionRegex) || [])[1];
80
+ if (!version) {
81
+ return undefined;
82
+ }
83
+ return version.replace(/_/g, '.');
84
+ }
85
+ export function parseOS(userAgent) {
86
+ if (!userAgent) {
87
+ return {};
88
+ }
89
+ const normalizedAgent = userAgent.toLowerCase();
90
+ const osMatchers = [
91
+ {
92
+ name: 'Windows Phone',
93
+ regex: /windows phone|windows mobile/i,
94
+ versionRegex: /windows (?:phone(?: os)?|mobile)[\s\/]*([\d\.]+)/i,
95
+ },
96
+ {
97
+ name: 'Windows',
98
+ regex: /windows nt|windows\s\d+/i,
99
+ versionRegex: /windows nt[\s\/]*([\d\.]+)/i,
100
+ },
101
+ {
102
+ name: 'iOS',
103
+ regex: /iphone|ipad|ipod|cpu (?:iphone )?os /i,
104
+ versionRegex: /os\s([\d_\.]+)/i,
105
+ },
106
+ {
107
+ name: 'Android',
108
+ regex: /android/i,
109
+ versionRegex: /android[\s\/]*([\d\.]+)/i,
110
+ },
111
+ {
112
+ name: 'ChromeOS',
113
+ regex: /\bcros\b/i,
114
+ versionRegex: /\bcros\b[^\)]*?([\d]+(?:\.[\d]+)+)/i,
115
+ },
116
+ {
117
+ name: 'MacOS',
118
+ regex: /mac os x|macos|macintosh|macintel|darwin/i,
119
+ versionRegex: /(?:mac os x|os x|macos)[\s\/]*([\d_\.]+)/i,
120
+ },
121
+ {
122
+ name: 'Linux',
123
+ regex: LINUX_DISTRO_TOKEN_REGEX,
124
+ versionRegex: LINUX_DISTRO_VERSION_REGEX,
125
+ },
126
+ ];
127
+ const matched = osMatchers.find((entry) => entry.regex.test(normalizedAgent));
128
+ if (!matched) {
129
+ return {};
130
+ }
131
+ const version = extractVersion(normalizedAgent, matched.versionRegex);
132
+ const name = matched.name === 'Linux'
133
+ ? resolveLinuxDistroName(normalizedAgent) || 'Linux'
134
+ : matched.name;
135
+ return {
136
+ name,
137
+ version,
138
+ };
139
+ }
140
+ //# 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,54 @@
1
+ import { parseOS } from './os';
2
+ describe('parseOS', () => {
3
+ test('returns empty object for empty user agent', () => {
4
+ expect(parseOS('')).toEqual({});
5
+ });
6
+ test.each([
7
+ {
8
+ name: 'Windows desktop Chrome',
9
+ ua: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36',
10
+ expected: { name: 'Windows', version: '10.0' },
11
+ },
12
+ {
13
+ name: 'Windows Phone',
14
+ 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',
15
+ expected: { name: 'Windows Phone', version: '10.0' },
16
+ },
17
+ {
18
+ name: 'iPhone Safari',
19
+ 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',
20
+ expected: { name: 'iOS', version: '17.2' },
21
+ },
22
+ {
23
+ name: 'Android Chrome',
24
+ 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',
25
+ expected: { name: 'Android', version: '14' },
26
+ },
27
+ {
28
+ name: 'MacOS Safari',
29
+ 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',
30
+ expected: { name: 'MacOS', version: '10.15.7' },
31
+ },
32
+ {
33
+ name: 'ChromeOS',
34
+ 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',
35
+ expected: { name: 'ChromeOS', version: '14541.0.0' },
36
+ },
37
+ {
38
+ name: 'Ubuntu Linux Firefox',
39
+ ua: 'Mozilla/5.0 (X11; Ubuntu 22.04; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0',
40
+ expected: { name: 'Ubuntu', version: '22.04' },
41
+ },
42
+ {
43
+ name: 'Amazon Linux distro token',
44
+ ua: 'Mozilla/5.0 (X11; Amazon Linux 2023; x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
45
+ expected: { name: 'Amazon Linux', version: '2023' },
46
+ },
47
+ ])('parses $name user agent', ({ ua, expected }) => {
48
+ expect(parseOS(ua)).toEqual(expected);
49
+ });
50
+ test('returns empty object for unknown agent', () => {
51
+ expect(parseOS('customclient/1.0 (my-runtime)')).toEqual({});
52
+ });
53
+ });
54
+ //# 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,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,OAAO,CAAC,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,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { storage } from '@esri/telemetry';
2
+ export { getBrowserClientInfo } from './browser';
3
+ export const PINPOINT_ENDPOINT_KEY = 'TELEMETRY_PINPOINT_ENDPOINT_ID';
4
+ export const DEFAULT_PINPOINT_REGION = 'us-east-1';
5
+ export const LOG_PREFIX = '[telemetry-amazon]';
6
+ export function isDebugEnabled() {
7
+ var _a;
8
+ const processEnv = typeof globalThis !== 'undefined'
9
+ ? (_a = globalThis.process) === null || _a === void 0 ? void 0 : _a.env
10
+ : undefined;
11
+ return ((processEnv === null || processEnv === void 0 ? void 0 : processEnv.TELEMETRY_AMAZON_DEBUG) === 'true' ||
12
+ (processEnv === null || processEnv === void 0 ? void 0 : processEnv.NODE_ENV) === 'development');
13
+ }
14
+ export function debugLog(message, details) {
15
+ if (!isDebugEnabled() || typeof console === 'undefined') {
16
+ return;
17
+ }
18
+ if (details && typeof console.debug === 'function') {
19
+ console.debug(`${LOG_PREFIX} ${message}`, details);
20
+ return;
21
+ }
22
+ if (typeof console.debug === 'function') {
23
+ console.debug(`${LOG_PREFIX} ${message}`);
24
+ }
25
+ }
26
+ export function warnLog(message, details) {
27
+ if (typeof console === 'undefined' || typeof console.warn !== 'function') {
28
+ return;
29
+ }
30
+ if (details) {
31
+ console.warn(`${LOG_PREFIX} ${message}`, details);
32
+ return;
33
+ }
34
+ console.warn(`${LOG_PREFIX} ${message}`);
35
+ }
36
+ export function getEndpointId() {
37
+ const cached = storage.get(PINPOINT_ENDPOINT_KEY);
38
+ if (cached && typeof cached === 'object' && cached.endpointId) {
39
+ return cached.endpointId;
40
+ }
41
+ if (typeof cached === 'string') {
42
+ return cached;
43
+ }
44
+ const generated = `telemetry-${Date.now()}-${Math.random()
45
+ .toString(16)
46
+ .slice(2)}`;
47
+ storage.set(PINPOINT_ENDPOINT_KEY, { endpointId: generated });
48
+ return generated;
49
+ }
50
+ export function buildEventData(payload) {
51
+ const Attributes = {};
52
+ const Metrics = {};
53
+ Object.entries(payload || {}).forEach(([key, value]) => {
54
+ if (value === undefined || value === null || key === 'name') {
55
+ return;
56
+ }
57
+ if (typeof value === 'number' && Number.isFinite(value)) {
58
+ Metrics[key] = value;
59
+ return;
60
+ }
61
+ if (typeof value === 'string' || typeof value === 'boolean') {
62
+ Attributes[key] = [String(value)];
63
+ return;
64
+ }
65
+ if (Array.isArray(value)) {
66
+ Attributes[key] = value.map((item) => String(item));
67
+ }
68
+ });
69
+ return {
70
+ Attributes: Object.keys(Attributes).length ? Attributes : undefined,
71
+ Metrics: Object.keys(Metrics).length ? Metrics : undefined,
72
+ };
73
+ }
74
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/plugins/utils/shared.ts"],"names":[],"mappings":"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"}
package/dist/esm/types.js CHANGED
@@ -1,2 +1,98 @@
1
- export {};
1
+ export const AMAZON_EVENT_METRIC_KEYS = [
2
+ 'count',
3
+ 'duration',
4
+ 'number',
5
+ 'position',
6
+ 'size',
7
+ /**
8
+ * Original plan was to union this in as `AmazonMetricKey`, but it's strictly defined in the schema that there are 20 metrics
9
+ * so a little non-DRY is fine for readability's sake
10
+ */
11
+ 'metric1',
12
+ 'metric2',
13
+ 'metric3',
14
+ 'metric4',
15
+ 'metric5',
16
+ 'metric6',
17
+ 'metric7',
18
+ 'metric8',
19
+ 'metric9',
20
+ 'metric10',
21
+ 'metric11',
22
+ 'metric12',
23
+ 'metric13',
24
+ 'metric14',
25
+ 'metric15',
26
+ 'metric16',
27
+ 'metric17',
28
+ 'metric18',
29
+ 'metric19',
30
+ 'metric20',
31
+ ];
32
+ export const AMAZON_EVENT_ATTRIBUTE_KEYS = [
33
+ 'action',
34
+ 'attribute',
35
+ 'category',
36
+ 'datasetId',
37
+ 'details',
38
+ 'error',
39
+ 'facetValue',
40
+ 'hostname',
41
+ 'json',
42
+ 'label',
43
+ 'lastLogin',
44
+ 'objectId',
45
+ 'org',
46
+ 'pageUrl',
47
+ 'path',
48
+ 'pageName',
49
+ 'previousPageName',
50
+ 'previousPageUrl',
51
+ 'referrer',
52
+ 'searchQuery',
53
+ 'serviceQuery',
54
+ 'statusCode',
55
+ 'user',
56
+ 'userSince',
57
+ 'urlRequested',
58
+ 'internalUser',
59
+ 'accountType',
60
+ 'workflowId',
61
+ 'browserWebCapabilities',
62
+ /**
63
+ * Original plan was to union this in as `AmazonDimensionKey`, but it's strictly defined in the schema that there are 20 dimensions
64
+ * so a little non-DRY is fine for readability's sake
65
+ */
66
+ 'dimension1',
67
+ 'dimension2',
68
+ 'dimension3',
69
+ 'dimension4',
70
+ 'dimension5',
71
+ 'dimension6',
72
+ 'dimension7',
73
+ 'dimension8',
74
+ 'dimension9',
75
+ 'dimension10',
76
+ 'dimension11',
77
+ 'dimension12',
78
+ 'dimension13',
79
+ 'dimension14',
80
+ 'dimension15',
81
+ 'dimension16',
82
+ 'dimension17',
83
+ 'dimension18',
84
+ 'dimension19',
85
+ 'dimension20',
86
+ /**
87
+ * NOTE: `eventType` is NOT an attribute, but instead a core property on the telemetry payload. Many apps have been treating it
88
+ * as an attribute though, so it's included here for backwards compatibility. Internally it is re-mapped to `eventType`, where all other attributes
89
+ * are mapped to `a_attributeName` in the telemetry payload. This is a known issue and will be addressed in a future release.
90
+ */
91
+ 'eventType',
92
+ /**
93
+ * 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.
94
+ * 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.
95
+ */
96
+ 'pathname',
97
+ ];
2
98
  //# 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,MAAM,CAAC,MAAM,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;AAMX,MAAM,CAAC,MAAM,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"}