@esri/telemetry-amazon 6.0.0-beta.2 → 6.0.0-beta.3
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/README.md +7 -7
- package/dist/esm/index.js +17 -9
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.test.js +26 -13
- package/dist/esm/index.test.js.map +1 -1
- package/dist/node/index.js +18 -9
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.test.js +27 -13
- package/dist/node/index.test.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/types.d.ts +4 -2
- package/dist/umd/telemetry-amazon.js +203 -277
- package/dist/umd/telemetry-amazon.js.map +1 -1
- package/dist/umd/telemetry-amazon.min.js +203 -277
- package/dist/umd/telemetry-amazon.min.js.map +1 -1
- package/package.json +3 -1
- package/dist/esm/plugins/pinpoint.js +0 -163
- package/dist/esm/plugins/pinpoint.js.map +0 -1
- package/dist/node/plugins/pinpoint.js +0 -167
- package/dist/node/plugins/pinpoint.js.map +0 -1
- package/dist/types/plugins/pinpoint.d.ts +0 -11
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ import { Amazon } from '@esri/telemetry-amazon';
|
|
|
35
35
|
|
|
36
36
|
const amazonTracker = new Amazon({
|
|
37
37
|
userPoolID: USER_POOL_ID,
|
|
38
|
-
mode: 'pinpoint', // Pinpoint retires on October 30, 2026. Use 'esri' for continued support.
|
|
38
|
+
mode: 'pinpoint', // Pinpoint retires on October 30, 2026. Use 'esri' or omit this field for continued support.
|
|
39
39
|
fips: true, // defaults to false
|
|
40
40
|
app: {
|
|
41
41
|
name: APP_NAME,
|
|
@@ -63,9 +63,9 @@ After initializing `Telemetry.js` with the Amazon plugin, telemetry data will be
|
|
|
63
63
|
|
|
64
64
|
## Amazon Configuration
|
|
65
65
|
|
|
66
|
-
- Get your app and user pool ID from AWS
|
|
66
|
+
- Get your app and user pool ID from AWS
|
|
67
67
|
- Pass in an options object to create an instance of the Amazon plugin
|
|
68
|
-
- the `fips` option determines if AWS FIPS endpoints are used for cognito
|
|
68
|
+
- the `fips` option determines if AWS FIPS endpoints are used for cognito requests
|
|
69
69
|
- Pass in an object containing the mapping for your custom dimensions and metrics
|
|
70
70
|
|
|
71
71
|
```js
|
|
@@ -173,17 +173,17 @@ const result = await Amazon.setAccessPermissions(setAccessParams: ISetAccessPerm
|
|
|
173
173
|
|
|
174
174
|
Amazon Pinpoint will be retired on **October 30, 2026**. After this date, Pinpoint can no longer be used for telemetry delivery. See the [official AWS retirement announcement](https://docs.aws.amazon.com/pinpoint/latest/userguide/migrate.html) for details.
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
**Note:** The current default is still Pinpoint mode. For continued support, set `mode: 'esri'` in your tracker configuration:
|
|
176
|
+
By default, the Amazon tracker now sends events to Esri's backend instead of Pinpoint while keeping the same tracker identity. No changes to your plugin configuration are necessary. Prior to Pinpoint's retirement you can set `mode: 'pinpoint'` to restore legacy behavior and/or to verify the shape of the events being logged:
|
|
179
177
|
|
|
180
178
|
```js
|
|
181
179
|
const amazonTracker = new Amazon({
|
|
182
|
-
mode: '
|
|
180
|
+
mode: 'pinpoint',
|
|
183
181
|
....
|
|
184
182
|
});
|
|
185
183
|
```
|
|
186
184
|
|
|
185
|
+
NOTE: After **October 30, 2026** the `mode: 'pinpoint'` property will be a no-op, and all traffic will be routed through the Esri backend.
|
|
186
|
+
|
|
187
187
|
## Issues
|
|
188
188
|
|
|
189
189
|
If something isn't working, please take a look at [previously logged issues](https://devtopia.esri.com/WebGIS/arcgis-telemetry.js/issues) first. Have you found a new bug? Create an issue [here](https://devtopia.esri.com/WebGIS/arcgis-telemetry.js/issues/new).
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createEventLog } from './create-event-log';
|
|
2
2
|
import { createPageViewLog } from './create-page-view-log';
|
|
3
|
+
import Analytics from 'analytics';
|
|
4
|
+
import awsPinpointPlugin from '@analytics/aws-pinpoint';
|
|
5
|
+
import { getCredentials } from './auth';
|
|
3
6
|
import { setPortalItemAccessPermissions } from './set-portal-item-access-permissions';
|
|
4
7
|
import { getPortalItemAccessPermissions } from './get-portal-item-access-permissions';
|
|
5
|
-
import { createPinpointPlugin } from './plugins/pinpoint';
|
|
6
8
|
import { createEsriPlugin } from './plugins/esri';
|
|
7
9
|
/**
|
|
8
10
|
* Amazon Telemetry
|
|
@@ -17,12 +19,16 @@ export class Amazon {
|
|
|
17
19
|
const { app = {}, fips, userPoolID, mode = 'esri' } = options;
|
|
18
20
|
this.mode = mode;
|
|
19
21
|
if (this.mode === 'pinpoint') {
|
|
20
|
-
this.analytics =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
this.analytics = Analytics({
|
|
23
|
+
app: app.name,
|
|
24
|
+
version: app.version,
|
|
25
|
+
plugins: [
|
|
26
|
+
awsPinpointPlugin({
|
|
27
|
+
fips,
|
|
28
|
+
pinpointAppId: app.id,
|
|
29
|
+
getCredentials: () => getCredentials(userPoolID, { fips }),
|
|
30
|
+
}),
|
|
31
|
+
],
|
|
26
32
|
});
|
|
27
33
|
}
|
|
28
34
|
else {
|
|
@@ -66,7 +72,8 @@ export class Amazon {
|
|
|
66
72
|
});
|
|
67
73
|
const { pageUrl, pageName } = telemetryPayload;
|
|
68
74
|
this.previousPage = { pageUrl, pageName };
|
|
69
|
-
|
|
75
|
+
const result = this.analytics.track('pageView', telemetryPayload);
|
|
76
|
+
return typeof result === 'boolean' ? result : true;
|
|
70
77
|
}
|
|
71
78
|
logEvent(event = {}) {
|
|
72
79
|
const telemetryPayload = createEventLog({
|
|
@@ -75,7 +82,8 @@ export class Amazon {
|
|
|
75
82
|
metricLookup: this.metrics,
|
|
76
83
|
});
|
|
77
84
|
const { name } = telemetryPayload;
|
|
78
|
-
|
|
85
|
+
const result = this.analytics.track(name, telemetryPayload);
|
|
86
|
+
return typeof result === 'boolean' ? result : true;
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
89
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.test.js
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { Amazon } from '.';
|
|
2
|
-
import
|
|
2
|
+
import Analytics from 'analytics';
|
|
3
|
+
import awsPinpointPlugin from '@analytics/aws-pinpoint';
|
|
3
4
|
import { createEsriPlugin } from './plugins/esri';
|
|
4
|
-
jest.mock('
|
|
5
|
-
|
|
5
|
+
jest.mock('analytics', () => ({
|
|
6
|
+
__esModule: true,
|
|
7
|
+
default: jest.fn(() => ({ track: jest.fn(() => true) })),
|
|
8
|
+
}));
|
|
9
|
+
jest.mock('@analytics/aws-pinpoint', () => ({
|
|
10
|
+
__esModule: true,
|
|
11
|
+
default: jest.fn(() => ({
|
|
12
|
+
name: 'aws-pinpoint',
|
|
13
|
+
})),
|
|
6
14
|
}));
|
|
7
15
|
jest.mock('./plugins/esri', () => ({
|
|
8
16
|
createEsriPlugin: jest.fn(() => ({ track: jest.fn(() => true) })),
|
|
9
17
|
}));
|
|
10
|
-
const
|
|
18
|
+
const AnalyticsMock = Analytics;
|
|
19
|
+
const awsPinpointPluginMock = awsPinpointPlugin;
|
|
11
20
|
const createEsriPluginMock = createEsriPlugin;
|
|
12
21
|
describe('Amazon', () => {
|
|
13
22
|
afterEach(() => {
|
|
@@ -29,9 +38,9 @@ describe('Amazon', () => {
|
|
|
29
38
|
mode: 'pinpoint',
|
|
30
39
|
}));
|
|
31
40
|
});
|
|
32
|
-
test('pinpoint mode initializes pinpoint plugin
|
|
33
|
-
const
|
|
34
|
-
|
|
41
|
+
test('pinpoint mode initializes upstream analytics pinpoint plugin', () => {
|
|
42
|
+
const analyticsInstance = { track: jest.fn(() => true) };
|
|
43
|
+
AnalyticsMock.mockReturnValue(analyticsInstance);
|
|
35
44
|
new Amazon({
|
|
36
45
|
userPoolID: 'pool-id',
|
|
37
46
|
app: {
|
|
@@ -42,12 +51,15 @@ describe('Amazon', () => {
|
|
|
42
51
|
mode: 'pinpoint',
|
|
43
52
|
fips: true,
|
|
44
53
|
});
|
|
45
|
-
expect(
|
|
46
|
-
appName: 'test',
|
|
47
|
-
appVersion: '1.0.0',
|
|
48
|
-
appId: '1234',
|
|
49
|
-
userPoolID: 'pool-id',
|
|
54
|
+
expect(awsPinpointPluginMock).toHaveBeenCalledWith({
|
|
50
55
|
fips: true,
|
|
56
|
+
pinpointAppId: '1234',
|
|
57
|
+
getCredentials: expect.any(Function),
|
|
58
|
+
});
|
|
59
|
+
expect(AnalyticsMock).toHaveBeenCalledWith({
|
|
60
|
+
app: 'test',
|
|
61
|
+
version: '1.0.0',
|
|
62
|
+
plugins: [expect.any(Object)],
|
|
51
63
|
});
|
|
52
64
|
expect(createEsriPluginMock).not.toHaveBeenCalled();
|
|
53
65
|
});
|
|
@@ -70,7 +82,7 @@ describe('Amazon', () => {
|
|
|
70
82
|
userPoolID: 'pool-id',
|
|
71
83
|
fips: undefined,
|
|
72
84
|
});
|
|
73
|
-
expect(
|
|
85
|
+
expect(AnalyticsMock).not.toHaveBeenCalled();
|
|
74
86
|
});
|
|
75
87
|
test('esri mode does not throw when userPoolID is missing at runtime', () => {
|
|
76
88
|
new Amazon({
|
|
@@ -88,6 +100,7 @@ describe('Amazon', () => {
|
|
|
88
100
|
userPoolID: undefined,
|
|
89
101
|
fips: undefined,
|
|
90
102
|
});
|
|
103
|
+
expect(AnalyticsMock).not.toHaveBeenCalled();
|
|
91
104
|
});
|
|
92
105
|
});
|
|
93
106
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Amazon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const create_event_log_1 = require("./create-event-log");
|
|
5
6
|
const create_page_view_log_1 = require("./create-page-view-log");
|
|
7
|
+
const analytics_1 = tslib_1.__importDefault(require("analytics"));
|
|
8
|
+
const aws_pinpoint_1 = tslib_1.__importDefault(require("@analytics/aws-pinpoint"));
|
|
9
|
+
const auth_1 = require("./auth");
|
|
6
10
|
const set_portal_item_access_permissions_1 = require("./set-portal-item-access-permissions");
|
|
7
11
|
const get_portal_item_access_permissions_1 = require("./get-portal-item-access-permissions");
|
|
8
|
-
const pinpoint_1 = require("./plugins/pinpoint");
|
|
9
12
|
const esri_1 = require("./plugins/esri");
|
|
10
13
|
/**
|
|
11
14
|
* Amazon Telemetry
|
|
@@ -20,12 +23,16 @@ class Amazon {
|
|
|
20
23
|
const { app = {}, fips, userPoolID, mode = 'esri' } = options;
|
|
21
24
|
this.mode = mode;
|
|
22
25
|
if (this.mode === 'pinpoint') {
|
|
23
|
-
this.analytics = (0,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
this.analytics = (0, analytics_1.default)({
|
|
27
|
+
app: app.name,
|
|
28
|
+
version: app.version,
|
|
29
|
+
plugins: [
|
|
30
|
+
(0, aws_pinpoint_1.default)({
|
|
31
|
+
fips,
|
|
32
|
+
pinpointAppId: app.id,
|
|
33
|
+
getCredentials: () => (0, auth_1.getCredentials)(userPoolID, { fips }),
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
29
36
|
});
|
|
30
37
|
}
|
|
31
38
|
else {
|
|
@@ -69,7 +76,8 @@ class Amazon {
|
|
|
69
76
|
});
|
|
70
77
|
const { pageUrl, pageName } = telemetryPayload;
|
|
71
78
|
this.previousPage = { pageUrl, pageName };
|
|
72
|
-
|
|
79
|
+
const result = this.analytics.track('pageView', telemetryPayload);
|
|
80
|
+
return typeof result === 'boolean' ? result : true;
|
|
73
81
|
}
|
|
74
82
|
logEvent(event = {}) {
|
|
75
83
|
const telemetryPayload = (0, create_event_log_1.createEventLog)({
|
|
@@ -78,7 +86,8 @@ class Amazon {
|
|
|
78
86
|
metricLookup: this.metrics,
|
|
79
87
|
});
|
|
80
88
|
const { name } = telemetryPayload;
|
|
81
|
-
|
|
89
|
+
const result = this.analytics.track(name, telemetryPayload);
|
|
90
|
+
return typeof result === 'boolean' ? result : true;
|
|
82
91
|
}
|
|
83
92
|
}
|
|
84
93
|
exports.Amazon = Amazon;
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.test.js
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
3
4
|
const _1 = require(".");
|
|
4
|
-
const
|
|
5
|
+
const analytics_1 = tslib_1.__importDefault(require("analytics"));
|
|
6
|
+
const aws_pinpoint_1 = tslib_1.__importDefault(require("@analytics/aws-pinpoint"));
|
|
5
7
|
const esri_1 = require("./plugins/esri");
|
|
6
|
-
jest.mock('
|
|
7
|
-
|
|
8
|
+
jest.mock('analytics', () => ({
|
|
9
|
+
__esModule: true,
|
|
10
|
+
default: jest.fn(() => ({ track: jest.fn(() => true) })),
|
|
11
|
+
}));
|
|
12
|
+
jest.mock('@analytics/aws-pinpoint', () => ({
|
|
13
|
+
__esModule: true,
|
|
14
|
+
default: jest.fn(() => ({
|
|
15
|
+
name: 'aws-pinpoint',
|
|
16
|
+
})),
|
|
8
17
|
}));
|
|
9
18
|
jest.mock('./plugins/esri', () => ({
|
|
10
19
|
createEsriPlugin: jest.fn(() => ({ track: jest.fn(() => true) })),
|
|
11
20
|
}));
|
|
12
|
-
const
|
|
21
|
+
const AnalyticsMock = analytics_1.default;
|
|
22
|
+
const awsPinpointPluginMock = aws_pinpoint_1.default;
|
|
13
23
|
const createEsriPluginMock = esri_1.createEsriPlugin;
|
|
14
24
|
describe('Amazon', () => {
|
|
15
25
|
afterEach(() => {
|
|
@@ -31,9 +41,9 @@ describe('Amazon', () => {
|
|
|
31
41
|
mode: 'pinpoint',
|
|
32
42
|
}));
|
|
33
43
|
});
|
|
34
|
-
test('pinpoint mode initializes pinpoint plugin
|
|
35
|
-
const
|
|
36
|
-
|
|
44
|
+
test('pinpoint mode initializes upstream analytics pinpoint plugin', () => {
|
|
45
|
+
const analyticsInstance = { track: jest.fn(() => true) };
|
|
46
|
+
AnalyticsMock.mockReturnValue(analyticsInstance);
|
|
37
47
|
new _1.Amazon({
|
|
38
48
|
userPoolID: 'pool-id',
|
|
39
49
|
app: {
|
|
@@ -44,12 +54,15 @@ describe('Amazon', () => {
|
|
|
44
54
|
mode: 'pinpoint',
|
|
45
55
|
fips: true,
|
|
46
56
|
});
|
|
47
|
-
expect(
|
|
48
|
-
appName: 'test',
|
|
49
|
-
appVersion: '1.0.0',
|
|
50
|
-
appId: '1234',
|
|
51
|
-
userPoolID: 'pool-id',
|
|
57
|
+
expect(awsPinpointPluginMock).toHaveBeenCalledWith({
|
|
52
58
|
fips: true,
|
|
59
|
+
pinpointAppId: '1234',
|
|
60
|
+
getCredentials: expect.any(Function),
|
|
61
|
+
});
|
|
62
|
+
expect(AnalyticsMock).toHaveBeenCalledWith({
|
|
63
|
+
app: 'test',
|
|
64
|
+
version: '1.0.0',
|
|
65
|
+
plugins: [expect.any(Object)],
|
|
53
66
|
});
|
|
54
67
|
expect(createEsriPluginMock).not.toHaveBeenCalled();
|
|
55
68
|
});
|
|
@@ -72,7 +85,7 @@ describe('Amazon', () => {
|
|
|
72
85
|
userPoolID: 'pool-id',
|
|
73
86
|
fips: undefined,
|
|
74
87
|
});
|
|
75
|
-
expect(
|
|
88
|
+
expect(AnalyticsMock).not.toHaveBeenCalled();
|
|
76
89
|
});
|
|
77
90
|
test('esri mode does not throw when userPoolID is missing at runtime', () => {
|
|
78
91
|
new _1.Amazon({
|
|
@@ -90,6 +103,7 @@ describe('Amazon', () => {
|
|
|
90
103
|
userPoolID: undefined,
|
|
91
104
|
fips: undefined,
|
|
92
105
|
});
|
|
106
|
+
expect(AnalyticsMock).not.toHaveBeenCalled();
|
|
93
107
|
});
|
|
94
108
|
});
|
|
95
109
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AmazonAnalytics, AmazonTelemetryOptions, AmazonTelemetryEndpointMode, Dimensions, Metrics, IAmazon, PageViewOptions, EventOptions, 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:
|
|
7
|
+
analytics: AmazonAnalytics;
|
|
8
8
|
name: string;
|
|
9
9
|
previousPage: {
|
|
10
10
|
pageUrl?: string;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ArcGISIdentityManager } from '@esri/arcgis-rest-request';
|
|
2
|
+
import type { AnalyticsInstance } from 'analytics';
|
|
2
3
|
export declare type GenericObject = {
|
|
3
4
|
[key: string]: any;
|
|
4
5
|
};
|
|
@@ -17,10 +18,11 @@ export interface IAccessChangeset {
|
|
|
17
18
|
ids?: string[];
|
|
18
19
|
}
|
|
19
20
|
export interface AmazonTracker {
|
|
20
|
-
track(eventName: string, payload: Record<string, any>): boolean
|
|
21
|
+
track(eventName: string, payload: Record<string, any>): boolean | void | Promise<any>;
|
|
21
22
|
}
|
|
23
|
+
export declare type AmazonAnalytics = AmazonTracker | AnalyticsInstance;
|
|
22
24
|
export interface IAmazon<D, M> {
|
|
23
|
-
analytics:
|
|
25
|
+
analytics: AmazonAnalytics;
|
|
24
26
|
name: string;
|
|
25
27
|
previousPage: {
|
|
26
28
|
pageUrl?: string;
|