@esri/telemetry-amazon 1.0.0-beta.2 → 1.0.0

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 (109) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +119 -28
  3. package/dist/esm/auth.js +47 -0
  4. package/dist/esm/auth.js.map +1 -0
  5. package/dist/esm/auth.test.js +100 -0
  6. package/dist/esm/auth.test.js.map +1 -0
  7. package/dist/esm/build-access-properties.js +16 -0
  8. package/dist/esm/build-access-properties.js.map +1 -0
  9. package/dist/esm/build-access-properties.test.js +40 -0
  10. package/dist/esm/build-access-properties.test.js.map +1 -0
  11. package/dist/esm/create-event-log.js +31 -0
  12. package/dist/esm/create-event-log.js.map +1 -0
  13. package/dist/esm/create-event-log.test.js +273 -0
  14. package/dist/esm/create-event-log.test.js.map +1 -0
  15. package/dist/esm/create-page-view-log.js +19 -0
  16. package/dist/esm/create-page-view-log.js.map +1 -0
  17. package/dist/esm/create-page-view-log.test.js +69 -0
  18. package/dist/esm/create-page-view-log.test.js.map +1 -0
  19. package/dist/esm/format-telemetry-attributes.js +32 -0
  20. package/dist/esm/format-telemetry-attributes.js.map +1 -0
  21. package/dist/esm/format-telemetry-metrics.js +27 -0
  22. package/dist/esm/format-telemetry-metrics.js.map +1 -0
  23. package/dist/esm/format-telemetry-metrics.test.js +22 -0
  24. package/dist/esm/format-telemetry-metrics.test.js.map +1 -0
  25. package/dist/esm/get-portal-item-access-permissions.js +8 -0
  26. package/dist/esm/get-portal-item-access-permissions.js.map +1 -0
  27. package/dist/esm/get-portal-item-access-permissions.test.js +55 -0
  28. package/dist/esm/get-portal-item-access-permissions.test.js.map +1 -0
  29. package/dist/esm/index.js +63 -0
  30. package/dist/esm/index.js.map +1 -0
  31. package/dist/esm/index.test.js +196 -0
  32. package/dist/esm/index.test.js.map +1 -0
  33. package/dist/esm/set-portal-item-access-permissions.js +20 -0
  34. package/dist/esm/set-portal-item-access-permissions.js.map +1 -0
  35. package/dist/esm/set-portal-item-access-permissions.test.js +177 -0
  36. package/dist/esm/set-portal-item-access-permissions.test.js.map +1 -0
  37. package/dist/esm/types.js +2 -0
  38. package/dist/esm/types.js.map +1 -0
  39. package/dist/node/auth.js +51 -0
  40. package/dist/node/auth.js.map +1 -0
  41. package/dist/node/auth.test.js +103 -0
  42. package/dist/node/auth.test.js.map +1 -0
  43. package/dist/node/build-access-properties.js +20 -0
  44. package/dist/node/build-access-properties.js.map +1 -0
  45. package/dist/node/build-access-properties.test.js +42 -0
  46. package/dist/node/build-access-properties.test.js.map +1 -0
  47. package/dist/node/create-event-log.js +35 -0
  48. package/dist/node/create-event-log.js.map +1 -0
  49. package/dist/node/create-event-log.test.js +275 -0
  50. package/dist/node/create-event-log.test.js.map +1 -0
  51. package/dist/node/create-page-view-log.js +23 -0
  52. package/dist/node/create-page-view-log.js.map +1 -0
  53. package/dist/node/create-page-view-log.test.js +71 -0
  54. package/dist/node/create-page-view-log.test.js.map +1 -0
  55. package/dist/node/format-telemetry-attributes.js +36 -0
  56. package/dist/node/format-telemetry-attributes.js.map +1 -0
  57. package/dist/node/format-telemetry-metrics.js +31 -0
  58. package/dist/node/format-telemetry-metrics.js.map +1 -0
  59. package/dist/node/format-telemetry-metrics.test.js +24 -0
  60. package/dist/node/format-telemetry-metrics.test.js.map +1 -0
  61. package/dist/node/get-portal-item-access-permissions.js +12 -0
  62. package/dist/node/get-portal-item-access-permissions.js.map +1 -0
  63. package/dist/node/get-portal-item-access-permissions.test.js +58 -0
  64. package/dist/node/get-portal-item-access-permissions.test.js.map +1 -0
  65. package/dist/node/index.js +68 -0
  66. package/dist/node/index.js.map +1 -0
  67. package/dist/node/index.test.js +199 -0
  68. package/dist/node/index.test.js.map +1 -0
  69. package/dist/node/set-portal-item-access-permissions.js +24 -0
  70. package/dist/node/set-portal-item-access-permissions.js.map +1 -0
  71. package/dist/node/set-portal-item-access-permissions.test.js +180 -0
  72. package/dist/node/set-portal-item-access-permissions.test.js.map +1 -0
  73. package/dist/node/types.js +3 -0
  74. package/dist/node/types.js.map +1 -0
  75. package/dist/types/auth.d.ts +2 -0
  76. package/dist/types/auth.test.d.ts +1 -0
  77. package/dist/types/build-access-properties.d.ts +2 -0
  78. package/dist/types/build-access-properties.test.d.ts +1 -0
  79. package/dist/types/create-event-log.d.ts +6 -0
  80. package/dist/types/create-event-log.test.d.ts +1 -0
  81. package/dist/types/create-page-view-log.d.ts +8 -0
  82. package/dist/types/create-page-view-log.test.d.ts +1 -0
  83. package/dist/types/format-telemetry-attributes.d.ts +5 -0
  84. package/dist/types/format-telemetry-metrics.d.ts +2 -0
  85. package/dist/types/format-telemetry-metrics.test.d.ts +1 -0
  86. package/dist/types/get-portal-item-access-permissions.d.ts +2 -0
  87. package/dist/types/get-portal-item-access-permissions.test.d.ts +1 -0
  88. package/dist/types/index.d.ts +16 -0
  89. package/dist/types/index.test.d.ts +1 -0
  90. package/dist/types/set-portal-item-access-permissions.d.ts +3 -0
  91. package/dist/types/set-portal-item-access-permissions.test.d.ts +1 -0
  92. package/dist/types/types.d.ts +77 -0
  93. package/dist/umd/telemetry-amazon.js +6844 -0
  94. package/dist/umd/telemetry-amazon.js.map +1 -0
  95. package/dist/umd/telemetry-amazon.min.js +6844 -0
  96. package/dist/umd/telemetry-amazon.min.js.map +1 -0
  97. package/package.json +23 -6
  98. package/dist/telemetry-amazon.js.amd.js +0 -363
  99. package/dist/telemetry-amazon.js.amd.js.map +0 -1
  100. package/dist/telemetry-amazon.js.amd.min.js +0 -2
  101. package/dist/telemetry-amazon.js.amd.min.js.map +0 -1
  102. package/dist/telemetry-amazon.js.dojo.js +0 -363
  103. package/dist/telemetry-amazon.js.dojo.js.map +0 -1
  104. package/dist/telemetry-amazon.js.dojo.min.js +0 -2
  105. package/dist/telemetry-amazon.js.dojo.min.js.map +0 -1
  106. package/dist/telemetry-amazon.js.js +0 -367
  107. package/dist/telemetry-amazon.js.js.map +0 -1
  108. package/dist/telemetry-amazon.js.min.js +0 -2
  109. package/dist/telemetry-amazon.js.min.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2017 Environmental Systems Research Institute, Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md CHANGED
