@aws-amplify/analytics 7.0.1-console-preview.f63250a.0 → 7.0.1-console-preview.5dc0b68.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 (254) hide show
  1. package/lib/errors/AnalyticsError.d.ts +7 -0
  2. package/lib/errors/AnalyticsError.js +23 -0
  3. package/lib/errors/assertValidationError.d.ts +5 -0
  4. package/lib/errors/assertValidationError.js +17 -0
  5. package/lib/errors/index.d.ts +3 -0
  6. package/lib/errors/index.js +12 -0
  7. package/lib/errors/validation.d.ts +9 -0
  8. package/lib/errors/validation.js +31 -0
  9. package/lib/index.d.ts +0 -3
  10. package/lib/index.js +0 -15
  11. package/lib/providers/pinpoint/apis/identifyUser.d.ts +10 -0
  12. package/lib/providers/pinpoint/apis/identifyUser.js +44 -0
  13. package/lib/providers/pinpoint/apis/index.d.ts +2 -0
  14. package/lib/providers/pinpoint/apis/index.js +9 -0
  15. package/lib/providers/pinpoint/apis/record.d.ts +11 -0
  16. package/lib/providers/pinpoint/apis/record.js +44 -0
  17. package/lib/providers/pinpoint/index.d.ts +1 -1
  18. package/lib/providers/pinpoint/index.js +1 -7
  19. package/lib/providers/pinpoint/types/errors.d.ts +9 -0
  20. package/lib/providers/pinpoint/types/errors.js +15 -0
  21. package/lib/providers/pinpoint/types/index.d.ts +2 -0
  22. package/lib/providers/pinpoint/types/index.js +7 -0
  23. package/lib/providers/pinpoint/types/parameters.d.ts +18 -0
  24. package/lib/providers/pinpoint/utils/index.d.ts +2 -0
  25. package/lib/providers/pinpoint/utils/index.js +9 -0
  26. package/lib/providers/pinpoint/utils/resolveConfig.d.ts +7 -0
  27. package/lib/providers/pinpoint/utils/resolveConfig.js +18 -0
  28. package/lib/providers/pinpoint/utils/resolveCredentials.d.ts +12 -0
  29. package/lib/providers/pinpoint/utils/resolveCredentials.js +24 -0
  30. package/lib/setupTests.js +1 -0
  31. package/lib/tsconfig.tsbuildinfo +1 -1
  32. package/{lib-esm/types/Analytics.d.ts → lib/types/analytics.d.ts} +0 -8
  33. package/lib/types/index.d.ts +1 -3
  34. package/lib/types/index.js +1 -3
  35. package/lib/utils/{UserAgent.d.ts → userAgent.d.ts} +1 -1
  36. package/lib/utils/{UserAgent.js → userAgent.js} +5 -5
  37. package/lib-esm/errors/AnalyticsError.d.ts +7 -0
  38. package/lib-esm/errors/AnalyticsError.js +20 -0
  39. package/lib-esm/errors/assertValidationError.d.ts +5 -0
  40. package/lib-esm/errors/assertValidationError.js +13 -0
  41. package/lib-esm/errors/index.d.ts +3 -0
  42. package/lib-esm/errors/index.js +5 -0
  43. package/lib-esm/errors/validation.d.ts +9 -0
  44. package/lib-esm/errors/validation.js +28 -0
  45. package/lib-esm/index.d.ts +0 -3
  46. package/lib-esm/index.js +0 -12
  47. package/lib-esm/providers/pinpoint/apis/identifyUser.d.ts +10 -0
  48. package/lib-esm/providers/pinpoint/apis/identifyUser.js +40 -0
  49. package/lib-esm/providers/pinpoint/apis/index.d.ts +2 -0
  50. package/{src/types/providers/index.ts → lib-esm/providers/pinpoint/apis/index.js} +2 -1
  51. package/lib-esm/providers/pinpoint/apis/record.d.ts +11 -0
  52. package/lib-esm/providers/pinpoint/apis/record.js +40 -0
  53. package/lib-esm/providers/pinpoint/index.d.ts +1 -1
  54. package/lib-esm/providers/pinpoint/index.js +1 -6
  55. package/lib-esm/providers/pinpoint/types/errors.d.ts +9 -0
  56. package/lib-esm/providers/pinpoint/types/errors.js +12 -0
  57. package/lib-esm/providers/pinpoint/types/index.d.ts +2 -0
  58. package/lib-esm/{types/providers → providers/pinpoint/types}/index.js +1 -1
  59. package/lib-esm/providers/pinpoint/types/parameters.d.ts +18 -0
  60. package/lib-esm/providers/pinpoint/utils/index.d.ts +2 -0
  61. package/lib-esm/{utils/AppUtils.js → providers/pinpoint/utils/index.js} +2 -4
  62. package/lib-esm/providers/pinpoint/utils/resolveConfig.d.ts +7 -0
  63. package/lib-esm/providers/pinpoint/utils/resolveConfig.js +14 -0
  64. package/lib-esm/providers/pinpoint/utils/resolveCredentials.d.ts +12 -0
  65. package/lib-esm/providers/pinpoint/utils/resolveCredentials.js +20 -0
  66. package/lib-esm/setupTests.js +1 -0
  67. package/lib-esm/tsconfig.tsbuildinfo +1 -1
  68. package/{lib/types/Analytics.d.ts → lib-esm/types/analytics.d.ts} +0 -8
  69. package/lib-esm/types/index.d.ts +1 -3
  70. package/lib-esm/types/index.js +1 -3
  71. package/lib-esm/utils/{UserAgent.d.ts → userAgent.d.ts} +1 -1
  72. package/lib-esm/utils/{UserAgent.js → userAgent.js} +1 -1
  73. package/package.json +11 -29
  74. package/src/errors/AnalyticsError.ts +18 -0
  75. package/src/errors/assertValidationError.ts +19 -0
  76. package/src/errors/index.ts +6 -0
  77. package/src/errors/validation.ts +31 -0
  78. package/src/index.ts +0 -15
  79. package/src/providers/pinpoint/apis/identifyUser.ts +35 -0
  80. package/src/{utils/AppUtils.ts → providers/pinpoint/apis/index.ts} +2 -4
  81. package/src/providers/pinpoint/apis/record.ts +50 -0
  82. package/src/providers/pinpoint/index.ts +1 -3
  83. package/src/providers/pinpoint/types/errors.ts +12 -0
  84. package/src/providers/pinpoint/types/index.ts +5 -0
  85. package/src/providers/pinpoint/types/parameters.ts +24 -0
  86. package/src/providers/pinpoint/utils/index.ts +5 -0
  87. package/src/providers/pinpoint/utils/resolveConfig.ts +18 -0
  88. package/src/providers/pinpoint/utils/resolveCredentials.ts +20 -0
  89. package/src/types/{Analytics.ts → analytics.ts} +1 -10
  90. package/src/types/index.ts +1 -3
  91. package/src/utils/{UserAgent.ts → userAgent.ts} +1 -1
  92. package/lib/Analytics.d.ts +0 -87
  93. package/lib/Analytics.js +0 -354
  94. package/lib/providers/AWSKinesisFirehoseProvider.d.ts +0 -12
  95. package/lib/providers/AWSKinesisFirehoseProvider.js +0 -82
  96. package/lib/providers/AWSKinesisProvider.d.ts +0 -43
  97. package/lib/providers/AWSKinesisProvider.js +0 -240
  98. package/lib/providers/AWSPinpointProvider.d.ts +0 -67
  99. package/lib/providers/AWSPinpointProvider.js +0 -576
  100. package/lib/providers/AmazonPersonalizeHelper/DataType.d.ts +0 -40
  101. package/lib/providers/AmazonPersonalizeHelper/MediaAutoTrack.d.ts +0 -20
  102. package/lib/providers/AmazonPersonalizeHelper/MediaAutoTrack.js +0 -156
  103. package/lib/providers/AmazonPersonalizeHelper/SessionInfoManager.d.ts +0 -17
  104. package/lib/providers/AmazonPersonalizeHelper/SessionInfoManager.js +0 -96
  105. package/lib/providers/AmazonPersonalizeHelper/index.d.ts +0 -3
  106. package/lib/providers/AmazonPersonalizeHelper/index.js +0 -7
  107. package/lib/providers/AmazonPersonalizeProvider.d.ts +0 -76
  108. package/lib/providers/AmazonPersonalizeProvider.js +0 -331
  109. package/lib/providers/EventBuffer.d.ts +0 -28
  110. package/lib/providers/EventBuffer.js +0 -209
  111. package/lib/providers/index.d.ts +0 -4
  112. package/lib/providers/index.js +0 -14
  113. package/lib/trackers/EventTracker.d.ts +0 -9
  114. package/lib/trackers/EventTracker.js +0 -99
  115. package/lib/trackers/PageViewTracker.d.ts +0 -12
  116. package/lib/trackers/PageViewTracker.js +0 -158
  117. package/lib/trackers/SessionTracker-rn.d.ts +0 -12
  118. package/lib/trackers/SessionTracker-rn.js +0 -134
  119. package/lib/trackers/SessionTracker.d.ts +0 -14
  120. package/lib/trackers/SessionTracker.js +0 -163
  121. package/lib/trackers/index.d.ts +0 -3
  122. package/lib/trackers/index.js +0 -11
  123. package/lib/trackers/reactnative.d.ts +0 -8
  124. package/lib/trackers/reactnative.js +0 -19
  125. package/lib/types/Analytics.js +0 -2
  126. package/lib/types/Provider.d.ts +0 -10
  127. package/lib/types/providers/AWSKinesisProvider.d.ts +0 -6
  128. package/lib/types/providers/AWSKinesisProvider.js +0 -2
  129. package/lib/types/providers/AWSPinpointProvider.d.ts +0 -50
  130. package/lib/types/providers/AWSPinpointProvider.js +0 -2
  131. package/lib/types/providers/AmazonPersonalizeProvider.d.ts +0 -7
  132. package/lib/types/providers/AmazonPersonalizeProvider.js +0 -2
  133. package/lib/types/providers/index.d.ts +0 -1
  134. package/lib/types/providers/index.js +0 -6
  135. package/lib/utils/AppUtils.d.ts +0 -2
  136. package/lib/utils/AppUtils.js +0 -9
  137. package/lib/utils/AppUtils.native.d.ts +0 -2
  138. package/lib/utils/AppUtils.native.js +0 -10
  139. package/lib/utils/MethodEmbed.d.ts +0 -11
  140. package/lib/utils/MethodEmbed.js +0 -43
  141. package/lib/vendor/dom-utils/closest.d.ts +0 -12
  142. package/lib/vendor/dom-utils/closest.js +0 -27
  143. package/lib/vendor/dom-utils/delegate.d.ts +0 -18
  144. package/lib/vendor/dom-utils/delegate.js +0 -51
  145. package/lib/vendor/dom-utils/dispatch.d.ts +0 -17
  146. package/lib/vendor/dom-utils/dispatch.js +0 -51
  147. package/lib/vendor/dom-utils/get-attributes.d.ts +0 -11
  148. package/lib/vendor/dom-utils/get-attributes.js +0 -28
  149. package/lib/vendor/dom-utils/index.d.ts +0 -7
  150. package/lib/vendor/dom-utils/index.js +0 -17
  151. package/lib/vendor/dom-utils/matches.d.ts +0 -11
  152. package/lib/vendor/dom-utils/matches.js +0 -69
  153. package/lib/vendor/dom-utils/parents.d.ts +0 -10
  154. package/lib/vendor/dom-utils/parents.js +0 -22
  155. package/lib/vendor/dom-utils/parse-url.d.ts +0 -9
  156. package/lib/vendor/dom-utils/parse-url.js +0 -59
  157. package/lib-esm/Analytics.d.ts +0 -87
  158. package/lib-esm/Analytics.js +0 -351
  159. package/lib-esm/providers/AWSKinesisFirehoseProvider.d.ts +0 -12
  160. package/lib-esm/providers/AWSKinesisFirehoseProvider.js +0 -79
  161. package/lib-esm/providers/AWSKinesisProvider.d.ts +0 -43
  162. package/lib-esm/providers/AWSKinesisProvider.js +0 -237
  163. package/lib-esm/providers/AWSPinpointProvider.d.ts +0 -67
  164. package/lib-esm/providers/AWSPinpointProvider.js +0 -573
  165. package/lib-esm/providers/AmazonPersonalizeHelper/DataType.d.ts +0 -40
  166. package/lib-esm/providers/AmazonPersonalizeHelper/MediaAutoTrack.d.ts +0 -20
  167. package/lib-esm/providers/AmazonPersonalizeHelper/MediaAutoTrack.js +0 -153
  168. package/lib-esm/providers/AmazonPersonalizeHelper/SessionInfoManager.d.ts +0 -17
  169. package/lib-esm/providers/AmazonPersonalizeHelper/SessionInfoManager.js +0 -92
  170. package/lib-esm/providers/AmazonPersonalizeHelper/index.d.ts +0 -3
  171. package/lib-esm/providers/AmazonPersonalizeHelper/index.js +0 -2
  172. package/lib-esm/providers/AmazonPersonalizeProvider.d.ts +0 -76
  173. package/lib-esm/providers/AmazonPersonalizeProvider.js +0 -328
  174. package/lib-esm/providers/EventBuffer.d.ts +0 -28
  175. package/lib-esm/providers/EventBuffer.js +0 -207
  176. package/lib-esm/providers/index.d.ts +0 -4
  177. package/lib-esm/providers/index.js +0 -7
  178. package/lib-esm/trackers/EventTracker.d.ts +0 -9
  179. package/lib-esm/trackers/EventTracker.js +0 -96
  180. package/lib-esm/trackers/PageViewTracker.d.ts +0 -12
  181. package/lib-esm/trackers/PageViewTracker.js +0 -155
  182. package/lib-esm/trackers/SessionTracker-rn.d.ts +0 -12
  183. package/lib-esm/trackers/SessionTracker-rn.js +0 -131
  184. package/lib-esm/trackers/SessionTracker.d.ts +0 -14
  185. package/lib-esm/trackers/SessionTracker.js +0 -160
  186. package/lib-esm/trackers/index.d.ts +0 -3
  187. package/lib-esm/trackers/index.js +0 -5
  188. package/lib-esm/trackers/reactnative.d.ts +0 -8
  189. package/lib-esm/trackers/reactnative.js +0 -14
  190. package/lib-esm/types/Analytics.js +0 -1
  191. package/lib-esm/types/Provider.d.ts +0 -10
  192. package/lib-esm/types/providers/AWSKinesisProvider.d.ts +0 -6
  193. package/lib-esm/types/providers/AWSKinesisProvider.js +0 -1
  194. package/lib-esm/types/providers/AWSPinpointProvider.d.ts +0 -50
  195. package/lib-esm/types/providers/AWSPinpointProvider.js +0 -1
  196. package/lib-esm/types/providers/AmazonPersonalizeProvider.d.ts +0 -7
  197. package/lib-esm/types/providers/AmazonPersonalizeProvider.js +0 -1
  198. package/lib-esm/types/providers/index.d.ts +0 -1
  199. package/lib-esm/utils/AppUtils.d.ts +0 -2
  200. package/lib-esm/utils/AppUtils.native.d.ts +0 -2
  201. package/lib-esm/utils/AppUtils.native.js +0 -7
  202. package/lib-esm/utils/MethodEmbed.d.ts +0 -11
  203. package/lib-esm/utils/MethodEmbed.js +0 -40
  204. package/lib-esm/vendor/dom-utils/closest.d.ts +0 -12
  205. package/lib-esm/vendor/dom-utils/closest.js +0 -23
  206. package/lib-esm/vendor/dom-utils/delegate.d.ts +0 -18
  207. package/lib-esm/vendor/dom-utils/delegate.js +0 -47
  208. package/lib-esm/vendor/dom-utils/dispatch.d.ts +0 -17
  209. package/lib-esm/vendor/dom-utils/dispatch.js +0 -47
  210. package/lib-esm/vendor/dom-utils/get-attributes.d.ts +0 -11
  211. package/lib-esm/vendor/dom-utils/get-attributes.js +0 -24
  212. package/lib-esm/vendor/dom-utils/index.d.ts +0 -7
  213. package/lib-esm/vendor/dom-utils/index.js +0 -7
  214. package/lib-esm/vendor/dom-utils/matches.d.ts +0 -11
  215. package/lib-esm/vendor/dom-utils/matches.js +0 -65
  216. package/lib-esm/vendor/dom-utils/parents.d.ts +0 -10
  217. package/lib-esm/vendor/dom-utils/parents.js +0 -18
  218. package/lib-esm/vendor/dom-utils/parse-url.d.ts +0 -9
  219. package/lib-esm/vendor/dom-utils/parse-url.js +0 -55
  220. package/src/Analytics.ts +0 -446
  221. package/src/providers/AWSKinesisFirehoseProvider.ts +0 -105
  222. package/src/providers/AWSKinesisProvider.ts +0 -250
  223. package/src/providers/AWSPinpointProvider.ts +0 -685
  224. package/src/providers/AmazonPersonalizeHelper/DataType.ts +0 -49
  225. package/src/providers/AmazonPersonalizeHelper/MediaAutoTrack.ts +0 -196
  226. package/src/providers/AmazonPersonalizeHelper/SessionInfoManager.ts +0 -121
  227. package/src/providers/AmazonPersonalizeHelper/index.ts +0 -11
  228. package/src/providers/AmazonPersonalizeProvider.ts +0 -398
  229. package/src/providers/EventBuffer.ts +0 -257
  230. package/src/providers/index.ts +0 -8
  231. package/src/trackers/EventTracker.ts +0 -115
  232. package/src/trackers/PageViewTracker.ts +0 -157
  233. package/src/trackers/SessionTracker-rn.ts +0 -134
  234. package/src/trackers/SessionTracker.ts +0 -179
  235. package/src/trackers/index.ts +0 -5
  236. package/src/trackers/reactnative.ts +0 -13
  237. package/src/types/Provider.ts +0 -26
  238. package/src/types/providers/AWSKinesisProvider.ts +0 -8
  239. package/src/types/providers/AWSPinpointProvider.ts +0 -60
  240. package/src/types/providers/AmazonPersonalizeProvider.ts +0 -9
  241. package/src/utils/AppUtils.native.ts +0 -9
  242. package/src/utils/MethodEmbed.ts +0 -49
  243. package/src/vendor/dom-utils/closest.ts +0 -25
  244. package/src/vendor/dom-utils/delegate.ts +0 -51
  245. package/src/vendor/dom-utils/dispatch.ts +0 -59
  246. package/src/vendor/dom-utils/get-attributes.ts +0 -26
  247. package/src/vendor/dom-utils/index.ts +0 -7
  248. package/src/vendor/dom-utils/matches.ts +0 -68
  249. package/src/vendor/dom-utils/parents.ts +0 -19
  250. package/src/vendor/dom-utils/parse-url.ts +0 -66
  251. /package/lib/{types/Provider.js → providers/pinpoint/types/parameters.js} +0 -0
  252. /package/lib/{providers/AmazonPersonalizeHelper/DataType.js → types/analytics.js} +0 -0
  253. /package/lib-esm/{types/Provider.js → providers/pinpoint/types/parameters.js} +0 -0
  254. /package/lib-esm/{providers/AmazonPersonalizeHelper/DataType.js → types/analytics.js} +0 -0
