@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.
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.test.js +21 -7
- package/dist/esm/index.test.js.map +1 -1
- package/dist/esm/plugins/esri.js +77 -30
- package/dist/esm/plugins/esri.js.map +1 -1
- package/dist/esm/plugins/esri.test.js +80 -13
- package/dist/esm/plugins/esri.test.js.map +1 -1
- package/dist/node/index.js +5 -5
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.test.js +21 -7
- package/dist/node/index.test.js.map +1 -1
- package/dist/node/plugins/esri.js +77 -30
- package/dist/node/plugins/esri.js.map +1 -1
- package/dist/node/plugins/esri.test.js +80 -13
- package/dist/node/plugins/esri.test.js.map +1 -1
- package/dist/types/plugins/esri.d.ts +4 -3
- package/dist/types/types.d.ts +9 -7
- package/dist/umd/telemetry-amazon.js +80 -35
- package/dist/umd/telemetry-amazon.js.map +1 -1
- package/dist/umd/telemetry-amazon.min.js +80 -35
- package/dist/umd/telemetry-amazon.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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:
|
|
62
|
-
Model:
|
|
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:
|
|
66
|
-
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:
|
|
72
|
-
AppVersion:
|
|
73
|
-
ClientSdkVersion:
|
|
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({
|
|
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 ||
|
|
102
|
-
(0, shared_1.debugLog)('Skipping
|
|
129
|
+
if (isDisabled || !url || !userPoolID) {
|
|
130
|
+
(0, shared_1.debugLog)('Skipping esri track call', {
|
|
103
131
|
eventName,
|
|
104
|
-
reason:
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
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":";;;
|
|
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
|
|
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
|
|
14
|
-
|
|
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
|
-
|
|
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(
|
|
43
|
-
|
|
44
|
-
|
|
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":";;AAAA,iCAA0C;
|
|
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({
|
|
10
|
+
export declare function createEsriPlugin({ trackerName, appName, appId, appVersion, userPoolID, fips, }: EsriPluginOptions): AmazonTracker;
|
|
10
11
|
export {};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -49,18 +49,20 @@ export declare type AmazonApp = {
|
|
|
49
49
|
id?: string;
|
|
50
50
|
version?: string;
|
|
51
51
|
};
|
|
52
|
-
export declare type
|
|
52
|
+
export declare type AmazonTelemetryPinpointOptions = {
|
|
53
53
|
userPoolID: string;
|
|
54
54
|
app?: AmazonApp;
|
|
55
55
|
fips?: boolean;
|
|
56
|
-
mode?:
|
|
57
|
-
endpoint?: AmazonTelemetryEndpointOptions;
|
|
56
|
+
mode?: 'pinpoint';
|
|
58
57
|
};
|
|
59
|
-
export declare type
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
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:
|
|
1855
|
-
Model:
|
|
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:
|
|
1859
|
-
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:
|
|
1865
|
-
AppVersion:
|
|
1866
|
-
ClientSdkVersion:
|
|
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({
|
|
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 ||
|
|
1895
|
-
debugLog$1('Skipping
|
|
1920
|
+
if (isDisabled || !url || !userPoolID) {
|
|
1921
|
+
debugLog$1('Skipping esri track call', {
|
|
1896
1922
|
eventName,
|
|
1897
|
-
reason:
|
|
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
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1945
|
-
const { app = {},
|
|
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);
|