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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createEsriPlugin = void 0;
4
+ const aws4fetch_1 = require("aws4fetch");
5
+ const auth_1 = require("../auth");
4
6
  const shared_1 = require("./shared");
5
- function getString(value, fallback = '') {
6
- if (value === undefined || value === null) {
7
- return fallback;
8
- }
9
- return String(value);
10
- }
7
+ const ESRI_SIGNING_SERVICE = 'execute-api';
8
+ const ESRI_SIGNING_REGION = 'us-east-1';
9
+ const ESRI_ENDPOINT_URL = (appId) => `https://tedev.arcgis.com/v1/apps/${appId}/events`;
10
+ /** Converts a string to a number, guarded against invalid values */
11
11
  function getNumber(value, fallback = 0) {
12
12
  const numeric = Number(value);
13
13
  return Number.isFinite(numeric) ? numeric : fallback;
@@ -49,6 +49,7 @@ function splitEventData(payload) {
49
49
  };
50
50
  }
51
51
  function buildBatchEventPayload({ eventName, payload, trackerName, appName, appVersion, }) {
52
+ var _a, _b, _c, _d;
52
53
  const endpointId = (0, shared_1.getEndpointId)();
53
54
  const sessionId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;
54
55
  const timestamp = new Date().toISOString();
@@ -58,19 +59,19 @@ function buildBatchEventPayload({ eventName, payload, trackerName, appName, appV
58
59
  Endpoint: {
59
60
  Id: endpointId,
60
61
  Device: {
61
- Make: getString(payload === null || payload === void 0 ? void 0 : payload.deviceMake),
62
- Model: getString(payload === null || payload === void 0 ? void 0 : payload.deviceModel),
62
+ Make: (payload === null || payload === void 0 ? void 0 : payload.deviceMake) || '',
63
+ Model: (payload === null || payload === void 0 ? void 0 : payload.deviceModel) || '',
63
64
  },
64
65
  Location: {
65
- City: getString(payload === null || payload === void 0 ? void 0 : payload.city),
66
- Country: getString(payload === null || payload === void 0 ? void 0 : payload.country),
66
+ City: (payload === null || payload === void 0 ? void 0 : payload.city) || '',
67
+ Country: (payload === null || payload === void 0 ? void 0 : payload.country) || '',
67
68
  Lat: getNumber(payload === null || payload === void 0 ? void 0 : payload.lat),
68
69
  Lon: getNumber(payload === null || payload === void 0 ? void 0 : payload.lon),
69
70
  },
70
71
  Application: {
71
- AppTitle: getString(payload === null || payload === void 0 ? void 0 : payload.appTitle, appName || trackerName),
72
- AppVersion: getString(payload === null || payload === void 0 ? void 0 : payload.appVersion, appVersion),
73
- ClientSdkVersion: getString(payload === null || payload === void 0 ? void 0 : payload.clientSdkVersion, trackerName),
72
+ AppTitle: (_b = (_a = payload === null || payload === void 0 ? void 0 : payload.appTitle) !== null && _a !== void 0 ? _a : appName) !== null && _b !== void 0 ? _b : trackerName,
73
+ AppVersion: (_c = payload === null || payload === void 0 ? void 0 : payload.appVersion) !== null && _c !== void 0 ? _c : appVersion,
74
+ ClientSdkVersion: (_d = payload === null || payload === void 0 ? void 0 : payload.clientSdkVersion) !== null && _d !== void 0 ? _d : trackerName,
74
75
  },
75
76
  },
76
77
  Events: [
@@ -90,36 +91,81 @@ function buildBatchEventPayload({ eventName, payload, trackerName, appName, appV
90
91
  },
91
92
  };
92
93
  }
93
- function createEsriPlugin({ url, headers = {}, trackerName, appName, appVersion, }) {
94
+ function createEsriPlugin({ trackerName, appName, appId, appVersion, userPoolID, fips, }) {
95
+ const url = ESRI_ENDPOINT_URL(appId);
96
+ let isDisabled = false;
97
+ let hasWarned = false;
98
+ const warnOnce = (message, details) => {
99
+ if (hasWarned) {
100
+ return;
101
+ }
102
+ hasWarned = true;
103
+ (0, shared_1.warnLog)(message, details);
104
+ };
94
105
  (0, shared_1.debugLog)('createEsriPlugin initialized', {
95
106
  trackerName,
96
107
  hasUrl: Boolean(url),
97
- headerCount: Object.keys(headers).length,
98
108
  });
109
+ if (!url) {
110
+ isDisabled = true;
111
+ warnOnce('Esri telemetry disabled due to missing internal endpoint URL', {
112
+ trackerName,
113
+ });
114
+ }
115
+ if (!userPoolID) {
116
+ isDisabled = true;
117
+ warnOnce('Esri telemetry disabled due to missing userPoolID', {
118
+ trackerName,
119
+ });
120
+ }
121
+ if (typeof fetch !== 'function') {
122
+ isDisabled = true;
123
+ warnOnce('Esri telemetry disabled because fetch is unavailable', {
124
+ trackerName,
125
+ });
126
+ }
99
127
  return {
100
128
  track: (eventName, payload) => {
101
- if (!url || typeof fetch !== 'function') {
102
- (0, shared_1.debugLog)('Skipping endpoint track call', {
129
+ if (isDisabled || !url || !userPoolID) {
130
+ (0, shared_1.debugLog)('Skipping esri track call', {
103
131
  eventName,
104
- reason: !url ? 'missing-url' : 'fetch-unavailable',
132
+ reason: 'plugin-disabled',
105
133
  });
106
134
  return false;
107
135
  }
108
- (0, shared_1.debugLog)('Sending endpoint event', {
136
+ (0, shared_1.debugLog)('Sending esri endpoint event', {
109
137
  eventName,
110
138
  trackerName,
111
139
  url,
112
140
  });
113
- void fetch(url, {
114
- method: 'POST',
115
- headers: Object.assign({ 'Content-Type': 'application/json' }, headers),
116
- body: JSON.stringify(buildBatchEventPayload({
117
- eventName,
118
- payload,
119
- trackerName,
120
- appName,
121
- appVersion,
122
- })),
141
+ void (0, auth_1.getCredentials)(userPoolID, { fips })
142
+ .then((credentials) => {
143
+ const accessKeyId = (credentials === null || credentials === void 0 ? void 0 : credentials.AccessKeyId) || (credentials === null || credentials === void 0 ? void 0 : credentials.accessKeyId);
144
+ const secretAccessKey = (credentials === null || credentials === void 0 ? void 0 : credentials.SecretKey) || (credentials === null || credentials === void 0 ? void 0 : credentials.secretAccessKey);
145
+ const sessionToken = (credentials === null || credentials === void 0 ? void 0 : credentials.SessionToken) || (credentials === null || credentials === void 0 ? void 0 : credentials.sessionToken);
146
+ if (!accessKeyId || !secretAccessKey) {
147
+ throw new Error('Signed endpoint credentials are missing required key fields.');
148
+ }
149
+ const client = new aws4fetch_1.AwsClient({
150
+ accessKeyId,
151
+ secretAccessKey,
152
+ sessionToken,
153
+ service: ESRI_SIGNING_SERVICE,
154
+ region: ESRI_SIGNING_REGION,
155
+ });
156
+ return client.fetch(url, {
157
+ method: 'POST',
158
+ headers: {
159
+ 'Content-Type': 'application/json',
160
+ },
161
+ body: JSON.stringify(buildBatchEventPayload({
162
+ eventName,
163
+ payload: payload,
164
+ trackerName,
165
+ appName,
166
+ appVersion,
167
+ })),
168
+ });
123
169
  })
124
170
  .then(() => {
125
171
  (0, shared_1.debugLog)('Endpoint event sent', {
@@ -128,7 +174,8 @@ function createEsriPlugin({ url, headers = {}, trackerName, appName, appVersion,
128
174
  });
129
175
  })
130
176
  .catch((error) => {
131
- (0, shared_1.warnLog)('Endpoint track failed', {
177
+ isDisabled = true;
178
+ warnOnce('Esri telemetry disabled after endpoint track failure', {
132
179
  eventName,
133
180
  trackerName,
134
181
  message: (error === null || error === void 0 ? void 0 : error.message) || String(error),
@@ -1 +1 @@
1
- {"version":3,"file":"esri.js","sourceRoot":"","sources":["../../../src/plugins/esri.ts"],"names":[],"mappings":";;;AACA,qCAA4D;AAa5D,SAAS,SAAS,CAAC,KAAU,EAAE,QAAQ,GAAG,EAAE;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QACzC,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,KAAU,EAAE,QAAQ,GAAG,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,OAA4B;IAIlD,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;QAC3B,MAAM;QACN,UAAU;QACV,YAAY;QACZ,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,MAAM;QACN,SAAS;QACT,KAAK;QACL,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YAClE,OAAO;SACR;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACvD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO;SACR;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC3D,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;SACR;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACrD,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACzC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,OAAO,EACP,WAAW,EACX,OAAO,EACP,UAAU,GAOX;IACC,MAAM,UAAU,GAAG,IAAA,sBAAa,GAAE,CAAC;IACnC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAExD,OAAO;QACL,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;oBACpC,KAAK,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC;iBACvC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;oBAC9B,OAAO,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC;oBACpC,GAAG,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;oBAC5B,GAAG,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC;iBAC7B;gBACD,WAAW,EAAE;oBACX,QAAQ,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,CAAC;oBAC9D,UAAU,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE,UAAU,CAAC;oBACtD,gBAAgB,EAAE,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,EAAE,WAAW,CAAC;iBACpE;aACF;YACD,MAAM,EAAE;gBACN;oBACE,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,SAAS;oBACpB,OAAO,EAAE;wBACP,EAAE,EAAE,SAAS;wBACb,cAAc,EAAE,SAAS;wBACzB,YAAY,EAAE,SAAS;wBACvB,QAAQ,EAAE,CAAC;qBACZ;oBACD,UAAU,EAAE,UAAU;oBACtB,OAAO,EAAE,OAAO;iBACjB;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,OAAO,GAAG,EAAE,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACQ;IAClB,IAAA,iBAAQ,EAAC,8BAA8B,EAAE;QACvC,WAAW;QACX,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;KACzC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,CAAC,SAAiB,EAAE,OAA4B,EAAW,EAAE;YAClE,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBACvC,IAAA,iBAAQ,EAAC,8BAA8B,EAAE;oBACvC,SAAS;oBACT,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB;iBACnD,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC;aACd;YAED,IAAA,iBAAQ,EAAC,wBAAwB,EAAE;gBACjC,SAAS;gBACT,WAAW;gBACX,GAAG;aACJ,CAAC,CAAC;YAEH,KAAK,KAAK,CAAC,GAAG,EAAE;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,kBACL,cAAc,EAAE,kBAAkB,IAC/B,OAAO,CACX;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,sBAAsB,CAAC;oBACrB,SAAS;oBACT,OAAO;oBACP,WAAW;oBACX,OAAO;oBACP,UAAU;iBACX,CAAC,CACH;aACF,CAAC;iBACC,IAAI,CAAC,GAAG,EAAE;gBACT,IAAA,iBAAQ,EAAC,qBAAqB,EAAE;oBAC9B,SAAS;oBACT,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;gBACpB,IAAA,gBAAO,EAAC,uBAAuB,EAAE;oBAC/B,SAAS;oBACT,WAAW;oBACX,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,MAAM,CAAC,KAAK,CAAC;iBACzC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEL,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AA9DD,4CA8DC"}
1
+ {"version":3,"file":"esri.js","sourceRoot":"","sources":["../../../src/plugins/esri.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,62 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const esri_1 = require("./esri");
4
+ const aws4fetch_1 = require("aws4fetch");
5
+ const auth_1 = require("../auth");
6
+ const ESRI_ENDPOINT = 'https://tedev.arcgis.com/v1/apps/app-id/events';
7
+ jest.mock('aws4fetch', () => ({
8
+ AwsClient: jest.fn(),
9
+ }));
10
+ jest.mock('../auth', () => ({
11
+ getCredentials: jest.fn(),
12
+ }));
13
+ const AwsClientMock = aws4fetch_1.AwsClient;
14
+ const getCredentialsMock = auth_1.getCredentials;
4
15
  describe('esri plugin', () => {
16
+ let signedFetchMock;
17
+ let warnSpy;
18
+ beforeEach(() => {
19
+ signedFetchMock = jest.fn().mockResolvedValue({ ok: true, status: 200 });
20
+ AwsClientMock.mockReset();
21
+ AwsClientMock.mockImplementation(() => ({
22
+ fetch: signedFetchMock,
23
+ }));
24
+ getCredentialsMock.mockReset();
25
+ getCredentialsMock.mockResolvedValue({
26
+ AccessKeyId: 'akid',
27
+ SecretKey: 'secret',
28
+ SessionToken: 'token',
29
+ });
30
+ warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => undefined);
31
+ });
5
32
  afterEach(() => {
6
33
  jest.restoreAllMocks();
7
34
  delete globalThis.fetch;
8
35
  });
9
- test('returns false when no url is provided', () => {
36
+ test('returns false and warns once when userPoolID is missing', () => {
10
37
  const plugin = (0, esri_1.createEsriPlugin)({
11
38
  trackerName: 'amazon',
39
+ appId: 'app-id',
12
40
  });
13
- const result = plugin.track('pageView', { path: '/home' });
14
- expect(result).toBe(false);
41
+ const first = plugin.track('pageView', { path: '/home' });
42
+ const second = plugin.track('event', { name: 'test' });
43
+ expect(first).toBe(false);
44
+ expect(second).toBe(false);
45
+ expect(warnSpy).toHaveBeenCalledTimes(1);
46
+ expect(getCredentialsMock).not.toHaveBeenCalled();
47
+ expect(signedFetchMock).not.toHaveBeenCalled();
15
48
  });
16
49
  test('sends BatchEvent payload envelope with expected field casing', async () => {
17
- const fetchMock = jest
18
- .fn()
19
- .mockResolvedValue({ ok: true, status: 200 });
20
- globalThis.fetch = fetchMock;
50
+ globalThis.fetch = jest.fn();
21
51
  jest.spyOn(Date, 'now').mockReturnValue(1716134400000);
22
52
  jest.spyOn(Math, 'random').mockReturnValue(0.5);
23
53
  const plugin = (0, esri_1.createEsriPlugin)({
24
- url: 'https://example.com/v1/apps/app-id/events',
25
- headers: { 'x-test': '1' },
26
54
  trackerName: 'amazon',
27
55
  appName: 'ArcGIS Telemetry',
28
56
  appVersion: '5.1.3',
57
+ appId: 'app-id',
58
+ userPoolID: 'pool-id',
59
+ fips: true,
29
60
  });
30
61
  const result = plugin.track('pageView', {
31
62
  pageUrl: '/home',
@@ -39,13 +70,20 @@ describe('esri plugin', () => {
39
70
  expect(result).toBe(true);
40
71
  await Promise.resolve();
41
72
  await Promise.resolve();
42
- expect(fetchMock).toHaveBeenCalledTimes(1);
43
- const [url, request] = fetchMock.mock.calls[0];
44
- expect(url).toBe('https://example.com/v1/apps/app-id/events');
73
+ expect(getCredentialsMock).toHaveBeenCalledWith('pool-id', { fips: true });
74
+ expect(AwsClientMock).toHaveBeenCalledWith({
75
+ accessKeyId: 'akid',
76
+ secretAccessKey: 'secret',
77
+ sessionToken: 'token',
78
+ service: 'execute-api',
79
+ region: 'us-east-1',
80
+ });
81
+ expect(signedFetchMock).toHaveBeenCalledTimes(1);
82
+ const [url, request] = signedFetchMock.mock.calls[0];
83
+ expect(url).toBe(ESRI_ENDPOINT);
45
84
  expect(request.method).toBe('POST');
46
85
  expect(request.headers).toEqual({
47
86
  'Content-Type': 'application/json',
48
- 'x-test': '1',
49
87
  });
50
88
  const body = JSON.parse(request.body);
51
89
  expect(body.BatchEvent.Endpoint.Attributes).toBeUndefined();
@@ -92,5 +130,34 @@ describe('esri plugin', () => {
92
130
  }),
93
131
  }));
94
132
  });
133
+ test('uses esri endpoint url built from app id', async () => {
134
+ globalThis.fetch = jest.fn();
135
+ const plugin = (0, esri_1.createEsriPlugin)({
136
+ trackerName: 'amazon',
137
+ appId: 'app-id',
138
+ userPoolID: 'pool-id',
139
+ });
140
+ expect(plugin.track('pageView', { pageUrl: '/override' })).toBe(true);
141
+ await Promise.resolve();
142
+ await Promise.resolve();
143
+ const [url] = signedFetchMock.mock.calls[0];
144
+ expect(url).toBe(ESRI_ENDPOINT);
145
+ });
146
+ test('disables telemetry after a send failure and warns only once', async () => {
147
+ globalThis.fetch = jest.fn();
148
+ signedFetchMock.mockRejectedValue(new Error('boom'));
149
+ const plugin = (0, esri_1.createEsriPlugin)({
150
+ trackerName: 'amazon',
151
+ appId: 'app-id',
152
+ userPoolID: 'pool-id',
153
+ });
154
+ expect(plugin.track('pageView', { path: '/home' })).toBe(true);
155
+ await Promise.resolve();
156
+ await Promise.resolve();
157
+ await new Promise((resolve) => process.nextTick(resolve));
158
+ expect(warnSpy).toHaveBeenCalledTimes(1);
159
+ expect(plugin.track('event', { name: 'after-failure' })).toBe(false);
160
+ expect(warnSpy).toHaveBeenCalledTimes(1);
161
+ });
95
162
  });
96
163
  //# sourceMappingURL=esri.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"esri.test.js","sourceRoot":"","sources":["../../../src/plugins/esri.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esri.test.js","sourceRoot":"","sources":["../../../src/plugins/esri.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { AmazonTracker } from '../types';
2
2
  declare type EsriPluginOptions = {
3
- url?: string;
4
- headers?: Record<string, string>;
5
3
  trackerName: string;
4
+ appId: string;
6
5
  appName?: string;
7
6
  appVersion?: string;
7
+ userPoolID?: string;
8
+ fips?: boolean;
8
9
  };
9
- export declare function createEsriPlugin({ url, headers, trackerName, appName, appVersion, }: EsriPluginOptions): AmazonTracker;
10
+ export declare function createEsriPlugin({ trackerName, appName, appId, appVersion, userPoolID, fips, }: EsriPluginOptions): AmazonTracker;
10
11
  export {};
@@ -49,18 +49,20 @@ export declare type AmazonApp = {
49
49
  id?: string;
50
50
  version?: string;
51
51
  };
52
- export declare type AmazonTelemetryOptions = {
52
+ export declare type AmazonTelemetryPinpointOptions = {
53
53
  userPoolID: string;
54
54
  app?: AmazonApp;
55
55
  fips?: boolean;
56
- mode?: AmazonTelemetryEndpointMode;
57
- endpoint?: AmazonTelemetryEndpointOptions;
56
+ mode?: 'pinpoint';
58
57
  };
59
- export declare type AmazonTelemetryEndpointMode = 'pinpoint' | 'esri';
60
- export declare type AmazonTelemetryEndpointOptions = {
61
- url?: string;
62
- headers?: Record<string, string>;
58
+ export declare type AmazonTelemetryEsriOptions = {
59
+ userPoolID: string;
60
+ app?: AmazonApp;
61
+ fips?: boolean;
62
+ mode: 'esri';
63
63
  };
64
+ export declare type AmazonTelemetryOptions = AmazonTelemetryPinpointOptions | AmazonTelemetryEsriOptions;
65
+ export declare type AmazonTelemetryEndpointMode = 'pinpoint' | 'esri';
64
66
  export declare type LogPageViewPayload = {
65
67
  name: string;
66
68
  referrer: string;
@@ -1795,12 +1795,10 @@
1795
1795
  };
1796
1796
  }
1797
1797
 
1798
- function getString(value, fallback = '') {
1799
- if (value === undefined || value === null) {
1800
- return fallback;
1801
- }
1802
- return String(value);
1803
- }
1798
+ const ESRI_SIGNING_SERVICE = 'execute-api';
1799
+ const ESRI_SIGNING_REGION = 'us-east-1';
1800
+ const ESRI_ENDPOINT_URL = (appId) => `https://tedev.arcgis.com/v1/apps/${appId}/events`;
1801
+ /** Converts a string to a number, guarded against invalid values */
1804
1802
  function getNumber(value, fallback = 0) {
1805
1803
  const numeric = Number(value);
1806
1804
  return Number.isFinite(numeric) ? numeric : fallback;
@@ -1842,6 +1840,7 @@
1842
1840
  };
1843
1841
  }
1844
1842
  function buildBatchEventPayload({ eventName, payload, trackerName, appName, appVersion, }) {
1843
+ var _a, _b, _c, _d;
1845
1844
  const endpointId = getEndpointId$1();
1846
1845
  const sessionId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;
1847
1846
  const timestamp = new Date().toISOString();
@@ -1851,19 +1850,19 @@
1851
1850
  Endpoint: {
1852
1851
  Id: endpointId,
1853
1852
  Device: {
1854
- Make: getString(payload === null || payload === void 0 ? void 0 : payload.deviceMake),
1855
- Model: getString(payload === null || payload === void 0 ? void 0 : payload.deviceModel),
1853
+ Make: (payload === null || payload === void 0 ? void 0 : payload.deviceMake) || '',
1854
+ Model: (payload === null || payload === void 0 ? void 0 : payload.deviceModel) || '',
1856
1855
  },
1857
1856
  Location: {
1858
- City: getString(payload === null || payload === void 0 ? void 0 : payload.city),
1859
- Country: getString(payload === null || payload === void 0 ? void 0 : payload.country),
1857
+ City: (payload === null || payload === void 0 ? void 0 : payload.city) || '',
1858
+ Country: (payload === null || payload === void 0 ? void 0 : payload.country) || '',
1860
1859
  Lat: getNumber(payload === null || payload === void 0 ? void 0 : payload.lat),
1861
1860
  Lon: getNumber(payload === null || payload === void 0 ? void 0 : payload.lon),
1862
1861
  },
1863
1862
  Application: {
1864
- AppTitle: getString(payload === null || payload === void 0 ? void 0 : payload.appTitle, appName || trackerName),
1865
- AppVersion: getString(payload === null || payload === void 0 ? void 0 : payload.appVersion, appVersion),
1866
- ClientSdkVersion: getString(payload === null || payload === void 0 ? void 0 : payload.clientSdkVersion, trackerName),
1863
+ AppTitle: (_b = (_a = payload === null || payload === void 0 ? void 0 : payload.appTitle) !== null && _a !== void 0 ? _a : appName) !== null && _b !== void 0 ? _b : trackerName,
1864
+ AppVersion: (_c = payload === null || payload === void 0 ? void 0 : payload.appVersion) !== null && _c !== void 0 ? _c : appVersion,
1865
+ ClientSdkVersion: (_d = payload === null || payload === void 0 ? void 0 : payload.clientSdkVersion) !== null && _d !== void 0 ? _d : trackerName,
1867
1866
  },
1868
1867
  },
1869
1868
  Events: [
@@ -1883,36 +1882,81 @@
1883
1882
  },
1884
1883
  };
1885
1884
  }
1886
- function createEsriPlugin({ url, headers = {}, trackerName, appName, appVersion, }) {
1885
+ function createEsriPlugin({ trackerName, appName, appId, appVersion, userPoolID, fips, }) {
1886
+ const url = ESRI_ENDPOINT_URL(appId);
1887
+ let isDisabled = false;
1888
+ let hasWarned = false;
1889
+ const warnOnce = (message, details) => {
1890
+ if (hasWarned) {
1891
+ return;
1892
+ }
1893
+ hasWarned = true;
1894
+ warnLog$1(message, details);
1895
+ };
1887
1896
  debugLog$1('createEsriPlugin initialized', {
1888
1897
  trackerName,
1889
1898
  hasUrl: Boolean(url),
1890
- headerCount: Object.keys(headers).length,
1891
1899
  });
1900
+ if (!url) {
1901
+ isDisabled = true;
1902
+ warnOnce('Esri telemetry disabled due to missing internal endpoint URL', {
1903
+ trackerName,
1904
+ });
1905
+ }
1906
+ if (!userPoolID) {
1907
+ isDisabled = true;
1908
+ warnOnce('Esri telemetry disabled due to missing userPoolID', {
1909
+ trackerName,
1910
+ });
1911
+ }
1912
+ if (typeof fetch !== 'function') {
1913
+ isDisabled = true;
1914
+ warnOnce('Esri telemetry disabled because fetch is unavailable', {
1915
+ trackerName,
1916
+ });
1917
+ }
1892
1918
  return {
1893
1919
  track: (eventName, payload) => {
1894
- if (!url || typeof fetch !== 'function') {
1895
- debugLog$1('Skipping endpoint track call', {
1920
+ if (isDisabled || !url || !userPoolID) {
1921
+ debugLog$1('Skipping esri track call', {
1896
1922
  eventName,
1897
- reason: !url ? 'missing-url' : 'fetch-unavailable',
1923
+ reason: 'plugin-disabled',
1898
1924
  });
1899
1925
  return false;
1900
1926
  }
1901
- debugLog$1('Sending endpoint event', {
1927
+ debugLog$1('Sending esri endpoint event', {
1902
1928
  eventName,
1903
1929
  trackerName,
1904
1930
  url,
1905
1931
  });
1906
- void fetch(url, {
1907
- method: 'POST',
1908
- headers: Object.assign({ 'Content-Type': 'application/json' }, headers),
1909
- body: JSON.stringify(buildBatchEventPayload({
1910
- eventName,
1911
- payload,
1912
- trackerName,
1913
- appName,
1914
- appVersion,
1915
- })),
1932
+ void getCredentials(userPoolID, { fips })
1933
+ .then((credentials) => {
1934
+ const accessKeyId = (credentials === null || credentials === void 0 ? void 0 : credentials.AccessKeyId) || (credentials === null || credentials === void 0 ? void 0 : credentials.accessKeyId);
1935
+ const secretAccessKey = (credentials === null || credentials === void 0 ? void 0 : credentials.SecretKey) || (credentials === null || credentials === void 0 ? void 0 : credentials.secretAccessKey);
1936
+ const sessionToken = (credentials === null || credentials === void 0 ? void 0 : credentials.SessionToken) || (credentials === null || credentials === void 0 ? void 0 : credentials.sessionToken);
1937
+ if (!accessKeyId || !secretAccessKey) {
1938
+ throw new Error('Signed endpoint credentials are missing required key fields.');
1939
+ }
1940
+ const client = new AwsClient({
1941
+ accessKeyId,
1942
+ secretAccessKey,
1943
+ sessionToken,
1944
+ service: ESRI_SIGNING_SERVICE,
1945
+ region: ESRI_SIGNING_REGION,
1946
+ });
1947
+ return client.fetch(url, {
1948
+ method: 'POST',
1949
+ headers: {
1950
+ 'Content-Type': 'application/json',
1951
+ },
1952
+ body: JSON.stringify(buildBatchEventPayload({
1953
+ eventName,
1954
+ payload: payload,
1955
+ trackerName,
1956
+ appName,
1957
+ appVersion,
1958
+ })),
1959
+ });
1916
1960
  })
1917
1961
  .then(() => {
1918
1962
  debugLog$1('Endpoint event sent', {
@@ -1921,7 +1965,8 @@
1921
1965
  });
1922
1966
  })
1923
1967
  .catch((error) => {
1924
- warnLog$1('Endpoint track failed', {
1968
+ isDisabled = true;
1969
+ warnOnce('Esri telemetry disabled after endpoint track failure', {
1925
1970
  eventName,
1926
1971
  trackerName,
1927
1972
  message: (error === null || error === void 0 ? void 0 : error.message) || String(error),
@@ -1941,9 +1986,8 @@
1941
1986
  this.name = 'amazon';
1942
1987
  this.previousPage = {};
1943
1988
  this.isInitialized = false;
1944
- this.mode = 'pinpoint';
1945
- const { app = {}, endpoint = {}, fips, userPoolID, mode = 'pinpoint', } = options;
1946
- const { url = 'https://bh1xqvcevk.execute-api.us-east-1.amazonaws.com/akira/v1/apps/1e9a61d8a1e74aa5a6faa9112fd63d70/events', headers = {}, } = endpoint;
1989
+ // default to `esri` mode if not specified
1990
+ const { app = {}, fips, userPoolID, mode = 'esri' } = options;
1947
1991
  this.mode = mode;
1948
1992
  if (this.mode === 'pinpoint') {
1949
1993
  this.analytics = createPinpointPlugin({
@@ -1956,11 +2000,12 @@
1956
2000
  }
1957
2001
  else {
1958
2002
  this.analytics = createEsriPlugin({
1959
- url,
1960
- headers,
1961
2003
  trackerName: this.name,
1962
2004
  appName: app.name,
1963
2005
  appVersion: app.version,
2006
+ appId: app.id,
2007
+ userPoolID,
2008
+ fips,
1964
2009
  });
1965
2010
  }
1966
2011
  Object.assign(this, options);