@@ -1,398 +0,0 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import {
5
- ConsoleLogger as Logger,
6
- Credentials,
7
- browserOrNode,
8
- AnalyticsAction,
9
- } from '@aws-amplify/core';
10
- import {
11
- PersonalizeEventsClient,
12
- PutEventsCommand,
13
- PutEventsCommandInput,
14
- } from '@aws-sdk/client-personalize-events';
15
- import {
16
- SessionInfo,
17
- RequestParams,
18
- RecordEventPayload,
19
- SessionInfoManager,
20
- MediaAutoTrack,
21
- } from './AmazonPersonalizeHelper';
22
- import get from 'lodash/get';
23
- import isEmpty from 'lodash/isEmpty';
24
- import isEqual from 'lodash/isEqual';
25
- import { AnalyticsProvider } from '../types';
26
- import { getAnalyticsUserAgent } from '../utils/UserAgent';
27
-
28
- const logger = new Logger('AmazonPersonalizeProvider');
29
-
30
- // events buffer
31
- const FLUSH_SIZE = 5;
32
- const FLUSH_SIZE_THRESHHOLD = 10;
33
- const FLUSH_INTERVAL = 5 * 1000; // 5s
34
-
35
- const IDENTIFY_EVENT = 'Identify';
36
-
37
- export class AmazonPersonalizeProvider implements AnalyticsProvider {
38
- private _config;
39
- private _personalize;
40
- private _buffer;
41
- private _timer;
42
- private _sessionInfo: SessionInfo;
43
- private _sessionManager;
44
- private _isBrowser;
45
-
46
- constructor(config?) {
47
- this._buffer = [];
48
- this._config = config ? config : {};
49
- this._config.flushSize =
50
- this._config.flushSize > 0 &&
51
- this._config.flushSize <= FLUSH_SIZE_THRESHHOLD
52
- ? this._config.flushSize
53
- : FLUSH_SIZE;
54
- this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;
55
- this._sessionManager = new SessionInfoManager();
56
- if (!isEmpty(this._config.trackingId)) {
57
- this._sessionInfo = this._sessionManager.retrieveSessionInfo(
58
- this._config.trackingId
59
- );
60
- }
61
- this._isBrowser = browserOrNode().isBrowser;
62
-
63
- // flush event buffer
64
- this._setupTimer();
65
- }
66
-
67
- private _setupTimer() {
68
- if (this._timer) {
69
- clearInterval(this._timer);
70
- }
71
- const { flushInterval } = this._config;
72
- const that = this;
73
- this._timer = setInterval(() => {
74
- that._sendFromBuffer();
75
- }, flushInterval);
76
- }
77
-
78
- /**
79
- * Record event
80
- * @param eventType - type of the event action. e.g. "Click"
81
- * @param properties - properties of the event
82
- * @return Promise
83
- */
84
- public async record(params): Promise<boolean> {
85
- const credentials = await this._getCredentials();
86
- if (!credentials) return Promise.resolve(false);
87
-
88
- Object.assign(params, {
89
- config: this._config,
90
- credentials,
91
- sentAt: new Date(),
92
- });
93
- const { eventType, properties } = params.event;
94
-
95
- if (eventType === IDENTIFY_EVENT) {
96
- this._sessionManager.updateSessionInfo(
97
- properties && properties.userId ? properties.userId : '',
98
- this._sessionInfo
99
- );
100
- return;
101
- } else if (!isEmpty(params.event.userId)) {
102
- this._sessionManager.updateSessionInfo(
103
- params.event.userId,
104
- this._sessionInfo
105
- );
106
- }
107
- const requestParams: RequestParams = this.generateRequestParams(
108
- params,
109
- this._sessionInfo
110
- );
111
- if (eventType === 'MediaAutoTrack') {
112
- if (this._isBrowser) {
113
- if (
114
- !isEmpty(
115
- get(requestParams, 'eventData.properties.domElementId', null)
116
- )
117
- ) {
118
- const isLoaded = await this.isElementFullyLoaded(
119
- this.loadElement,
120
- requestParams.eventData.properties['domElementId'],
121
- 500,
122
- 5
123
- );
124
- if (isLoaded) {
125
- new MediaAutoTrack(requestParams, this);
126
- } else {
127
- logger.debug('Cannot find the media element.');
128
- }
129
- } else {
130
- logger.debug(
131
- "Missing domElementId field in 'properties' for MediaAutoTrack event type."
132
- );
133
- }
134
- } else {
135
- logger.debug('MediaAutoTrack only for browser');
136
- }
137
- return;
138
- }
139
-
140
- return this.putToBuffer(requestParams);
141
- }
142
-
143
- private loadElement(domId): Promise<boolean> {
144
- return new Promise((resolve, reject) => {
145
- if (
146
- document.getElementById(domId) &&
147
- document.getElementById(domId).clientHeight
148
- ) {
149
- return resolve(true);
150
- } else {
151
- return reject(true);
152
- }
153
- });
154
- }
155
-
156
- private isElementFullyLoaded(
157
- operation,
158
- params,
159
- delay,
160
- times
161
- ): Promise<boolean> {
162
- const wait = ms => new Promise(r => setTimeout(r, ms));
163
- return new Promise((resolve, reject) => {
164
- return operation(params)
165
- .then(resolve)
166
- .catch(reason => {
167
- if (times - 1 > 0) {
168
- return wait(delay)
169
- .then(
170
- this.isElementFullyLoaded.bind(
171
- null,
172
- operation,
173
- params,
174
- delay,
175
- times - 1
176
- )
177
- )
178
- .then(resolve)
179
- .catch(reject);
180
- }
181
- return reject(reason);
182
- });
183
- });
184
- }
185
-
186
- /**
187
- * get the category of the plugin
188
- */
189
- public getCategory(): string {
190
- return 'Analytics';
191
- }
192
-
193
- /**
194
- * get provider name of the plugin
195
- */
196
- public getProviderName(): string {
197
- return 'AmazonPersonalize';
198
- }
199
-
200
- /**
201
- * configure the plugin
202
- * @param {Object} config - configuration
203
- */
204
- public configure(config): object {
205
- logger.debug('configure Analytics', config);
206
- const conf = config ? config : {};
207
- this._config = Object.assign({}, this._config, conf);
208
- if (!isEmpty(this._config.trackingId)) {
209
- this._sessionInfo = this._sessionManager.retrieveSessionInfo(
210
- this._config.trackingId
211
- );
212
- }
213
- this._setupTimer();
214
- return this._config;
215
- }
216
-
217
- /**
218
- * Generate the requestParams from customer input params and sessionInfo
219
- * @private
220
- * @param eventData - customer input for event data
221
- * @param api - api name
222
- * @return RequestParams - wrapper object with all information required for make request
223
- */
224
- private generateRequestParams(params, sessionInfo): RequestParams {
225
- const requestParams = <RequestParams>{};
226
- const { eventType, properties } = params.event;
227
- requestParams.eventData = { eventType, properties };
228
- requestParams.sessionInfo = sessionInfo;
229
- requestParams.sentAt = params.sentAt;
230
- requestParams.credentials = params.credentials;
231
- requestParams.config = params.config;
232
- return requestParams;
233
- }
234
-
235
- /**
236
- * record an event
237
- * @param {Object} params - the params of an event
238
- */
239
- private _sendEvents(group) {
240
- const groupLen = group.length;
241
- if (groupLen === 0) {
242
- logger.debug('events array is empty, directly return');
243
- return;
244
- }
245
-
246
- const { config, credentials, sessionInfo } = group[0];
247
-
248
- const initClients = this._init(config, credentials);
249
- if (!initClients) return false;
250
- if (groupLen > 0) {
251
- const events: RecordEventPayload[] = [];
252
- for (let i = 0; i < groupLen; i += 1) {
253
- const params: RequestParams = group.shift();
254
- const eventPayload: RecordEventPayload =
255
- this._generateSingleRecordPayload(params, sessionInfo);
256
- events.push(eventPayload);
257
- }
258
- const payload = <PutEventsCommandInput>{};
259
- payload.trackingId = sessionInfo.trackingId;
260
- payload.sessionId = sessionInfo.sessionId;
261
- payload.userId = sessionInfo.userId;
262
- payload.eventList = [];
263
- events.forEach(event => {
264
- // @ts-ignore
265
- payload.eventList.push(event);
266
- });
267
- const command: PutEventsCommand = new PutEventsCommand(payload);
268
- this._personalize.send(command, err => {
269
- if (err) logger.debug('Failed to call putEvents in Personalize', err);
270
- else logger.debug('Put events');
271
- });
272
- }
273
- }
274
-
275
- /**
276
- * Put event into buffer
277
- * @private
278
- * @param params - params for the event recording
279
- */
280
- private putToBuffer(params: RequestParams) {
281
- if (this._buffer.length < this._config.flushSize) {
282
- this._buffer.push(params);
283
- } else {
284
- this._buffer.push(params);
285
- this._sendFromBuffer();
286
- }
287
- return Promise.resolve(true);
288
- }
289
-
290
- /**
291
- * flush the buffer and batch sending the request
292
- * @private
293
- * @param eventsParams - the buffer for cache the payload
294
- */
295
- private _sendFromBuffer() {
296
- const size = this._buffer.length;
297
- if (size <= 0) return;
298
- const eventsGroups = [];
299
- let preCred = null;
300
- let group = [];
301
- for (let i = 0; i < size; i += 1) {
302
- const currRequestParams: RequestParams = this._buffer.shift();
303
- const cred = currRequestParams.credentials;
304
- const sessionInfo = currRequestParams.sessionInfo;
305
- if (i === 0) {
306
- group.push(currRequestParams);
307
- preCred = cred;
308
- } else {
309
- if (
310
- isEqual(sessionInfo, this._sessionInfo) &&
311
- cred.sessionToken === preCred.sessionToken &&
312
- cred.identityId === preCred.identityId
313
- ) {
314
- logger.debug('no change for cred, put event in the same group');
315
- group.push(currRequestParams);
316
- } else {
317
- eventsGroups.push(group);
318
- group = [];
319
- group.push(currRequestParams);
320
- preCred = cred;
321
- this._sessionInfo = sessionInfo;
322
- }
323
- }
324
- }
325
- eventsGroups.push(group);
326
-
327
- eventsGroups.map(group => {
328
- this._sendEvents(group);
329
- });
330
- }
331
-
332
- /**
333
- * Generate the record payload for single event
334
- * @private
335
- * @param params - RequestParams
336
- */
337
- private _generateSingleRecordPayload(
338
- params: RequestParams,
339
- sessionInfo
340
- ): RecordEventPayload {
341
- const { eventData, sentAt } = params;
342
- const trackPayload = <RecordEventPayload>{};
343
- trackPayload.sentAt = sentAt;
344
- trackPayload.properties =
345
- eventData.properties && JSON.stringify(eventData.properties);
346
- trackPayload.eventId =
347
- this._sessionManager.getTimerKey() + sessionInfo.sessionId;
348
- trackPayload.eventType = eventData.eventType;
349
- return trackPayload;
350
- }
351
-
352
- /**
353
- * Initialize the personalize client
354
- * @private
355
- * @param params - RequestParams
356
- */
357
- private _init(config, credentials) {
358
- logger.debug('init clients');
359
-
360
- if (
361
- this._personalize &&
362
- this._config.credentials &&
363
- this._config.credentials.sessionToken === credentials.sessionToken &&
364
- this._config.credentials.identityId === credentials.identityId
365
- ) {
366
- logger.debug('no change for analytics config, directly return from init');
367
- return true;
368
- }
369
-
370
- this._config.credentials = credentials;
371
- const { region } = config;
372
- logger.debug('initialize personalize with credentials', credentials);
373
- this._personalize = new PersonalizeEventsClient({
374
- region,
375
- credentials,
376
- customUserAgent: getAnalyticsUserAgent(AnalyticsAction.Record),
377
- });
378
- return true;
379
- }
380
-
381
- /**
382
- * check if current credentials exists
383
- * @private
384
- */
385
- private _getCredentials() {
386
- const that = this;
387
- return Credentials.get()
388
- .then(credentials => {
389
- if (!credentials) return null;
390
- logger.debug('set credentials for analytics', that._config.credentials);
391
- return Credentials.shear(credentials);
392
- })
393
- .catch(err => {
394
- logger.debug('ensure credentials error', err);
395
- return null;
396
- });
397
- }
398
- }
@@ -1,257 +0,0 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
- import { AnalyticsAction, ConsoleLogger as Logger } from '@aws-amplify/core';
4
- import {
5
- putEvents,
6
- PutEventsInput,
7
- PutEventsOutput,
8
- } from '@aws-amplify/core/internals/aws-clients/pinpoint';
9
- import { EventBuffer, EventObject, EventMap } from '../types';
10
- import { isAppInForeground } from '../utils/AppUtils';
11
- import { getAnalyticsUserAgentString } from '../utils/UserAgent';
12
-
13
- const logger = new Logger('EventsBuffer');
14
- const RETRYABLE_CODES = [429, 500];
15
- const ACCEPTED_CODES = [202];
16
-
17
- type EventsBufferConfig = {
18
- bufferSize: number;
19
- flushSize: number;
20
- flushInterval: number;
21
- resendLimit: number;
22
- };
23
-
24
- export default class EventsBuffer {
25
- private _config;
26
- private _interval;
27
- private _buffer: EventBuffer;
28
- private _pause = false;
29
- private _flush = false;
30
-
31
- constructor(config: EventsBufferConfig) {
32
- logger.debug('Instantiating buffer with config:', config);
33
- this._buffer = [];
34
- this._config = config;
35
-
36
- this._sendBatch = this._sendBatch.bind(this);
37
-
38
- this._startLoop();
39
- }
40
-
41
- public push(event: EventObject) {
42
- // if the buffer is currently at the configured limit, pushing would exceed it
43
- if (this._buffer.length >= this._config.bufferSize) {
44
- logger.debug('Exceeded analytics events buffer size');
45
- return event.handlers.reject(
46
- new Error('Exceeded the size of analytics events buffer')
47
- );
48
- }
49
-
50
- const { eventId } = event.params.event;
51
- const bufferElement = { [eventId]: event };
52
- this._buffer.push(bufferElement);
53
- }
54
-
55
- public pause() {
56
- this._pause = true;
57
- }
58
-
59
- public resume() {
60
- this._pause = false;
61
- }
62
-
63
- public flush() {
64
- this._flush = true;
65
- }
66
-
67
- private _startLoop() {
68
- if (this._interval) {
69
- clearInterval(this._interval);
70
- }
71
-
72
- const { flushInterval } = this._config;
73
-
74
- this._interval = setInterval(this._sendBatch, flushInterval);
75
- }
76
-
77
- private _sendBatch() {
78
- const bufferLength = this._buffer.length;
79
-
80
- if (this._flush && !bufferLength) {
81
- clearInterval(this._interval);
82
- }
83
-
84
- // Do not send the batch of events if
85
- // the Buffer is paused or is empty or the App is not in the foreground
86
- // Apps should be in the foreground since
87
- // the OS may restrict access to the network in the background
88
- if (this._pause || !bufferLength || !isAppInForeground()) {
89
- return;
90
- }
91
-
92
- const { flushSize } = this._config;
93
-
94
- const batchSize = Math.min(flushSize, bufferLength);
95
- const bufferSubset = this._buffer.splice(0, batchSize);
96
-
97
- this._putEvents(bufferSubset);
98
- }
99
-
100
- private async _putEvents(buffer: EventBuffer) {
101
- const eventMap: EventMap = this._bufferToMap(buffer);
102
- const batchEventParams = this._generateBatchEventParams(eventMap);
103
-
104
- try {
105
- const { credentials, region } = this._config;
106
- const data: PutEventsOutput = await putEvents(
107
- {
108
- credentials,
109
- region,
110
- userAgentValue: getAnalyticsUserAgentString(AnalyticsAction.Record),
111
- },
112
- batchEventParams
113
- );
114
- this._processPutEventsSuccessResponse(data, eventMap);
115
- } catch (err) {
116
- return this._handlePutEventsFailure(err, eventMap);
117
- }
118
- }
119
-
120
- private _generateBatchEventParams(eventMap: EventMap): PutEventsInput {
121
- const batchEventParams = {
122
- ApplicationId: '',
123
- EventsRequest: {
124
- BatchItem: {},
125
- },
126
- };
127
-
128
- Object.values(eventMap).forEach(item => {
129
- const { params } = item;
130
- const { event, timestamp, config } = params;
131
- const { name, attributes, metrics, eventId, session } = event;
132
- const { appId, endpointId } = config;
133
-
134
- const batchItem = batchEventParams.EventsRequest.BatchItem;
135
-
136
- batchEventParams.ApplicationId = batchEventParams.ApplicationId || appId;
137
-
138
- if (!batchItem[endpointId]) {
139
- batchItem[endpointId] = {
140
- Endpoint: {},
141
- Events: {},
142
- };
143
- }
144
-
145
- batchItem[endpointId].Events[eventId] = {
146
- EventType: name,
147
- Timestamp: new Date(timestamp).toISOString(),
148
- Attributes: attributes,
149
- Metrics: metrics,
150
- Session: session,
151
- };
152
- });
153
-
154
- return batchEventParams;
155
- }
156
-
157
- private _handlePutEventsFailure(err, eventMap: EventMap) {
158
- logger.debug('_putEvents Failed: ', err);
159
- const statusCode = err.$metadata && err.$metadata.httpStatusCode;
160
-
161
- if (RETRYABLE_CODES.includes(statusCode)) {
162
- const retryableEvents = Object.values(eventMap);
163
- this._retry(retryableEvents);
164
- return;
165
- }
166
- }
167
-
168
- private _processPutEventsSuccessResponse(
169
- data: PutEventsOutput,
170
- eventMap: EventMap
171
- ) {
172
- const { Results = {} } = data.EventsResponse ?? {};
173
- const retryableEvents: EventObject[] = [];
174
-
175
- Object.entries(Results).forEach(([endpointId, endpointValues]) => {
176
- const responses = endpointValues.EventsItemResponse ?? {};
177
-
178
- Object.entries(responses).forEach(([eventId, eventValues]) => {
179
- const eventObject = eventMap[eventId];
180
- if (!eventObject) {
181
- return;
182
- }
183
-
184
- const { StatusCode, Message } = eventValues ?? {};
185
-
186
- // manually crafting handlers response to keep API consistant
187
- const response = {
188
- EventsResponse: {
189
- Results: {
190
- [endpointId]: {
191
- EventsItemResponse: {
192
- [eventId]: { StatusCode, Message },
193
- },
194
- },
195
- },
196
- },
197
- };
198
-
199
- if (StatusCode && ACCEPTED_CODES.includes(StatusCode)) {
200
- eventObject.handlers.resolve(response);
201
- return;
202
- }
203
-
204
- if (StatusCode && RETRYABLE_CODES.includes(StatusCode)) {
205
- retryableEvents.push(eventObject);
206
- return;
207
- }
208
-
209
- const { name } = eventObject.params.event;
210
-
211
- logger.error(
212
- `event ${eventId} : ${name} failed with error: ${Message}`
213
- );
214
- return eventObject.handlers.reject(response);
215
- });
216
- });
217
-
218
- if (retryableEvents.length) {
219
- this._retry(retryableEvents);
220
- }
221
- }
222
-
223
- private _retry(retryableEvents: EventObject[]) {
224
- // retryable events that haven't reached the resendLimit
225
- const eligibleEvents: EventBuffer = [];
226
-
227
- retryableEvents.forEach((event: EventObject) => {
228
- const { params } = event;
229
- const { eventId, name } = params.event;
230
-
231
- if (params.resendLimit-- > 0) {
232
- logger.debug(
233
- `resending event ${eventId} : ${name} with ${params.resendLimit} retry attempts remaining`
234
- );
235
- eligibleEvents.push({ [eventId]: event });
236
- return;
237
- }
238
-
239
- logger.debug(
240
- `no retry attempts remaining for event ${eventId} : ${name}`
241
- );
242
- });
243
-
244
- // add the events to the front of the buffer
245
- this._buffer.unshift(...eligibleEvents);
246
- }
247
-
248
- // convert buffer to map, i.e. { eventId1: { params, handler }, eventId2: { params, handlers } }
249
- // this allows us to easily access the handlers after receiving a batch response
250
- private _bufferToMap(buffer: EventBuffer) {
251
- return buffer.reduce((acc, curVal) => {
252
- const [[key, value]] = Object.entries(curVal);
253
- acc[key] = value;
254
- return acc;
255
- }, {});
256
- }
257
- }
@@ -1,8 +0,0 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
- export { AWSPinpointProvider } from './AWSPinpointProvider';
4
-
5
- // TODO(v6) Refactor as additional Analytics providers come online
6
- export { AWSKinesisProvider } from './AWSKinesisProvider';
7
- export { AWSKinesisFirehoseProvider } from './AWSKinesisFirehoseProvider';
8
- export { AmazonPersonalizeProvider } from './AmazonPersonalizeProvider';