@@ -1,8 +1,21 @@
1
- # `ArcGIS Telemetry Amazon`
1
+ # `@esri/telemetry-amazon`
2
2
 
3
- This library exports the `telemetry-amazon` plugin for the `Telemetry.js` package to interact with AWS Analytics store. This package uses the [analytics](https://github.com/DavidWells/analytics) and [@analytics/aws-pinpoint](https://github.com/DavidWells/analytics/tree/master/packages/analytics-plugin-aws-pinpoint) packages.
3
+ > This is a plugin for the `Telemetry.js` package to interact with an AWS Analytics store. This package uses the third-party libraries, [analytics](https://github.com/DavidWells/analytics) and [@analytics/aws-pinpoint](https://github.com/DavidWells/analytics/tree/master/packages/analytics-plugin-aws-pinpoint) packages.
4
4
 
5
- ## Installation
5
+ ## Table of Contents
6
+
7
+ - [`@esri/telemetry-amazon`](#esritelemetry-amazon)
8
+ - [Table of Contents](#table-of-contents)
9
+ - [How to Use](#how-to-use)
10
+ - [Amazon Configuration](#amazon-configuration)
11
+ - [Example](#example)
12
+ - [`telemetry.logEvent(event)`](#telemetrylogeventevent)
13
+ - [Telemetry Sharing Permissions](#telemetry-sharing-permissions)
14
+ - [Portal Items](#portal-items)
15
+ - [Usage](#usage)
16
+ - [Issues](#issues)
17
+ - [Contributing](#contributing)
18
+ - [License](#license)
6
19
 
7
20
  ```sh
8
21
  npm install @esri/telemetry
@@ -11,13 +24,13 @@ npm install @esri/telemetry-amazon
11
24
 
12
25
  ## How to Use
13
26
 
14
- `@esri/telemetry-amazon` packages works in the client-side browser and (WIP server-side Node.js). To use, install the package, include it in your project, and create an instance of the plugin, and pass it as an `plugin` with [@esri/telemetry](../../README.md)
27
+ `@esri/telemetry-amazon` packages works in the client-side browser and server-side Node.js. To use, install the package, include it in your project, create an instance of the plugin, and add it to the `plugins` array with [@esri/telemetry](../../README.md)
15
28
 
16
29
  Below is an example of how to use the telemetry-amazon plugin.
17
30
 
18
31
  ```js
19
- import Telemetry from '@esri/telemetry'
20
- import Amazon from '@esri/telemetry-amazon'
32
+ import { Telemetry } from '@esri/telemetry';
33
+ import { Amazon } from '@esri/telemetry-amazon';
21
34
 
22
35
  const amazonTracker = new Amazon({
23
36
  userPoolID: USER_POOL_ID,
@@ -27,7 +40,7 @@ const amazonTracker = new Amazon({
27
40
  id: APP_ID,
28
41
  version: APP_VERSION,
29
42
  },
30
- })
43
+ });
31
44
 
32
45
  const telemetryOptions = {
33
46
  plugins: [amazonTracker],
@@ -35,45 +48,63 @@ const telemetryOptions = {
35
48
  subscriptionInfo: {},
36
49
  user: {},
37
50
  },
38
- }
51
+ };
52
+
53
+ const telemetry = new Telemetry(telemetryOptions);
39
54
 
40
- const telemetry = new Telemetry(telemetryOptions)
55
+ telemetry.logPageView();
41
56
 
42
- telemetry.logPageView()
43
- telemetry.logEvent()
57
+ telemetry.logEvent();
44
58
  ```
45
59
 
46
- After initializing `Telemetry.js`with the `telemetry-amazon`plugin, telemetry data will be sent to the AWS Pinpoint instance of the provided App.
60
+ After initializing `Telemetry.js` with the `telemetry-amazon` plugin, telemetry data will be sent to the AWS Pinpoint instance of the provided App.
47
61
 
48
- ### Amazon Analytics Configuration
62
+ ## Amazon Configuration
49
63
 
50
64
  - Get your app and user pool ID from AWS Pinpoint instance
51
- - Pass in options for `amazon` when initiating the Telemetry object
65
+ - Pass in options object to create an instance of the plugin
52
66
  - the `fips` option determines if AWS FIPS endpoints are used for cognito and pinpoint requests
67
+ - Pass in an object containing the mapping for your custom dimensions and metrics
68
+
69
+ ```js
70
+ // or if you are using optional custom dimensions and/or custom metrics
71
+ const googleTracker = new Amazon({
72
+ dimensions: {
73
+ datasetID: 1,
74
+ attribute: 2,
75
+ serviceQuery: 3,
76
+ },
77
+ metrics: {
78
+ duration: 1,
79
+ size: 2,
80
+ },
81
+ });
82
+ ```
53
83
 
54
84
  If you need to disable tracking you can set `disabled: true` when initializing the `Telemetry` object. Then you can continue to call the methods on your instance of `Telemetry` without throwing exceptions or logging errors.
55
85
 
56
86
  Additionally, you can disable individual trackers when initializing the `Telemetry` object by passing `disabled: true` in the tracker options.
57
87
 
58
88
  ```js
59
- {
60
- amazonOptions: {
61
- disabled: true,
62
- ...
63
- }
64
- }
65
-
89
+ const amazonTracker = new Amazon({
90
+ disabled: true,
91
+ });
66
92
  ```
67
93
 
68
94
  Post initialization, it is possible to disable & enable specific trackers using `disableTracker` and `enableTracker` methods.
69
95
 
70
96
  ```js
71
- telemetry.disableTracker('amazon')
72
- telemetry.logPageView() // no amazon page view logged
73
- telemetry.logEvent() // no amazon event logged
74
- telemetry.enableTracker('amazon')
75
- telemetry.logPageView() // amazon page view logged
76
- telemetry.logEvent() // amazon event logged
97
+ telemetry.disableTracker('amazon');
98
+
99
+ telemetry.logPageView(); // no amazon page view logged
100
+
101
+ telemetry.logEvent(); // no amazon event logged
102
+
103
+ telemetry.enableTracker('amazon');
104
+
105
+ telemetry.logPageView(); // amazon page view logged
106
+
107
+ telemetry.logEvent(); // amazon event logged
77
108
  ```
78
109
 
79
110
  ## Example
@@ -94,7 +125,67 @@ const event = {
94
125
  datasetID: '1ef',
95
126
  attribute: 'crime_type',
96
127
  user: 'amazing_map_woman',
128
+ };
129
+
130
+ telemetry.logEvent(event);
131
+ ```
132
+
133
+ ## Telemetry Sharing Permissions
134
+
135
+ ### Portal Items
136
+
137
+ `telemetry-amazon` contains static methods for setting and getting telemetry access for portal items.
138
+
139
+ ### Usage
140
+
141
+ ```js
142
+ import { Amazon } from '@esri/telemetry-amazon'
143
+ ...
144
+
145
+ const getAccessParams = {
146
+ id: '1ef',
147
+ authentication: PortalUserSession,
148
+ }
149
+
150
+ const access = await Amazon.getAccessPermissions(getAccessParams: IGetAccessPermissionsParams)
151
+
152
+ const setAccessParams = {
153
+ id: '1ef',
154
+ authentication: PortalUserSession,
155
+ username: 'dev_pre_a_hub_admin',
156
+ accessChangeset: [
157
+ {
158
+ action: 'add',
159
+ targetProperty: 'public',
160
+ }
161
+ ]
97
162
  }
98
163
 
99
- telemetry.logEvent(event)
164
+ const result = await Amazon.setAccessPermissions(setAccessParams: ISetAccessPermissionsParams)
100
165
  ```
166
+
167
+ ## Issues
168
+
169
+ 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).
170
+
171
+ ## Contributing
172
+
173
+ Esri welcomes contributions from anyone and everyone. Please see our [guidelines for contributing](../../CONTRIBUTING.md).
174
+
175
+ ## License
176
+
177
+ Copyright © 2022 Esri
178
+
179
+ Licensed under the Apache License, Version 2.0 (the "License");
180
+ you may not use this file except in compliance with the License.
181
+ You may obtain a copy of the License at
182
+
183
+ > http://www.apache.org/licenses/LICENSE-2.0
184
+
185
+ Unless required by applicable law or agreed to in writing, software
186
+ distributed under the License is distributed on an "AS IS" BASIS,
187
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
188
+ See the License for the specific language governing permissions and
189
+ limitations under the License.
190
+
191
+ A copy of the license is available in the repository's [LICENSE](../../LICENSE) file.
@@ -0,0 +1,47 @@
1
+ import { storage } from '@esri/telemetry';
2
+ const COGNITO_KEY = 'TELEMETRY_COGNITO_CREDENTIALS';
3
+ export function getCredentials(IdentityPoolId, options = {}) {
4
+ const fipsSubdomainSuffix = options.fips === true ? '-fips' : '';
5
+ const COGNITO_URL = `https://cognito-identity${fipsSubdomainSuffix}.us-east-1.amazonaws.com/`;
6
+ let cached = storage.get(COGNITO_KEY);
7
+ if (cached && Date.now() / 1000 < cached.Expiration)
8
+ return Promise.resolve(cached);
9
+ const fetchOptions = {
10
+ method: 'POST',
11
+ headers: {
12
+ 'Content-type': 'application/x-amz-json-1.1',
13
+ 'X-Amz-Target': 'AWSCognitoIdentityService.GetId',
14
+ },
15
+ body: JSON.stringify({ IdentityPoolId }),
16
+ };
17
+ return fetch(COGNITO_URL, fetchOptions)
18
+ .then((response) => {
19
+ if (!response.ok) {
20
+ throw new Error(response.statusText);
21
+ }
22
+ return response.json();
23
+ })
24
+ .then((response) => {
25
+ const { IdentityId } = response;
26
+ const options = {
27
+ method: 'POST',
28
+ headers: {
29
+ 'Content-type': 'application/x-amz-json-1.1',
30
+ 'X-Amz-Target': 'AWSCognitoIdentityService.GetCredentialsForIdentity',
31
+ },
32
+ body: JSON.stringify({ IdentityId }),
33
+ };
34
+ return fetch(COGNITO_URL, options);
35
+ })
36
+ .then((response) => {
37
+ if (!response.ok) {
38
+ throw new Error(response.statusText);
39
+ }
40
+ return response.json();
41
+ })
42
+ .then(({ Credentials }) => {
43
+ storage.set(COGNITO_KEY, Credentials);
44
+ return Credentials;
45
+ });
46
+ }
47
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAEpD,MAAM,UAAU,cAAc,CAC5B,cAAsB,EACtB,UAA2C,EAAE;IAE7C,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,WAAW,GAAG,2BAA2B,mBAAmB,2BAA2B,CAAC;IAC9F,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU;QACjD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,4BAA4B;YAC5C,cAAc,EAAE,iCAAiC;SAClD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;KACzC,CAAC;IAEF,OAAO,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC;SACpC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACtC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;QAChC,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,4BAA4B;gBAC5C,cAAc,EAAE,qDAAqD;aACtE;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;SACrC,CAAC;QACF,OAAO,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACtC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,100 @@
1
+ import 'cross-fetch/polyfill';
2
+ import { getCredentials } from './auth';
3
+ import fetchMock from 'fetch-mock';
4
+ const expectedIdFetchOptions = {
5
+ method: 'POST',
6
+ headers: {
7
+ 'Content-type': 'application/x-amz-json-1.1',
8
+ 'X-Amz-Target': 'AWSCognitoIdentityService.GetId',
9
+ },
10
+ body: '{"IdentityPoolId":"us-east-1:hello-world"}',
11
+ };
12
+ const expectedCredsFetchOptions = {
13
+ method: 'POST',
14
+ headers: {
15
+ 'Content-type': 'application/x-amz-json-1.1',
16
+ 'X-Amz-Target': 'AWSCognitoIdentityService.GetCredentialsForIdentity',
17
+ },
18
+ body: '{"IdentityId":"abcdefg"}',
19
+ };
20
+ describe('auth - getCredentials', () => {
21
+ test('no FIPS urls', async (done) => {
22
+ fetchMock.post({
23
+ url: 'https://cognito-identity.us-east-1.amazonaws.com/',
24
+ }, (_, { headers }) => {
25
+ if (headers['X-Amz-Target'] === 'AWSCognitoIdentityService.GetId') {
26
+ return { status: 200, body: { IdentityId: 'abcdefg' } };
27
+ }
28
+ return {
29
+ status: 200,
30
+ body: {
31
+ Credentials: {
32
+ AccessKeyId: '12345',
33
+ SecretKey: '56789',
34
+ SessionToken: 'abcdef',
35
+ },
36
+ },
37
+ };
38
+ });
39
+ const fetchSpy = jest.spyOn(global, 'fetch');
40
+ const creds = await getCredentials('us-east-1:hello-world', {});
41
+ expect(creds).toEqual({
42
+ AccessKeyId: '12345',
43
+ SecretKey: '56789',
44
+ SessionToken: 'abcdef',
45
+ });
46
+ expect(fetchSpy.mock.calls.length).toBe(2);
47
+ const [identityIdFetch, credsFetch] = fetchSpy.mock.calls;
48
+ // Ensure session-start fetches made as expected
49
+ expect(identityIdFetch).toEqual([
50
+ 'https://cognito-identity.us-east-1.amazonaws.com/',
51
+ expectedIdFetchOptions,
52
+ ]);
53
+ expect(credsFetch).toEqual([
54
+ 'https://cognito-identity.us-east-1.amazonaws.com/',
55
+ expectedCredsFetchOptions,
56
+ ]);
57
+ fetchMock.restore();
58
+ done();
59
+ });
60
+ test('FIPS urls', async (done) => {
61
+ fetchMock.post({
62
+ url: 'https://cognito-identity-fips.us-east-1.amazonaws.com/',
63
+ }, (_, { headers }) => {
64
+ if (headers['X-Amz-Target'] === 'AWSCognitoIdentityService.GetId') {
65
+ return { status: 200, body: { IdentityId: 'abcdefg' } };
66
+ }
67
+ return {
68
+ status: 200,
69
+ body: {
70
+ Credentials: {
71
+ AccessKeyId: '12345',
72
+ SecretKey: '56789',
73
+ SessionToken: 'abcdef',
74
+ },
75
+ },
76
+ };
77
+ });
78
+ const fetchSpy = jest.spyOn(global, 'fetch');
79
+ const creds = await getCredentials('us-east-1:hello-world', { fips: true });
80
+ expect(creds).toEqual({
81
+ AccessKeyId: '12345',
82
+ SecretKey: '56789',
83
+ SessionToken: 'abcdef',
84
+ });
85
+ expect(fetchSpy.mock.calls.length).toBe(2);
86
+ const [identityIdFetch, credsFetch] = fetchSpy.mock.calls;
87
+ // Ensure session-start fetches made as expected
88
+ expect(identityIdFetch).toEqual([
89
+ 'https://cognito-identity-fips.us-east-1.amazonaws.com/',
90
+ expectedIdFetchOptions,
91
+ ]);
92
+ expect(credsFetch).toEqual([
93
+ 'https://cognito-identity-fips.us-east-1.amazonaws.com/',
94
+ expectedCredsFetchOptions,
95
+ ]);
96
+ fetchMock.restore();
97
+ done();
98
+ });
99
+ });
100
+ //# sourceMappingURL=auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/auth.test.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,MAAM,sBAAsB,GAAG;IAC7B,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,cAAc,EAAE,4BAA4B;QAC5C,cAAc,EAAE,iCAAiC;KAClD;IACD,IAAI,EAAE,4CAA4C;CACnD,CAAC;AAEF,MAAM,yBAAyB,GAAG;IAChC,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,cAAc,EAAE,4BAA4B;QAC5C,cAAc,EAAE,qDAAqD;KACtE;IACD,IAAI,EAAE,0BAA0B;CACjC,CAAC;AAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClC,SAAS,CAAC,IAAI,CACZ;YACE,GAAG,EAAE,mDAAmD;SACzD,EACD,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACjB,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,iCAAiC,EAAE;gBACjE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;aACzD;YACD,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE;oBACJ,WAAW,EAAE;wBACX,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,YAAY,EAAE,QAAQ;qBACvB;iBACF;aACF,CAAC;QACJ,CAAC,CACF,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO;YAClB,YAAY,EAAE,QAAQ;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAE1D,gDAAgD;QAChD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YAC9B,mDAAmD;YACnD,sBAAsB;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YACzB,mDAAmD;YACnD,yBAAyB;SAC1B,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/B,SAAS,CAAC,IAAI,CACZ;YACE,GAAG,EAAE,wDAAwD;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACjB,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,iCAAiC,EAAE;gBACjE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;aACzD;YACD,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE;oBACJ,WAAW,EAAE;wBACX,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,YAAY,EAAE,QAAQ;qBACvB;iBACF;aACF,CAAC;QACJ,CAAC,CACF,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5E,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,OAAO;YAClB,YAAY,EAAE,QAAQ;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAE1D,gDAAgD;QAChD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YAC9B,wDAAwD;YACxD,sBAAsB;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YACzB,wDAAwD;YACxD,yBAAyB;SAC1B,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export function buildAccessProperties(username, currentAccessProperties, accessChangeset) {
2
+ return accessChangeset.reduce((accessProperties, accessChange) => {
3
+ const { action, targetProperty } = accessChange;
4
+ if (action === 'add') {
5
+ accessProperties[targetProperty] = {
6
+ updatedAt: new Date(),
7
+ updatedBy: username,
8
+ };
9
+ }
10
+ else if (action === 'remove') {
11
+ delete accessProperties[targetProperty];
12
+ }
13
+ return accessProperties;
14
+ }, currentAccessProperties);
15
+ }
16
+ //# sourceMappingURL=build-access-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-access-properties.js","sourceRoot":"","sources":["../../src/build-access-properties.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,uBAA4C,EAC5C,eAAmC;IAEnC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,YAAY,EAAE,EAAE;QAC/D,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;QAChD,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,gBAAgB,CAAC,cAAc,CAAC,GAAG;gBACjC,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,SAAS,EAAE,QAAQ;aACpB,CAAC;SACH;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC9B,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC;SACzC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { buildAccessProperties } from './build-access-properties';
2
+ describe('buildAccessProperties', () => {
3
+ test('should return empty access property without changes', () => {
4
+ const accessProperties = buildAccessProperties('test_username', {}, []);
5
+ expect(accessProperties).toEqual({});
6
+ });
7
+ test('should add public to access properties', () => {
8
+ const mockDate = new Date();
9
+ const dateSpy = jest
10
+ .spyOn(global, 'Date')
11
+ .mockImplementation(() => mockDate);
12
+ const result = buildAccessProperties('test_username', {}, [
13
+ { action: 'add', targetProperty: 'public' },
14
+ ]);
15
+ expect(result).toEqual({
16
+ public: {
17
+ updatedAt: mockDate,
18
+ updatedBy: 'test_username',
19
+ },
20
+ });
21
+ dateSpy.mockRestore();
22
+ });
23
+ test('should return telemetry properties with new public access property', () => {
24
+ const mockDate = new Date();
25
+ const dateSpy = jest
26
+ .spyOn(global, 'Date')
27
+ .mockImplementation(() => mockDate);
28
+ const accessProperties = buildAccessProperties('test_username', {}, [
29
+ { action: 'add', targetProperty: 'public' },
30
+ ]);
31
+ expect(accessProperties).toEqual({
32
+ public: {
33
+ updatedAt: mockDate,
34
+ updatedBy: 'test_username',
35
+ },
36
+ });
37
+ dateSpy.mockRestore();
38
+ });
39
+ });
40
+ //# sourceMappingURL=build-access-properties.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-access-properties.test.js","sourceRoot":"","sources":["../../src/build-access-properties.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAExE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAuB,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI;aACjB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,kBAAkB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE;YACxD,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE;SAC5C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE;gBACN,SAAS,EAAE,QAAQ;gBACnB,SAAS,EAAE,eAAe;aAC3B;SACF,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAuB,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI;aACjB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,kBAAkB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,EAAE,EAAE,EAAE;YAClE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE;SAC5C,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE;gBACN,SAAS,EAAE,QAAQ;gBACnB,SAAS,EAAE,eAAe;aAC3B;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { formatTelemetryAttributes } from './format-telemetry-attributes';
2
+ import { formatTelemetryMetrics } from './format-telemetry-metrics';
3
+ export function createEventLog({ event = {}, dimensionLookup = {}, metricLookup = {}, }) {
4
+ var _a, _b;
5
+ const { pathname: eventPathname, eventType = 'other' } = event;
6
+ const metrics = formatTelemetryMetrics(event, metricLookup);
7
+ const eventAttributes = formatTelemetryAttributes({
8
+ telemetryData: Object.assign({ eventType }, event),
9
+ dimensionLookup,
10
+ excludeKeys: [
11
+ 'workflow',
12
+ 'pathname',
13
+ ...Object.keys(metrics),
14
+ ...Object.keys(metricLookup),
15
+ ],
16
+ });
17
+ const telemetryPayload = Object.assign(Object.assign({ name: eventType }, eventAttributes), metrics);
18
+ // Set browser properties if available
19
+ if (typeof document !== 'undefined' && document.referrer) {
20
+ telemetryPayload.referrer = document.referrer;
21
+ }
22
+ if (typeof window !== 'undefined' && !telemetryPayload.hostname) {
23
+ telemetryPayload.hostname = (_a = window.location) === null || _a === void 0 ? void 0 : _a.hostname;
24
+ }
25
+ telemetryPayload.path =
26
+ typeof window !== 'undefined' && window.location.pathname
27
+ ? (_b = window.location) === null || _b === void 0 ? void 0 : _b.pathname
28
+ : eventPathname;
29
+ return telemetryPayload;
30
+ }
31
+ //# sourceMappingURL=create-event-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-event-log.js","sourceRoot":"","sources":["../../src/create-event-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,GAAG,EAAe,EACvB,eAAe,GAAG,EAAE,EACpB,YAAY,GAAG,EAAE,GAKlB;;IACC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,aAAa,kBAAI,SAAS,IAAK,KAAK,CAAE;QACtC,eAAe;QACf,WAAW,EAAE;YACX,UAAU;YACV,UAAU;YACV,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;SAC7B;KACF,CAAC,CAAC;IAEH,MAAM,gBAAgB,iCACpB,IAAI,EAAE,SAAS,IACZ,eAAe,GACf,OAAO,CACX,CAAC;IAEF,sCAAsC;IACtC,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,EAAE;QACxD,gBAAgB,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;KAC/C;IAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QAC/D,gBAAgB,CAAC,QAAQ,GAAG,MAAA,MAAM,CAAC,QAAQ,0CAAE,QAAQ,CAAC;KACvD;IAED,gBAAgB,CAAC,IAAI;QACnB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ;YACvD,CAAC,CAAC,MAAA,MAAM,CAAC,QAAQ,0CAAE,QAAQ;YAC3B,CAAC,CAAC,aAAa,CAAC;IAEpB,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}