@aws-amplify/analytics 0.0.0-unstable-1ca644b-20260128091132

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 (456) hide show
  1. package/README.md +3 -0
  2. package/dist/cjs/apis/disable.js +16 -0
  3. package/dist/cjs/apis/disable.js.map +1 -0
  4. package/dist/cjs/apis/enable.js +15 -0
  5. package/dist/cjs/apis/enable.js.map +1 -0
  6. package/dist/cjs/apis/index.js +11 -0
  7. package/dist/cjs/apis/index.js.map +1 -0
  8. package/dist/cjs/errors/AnalyticsError.js +21 -0
  9. package/dist/cjs/errors/AnalyticsError.js.map +1 -0
  10. package/dist/cjs/errors/assertValidationError.js +22 -0
  11. package/dist/cjs/errors/assertValidationError.js.map +1 -0
  12. package/dist/cjs/errors/index.js +14 -0
  13. package/dist/cjs/errors/index.js.map +1 -0
  14. package/dist/cjs/errors/validation.js +44 -0
  15. package/dist/cjs/errors/validation.js.map +1 -0
  16. package/dist/cjs/index.js +17 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/providers/kinesis/apis/flushEvents.js +39 -0
  19. package/dist/cjs/providers/kinesis/apis/flushEvents.js.map +1 -0
  20. package/dist/cjs/providers/kinesis/apis/index.js +11 -0
  21. package/dist/cjs/providers/kinesis/apis/index.js.map +1 -0
  22. package/dist/cjs/providers/kinesis/apis/record.js +69 -0
  23. package/dist/cjs/providers/kinesis/apis/record.js.map +1 -0
  24. package/dist/cjs/providers/kinesis/index.js +10 -0
  25. package/dist/cjs/providers/kinesis/index.js.map +1 -0
  26. package/dist/cjs/providers/kinesis/types/buffer.js +6 -0
  27. package/dist/cjs/providers/kinesis/types/buffer.js.map +1 -0
  28. package/dist/cjs/providers/kinesis/types/index.js +6 -0
  29. package/dist/cjs/providers/kinesis/types/index.js.map +1 -0
  30. package/dist/cjs/providers/kinesis/types/inputs.js +6 -0
  31. package/dist/cjs/providers/kinesis/types/inputs.js.map +1 -0
  32. package/dist/cjs/providers/kinesis/utils/constants.js +13 -0
  33. package/dist/cjs/providers/kinesis/utils/constants.js.map +1 -0
  34. package/dist/cjs/providers/kinesis/utils/getEventBuffer.js +85 -0
  35. package/dist/cjs/providers/kinesis/utils/getEventBuffer.js.map +1 -0
  36. package/dist/cjs/providers/kinesis/utils/resolveConfig.js +27 -0
  37. package/dist/cjs/providers/kinesis/utils/resolveConfig.js.map +1 -0
  38. package/dist/cjs/providers/kinesis-firehose/apis/flushEvents.js +38 -0
  39. package/dist/cjs/providers/kinesis-firehose/apis/flushEvents.js.map +1 -0
  40. package/dist/cjs/providers/kinesis-firehose/apis/index.js +11 -0
  41. package/dist/cjs/providers/kinesis-firehose/apis/index.js.map +1 -0
  42. package/dist/cjs/providers/kinesis-firehose/apis/record.js +62 -0
  43. package/dist/cjs/providers/kinesis-firehose/apis/record.js.map +1 -0
  44. package/dist/cjs/providers/kinesis-firehose/index.js +10 -0
  45. package/dist/cjs/providers/kinesis-firehose/index.js.map +1 -0
  46. package/dist/cjs/providers/kinesis-firehose/types/buffer.js +6 -0
  47. package/dist/cjs/providers/kinesis-firehose/types/buffer.js.map +1 -0
  48. package/dist/cjs/providers/kinesis-firehose/types/index.js +6 -0
  49. package/dist/cjs/providers/kinesis-firehose/types/index.js.map +1 -0
  50. package/dist/cjs/providers/kinesis-firehose/types/inputs.js +6 -0
  51. package/dist/cjs/providers/kinesis-firehose/types/inputs.js.map +1 -0
  52. package/dist/cjs/providers/kinesis-firehose/utils/constants.js +13 -0
  53. package/dist/cjs/providers/kinesis-firehose/utils/constants.js.map +1 -0
  54. package/dist/cjs/providers/kinesis-firehose/utils/getEventBuffer.js +83 -0
  55. package/dist/cjs/providers/kinesis-firehose/utils/getEventBuffer.js.map +1 -0
  56. package/dist/cjs/providers/kinesis-firehose/utils/index.js +11 -0
  57. package/dist/cjs/providers/kinesis-firehose/utils/index.js.map +1 -0
  58. package/dist/cjs/providers/kinesis-firehose/utils/resolveConfig.js +27 -0
  59. package/dist/cjs/providers/kinesis-firehose/utils/resolveConfig.js.map +1 -0
  60. package/dist/cjs/providers/personalize/apis/flushEvents.js +37 -0
  61. package/dist/cjs/providers/personalize/apis/flushEvents.js.map +1 -0
  62. package/dist/cjs/providers/personalize/apis/index.js +11 -0
  63. package/dist/cjs/providers/personalize/apis/index.js.map +1 -0
  64. package/dist/cjs/providers/personalize/apis/record.js +98 -0
  65. package/dist/cjs/providers/personalize/apis/record.js.map +1 -0
  66. package/dist/cjs/providers/personalize/index.js +10 -0
  67. package/dist/cjs/providers/personalize/index.js.map +1 -0
  68. package/dist/cjs/providers/personalize/types/buffer.js +6 -0
  69. package/dist/cjs/providers/personalize/types/buffer.js.map +1 -0
  70. package/dist/cjs/providers/personalize/types/index.js +6 -0
  71. package/dist/cjs/providers/personalize/types/index.js.map +1 -0
  72. package/dist/cjs/providers/personalize/types/inputs.js +6 -0
  73. package/dist/cjs/providers/personalize/types/inputs.js.map +1 -0
  74. package/dist/cjs/providers/personalize/utils/autoTrackMedia.js +183 -0
  75. package/dist/cjs/providers/personalize/utils/autoTrackMedia.js.map +1 -0
  76. package/dist/cjs/providers/personalize/utils/cachedSession.js +51 -0
  77. package/dist/cjs/providers/personalize/utils/cachedSession.js.map +1 -0
  78. package/dist/cjs/providers/personalize/utils/constants.js +14 -0
  79. package/dist/cjs/providers/personalize/utils/constants.js.map +1 -0
  80. package/dist/cjs/providers/personalize/utils/getEventBuffer.js +86 -0
  81. package/dist/cjs/providers/personalize/utils/getEventBuffer.js.map +1 -0
  82. package/dist/cjs/providers/personalize/utils/index.js +19 -0
  83. package/dist/cjs/providers/personalize/utils/index.js.map +1 -0
  84. package/dist/cjs/providers/personalize/utils/resolveConfig.js +28 -0
  85. package/dist/cjs/providers/personalize/utils/resolveConfig.js.map +1 -0
  86. package/dist/cjs/providers/pinpoint/apis/configureAutoTrack.js +39 -0
  87. package/dist/cjs/providers/pinpoint/apis/configureAutoTrack.js.map +1 -0
  88. package/dist/cjs/providers/pinpoint/apis/flushEvents.js +43 -0
  89. package/dist/cjs/providers/pinpoint/apis/flushEvents.js.map +1 -0
  90. package/dist/cjs/providers/pinpoint/apis/identifyUser.js +75 -0
  91. package/dist/cjs/providers/pinpoint/apis/identifyUser.js.map +1 -0
  92. package/dist/cjs/providers/pinpoint/apis/index.js +15 -0
  93. package/dist/cjs/providers/pinpoint/apis/index.js.map +1 -0
  94. package/dist/cjs/providers/pinpoint/apis/record.js +74 -0
  95. package/dist/cjs/providers/pinpoint/apis/record.js.map +1 -0
  96. package/dist/cjs/providers/pinpoint/index.js +12 -0
  97. package/dist/cjs/providers/pinpoint/index.js.map +1 -0
  98. package/dist/cjs/providers/pinpoint/types/index.js +6 -0
  99. package/dist/cjs/providers/pinpoint/types/index.js.map +1 -0
  100. package/dist/cjs/providers/pinpoint/types/inputs.js +6 -0
  101. package/dist/cjs/providers/pinpoint/types/inputs.js.map +1 -0
  102. package/dist/cjs/providers/pinpoint/types/options.js +6 -0
  103. package/dist/cjs/providers/pinpoint/types/options.js.map +1 -0
  104. package/dist/cjs/providers/pinpoint/utils/index.js +11 -0
  105. package/dist/cjs/providers/pinpoint/utils/index.js.map +1 -0
  106. package/dist/cjs/providers/pinpoint/utils/resolveConfig.js +19 -0
  107. package/dist/cjs/providers/pinpoint/utils/resolveConfig.js.map +1 -0
  108. package/dist/cjs/providers/pinpoint/utils/resolveCredentials.js +18 -0
  109. package/dist/cjs/providers/pinpoint/utils/resolveCredentials.js.map +1 -0
  110. package/dist/cjs/trackers/EventTracker.js +100 -0
  111. package/dist/cjs/trackers/EventTracker.js.map +1 -0
  112. package/dist/cjs/trackers/PageViewTracker.js +112 -0
  113. package/dist/cjs/trackers/PageViewTracker.js.map +1 -0
  114. package/dist/cjs/trackers/SessionTracker.js +69 -0
  115. package/dist/cjs/trackers/SessionTracker.js.map +1 -0
  116. package/dist/cjs/trackers/SessionTracker.native.js +69 -0
  117. package/dist/cjs/trackers/SessionTracker.native.js.map +1 -0
  118. package/dist/cjs/trackers/index.js +13 -0
  119. package/dist/cjs/trackers/index.js.map +1 -0
  120. package/dist/cjs/types/index.js +6 -0
  121. package/dist/cjs/types/index.js.map +1 -0
  122. package/dist/cjs/types/inputs.js +6 -0
  123. package/dist/cjs/types/inputs.js.map +1 -0
  124. package/dist/cjs/types/kinesis.js +6 -0
  125. package/dist/cjs/types/kinesis.js.map +1 -0
  126. package/dist/cjs/types/options.js +6 -0
  127. package/dist/cjs/types/options.js.map +1 -0
  128. package/dist/cjs/types/trackers.js +6 -0
  129. package/dist/cjs/types/trackers.js.map +1 -0
  130. package/dist/cjs/utils/eventBuffer/EventBuffer.js +65 -0
  131. package/dist/cjs/utils/eventBuffer/EventBuffer.js.map +1 -0
  132. package/dist/cjs/utils/eventBuffer/index.js +9 -0
  133. package/dist/cjs/utils/eventBuffer/index.js.map +1 -0
  134. package/dist/cjs/utils/eventBuffer/types.js +6 -0
  135. package/dist/cjs/utils/eventBuffer/types.js.map +1 -0
  136. package/dist/cjs/utils/groupBy.js +14 -0
  137. package/dist/cjs/utils/groupBy.js.map +1 -0
  138. package/dist/cjs/utils/index.js +24 -0
  139. package/dist/cjs/utils/index.js.map +1 -0
  140. package/dist/cjs/utils/resolveCredentials.js +15 -0
  141. package/dist/cjs/utils/resolveCredentials.js.map +1 -0
  142. package/dist/cjs/utils/statusHelpers.js +21 -0
  143. package/dist/cjs/utils/statusHelpers.js.map +1 -0
  144. package/dist/cjs/utils/trackerConfigHelpers.js +17 -0
  145. package/dist/cjs/utils/trackerConfigHelpers.js.map +1 -0
  146. package/dist/cjs/utils/trackerConfigHelpers.native.js +16 -0
  147. package/dist/cjs/utils/trackerConfigHelpers.native.js.map +1 -0
  148. package/dist/cjs/utils/trackerHelpers.js +46 -0
  149. package/dist/cjs/utils/trackerHelpers.js.map +1 -0
  150. package/dist/cjs/utils/userAgent.js +21 -0
  151. package/dist/cjs/utils/userAgent.js.map +1 -0
  152. package/dist/esm/apis/disable.d.ts +8 -0
  153. package/dist/esm/apis/disable.mjs +22 -0
  154. package/dist/esm/apis/disable.mjs.map +1 -0
  155. package/dist/esm/apis/enable.d.ts +7 -0
  156. package/dist/esm/apis/enable.mjs +21 -0
  157. package/dist/esm/apis/enable.mjs.map +1 -0
  158. package/dist/esm/apis/index.d.ts +2 -0
  159. package/dist/esm/apis/index.mjs +3 -0
  160. package/dist/esm/apis/index.mjs.map +1 -0
  161. package/dist/esm/errors/AnalyticsError.d.ts +7 -0
  162. package/dist/esm/errors/AnalyticsError.mjs +19 -0
  163. package/dist/esm/errors/AnalyticsError.mjs.map +1 -0
  164. package/dist/esm/errors/assertValidationError.d.ts +5 -0
  165. package/dist/esm/errors/assertValidationError.mjs +21 -0
  166. package/dist/esm/errors/assertValidationError.mjs.map +1 -0
  167. package/dist/esm/errors/index.d.ts +3 -0
  168. package/dist/esm/errors/index.mjs +4 -0
  169. package/dist/esm/errors/index.mjs.map +1 -0
  170. package/dist/esm/errors/validation.d.ts +12 -0
  171. package/dist/esm/errors/validation.mjs +42 -0
  172. package/dist/esm/errors/validation.mjs.map +1 -0
  173. package/dist/esm/index.d.ts +3 -0
  174. package/dist/esm/index.mjs +9 -0
  175. package/dist/esm/index.mjs.map +1 -0
  176. package/dist/esm/providers/kinesis/apis/flushEvents.d.ts +8 -0
  177. package/dist/esm/providers/kinesis/apis/flushEvents.mjs +43 -0
  178. package/dist/esm/providers/kinesis/apis/flushEvents.mjs.map +1 -0
  179. package/dist/esm/providers/kinesis/apis/index.d.ts +2 -0
  180. package/dist/esm/providers/kinesis/apis/index.mjs +3 -0
  181. package/dist/esm/providers/kinesis/apis/index.mjs.map +1 -0
  182. package/dist/esm/providers/kinesis/apis/record.d.ts +23 -0
  183. package/dist/esm/providers/kinesis/apis/record.mjs +74 -0
  184. package/dist/esm/providers/kinesis/apis/record.mjs.map +1 -0
  185. package/dist/esm/providers/kinesis/index.d.ts +1 -0
  186. package/dist/esm/providers/kinesis/index.mjs +3 -0
  187. package/dist/esm/providers/kinesis/index.mjs.map +1 -0
  188. package/dist/esm/providers/kinesis/types/buffer.d.ts +15 -0
  189. package/dist/esm/providers/kinesis/types/buffer.mjs +2 -0
  190. package/dist/esm/providers/kinesis/types/buffer.mjs.map +1 -0
  191. package/dist/esm/providers/kinesis/types/index.d.ts +2 -0
  192. package/dist/esm/providers/kinesis/types/index.mjs +2 -0
  193. package/dist/esm/providers/kinesis/types/index.mjs.map +1 -0
  194. package/dist/esm/providers/kinesis/types/inputs.d.ts +6 -0
  195. package/dist/esm/providers/kinesis/types/inputs.mjs +2 -0
  196. package/dist/esm/providers/kinesis/types/inputs.mjs.map +1 -0
  197. package/dist/esm/providers/kinesis/utils/constants.d.ts +6 -0
  198. package/dist/esm/providers/kinesis/utils/constants.mjs +11 -0
  199. package/dist/esm/providers/kinesis/utils/constants.mjs.map +1 -0
  200. package/dist/esm/providers/kinesis/utils/getEventBuffer.d.ts +3 -0
  201. package/dist/esm/providers/kinesis/utils/getEventBuffer.mjs +89 -0
  202. package/dist/esm/providers/kinesis/utils/getEventBuffer.mjs.map +1 -0
  203. package/dist/esm/providers/kinesis/utils/resolveConfig.d.ts +7 -0
  204. package/dist/esm/providers/kinesis/utils/resolveConfig.mjs +27 -0
  205. package/dist/esm/providers/kinesis/utils/resolveConfig.mjs.map +1 -0
  206. package/dist/esm/providers/kinesis-firehose/apis/flushEvents.d.ts +8 -0
  207. package/dist/esm/providers/kinesis-firehose/apis/flushEvents.mjs +43 -0
  208. package/dist/esm/providers/kinesis-firehose/apis/flushEvents.mjs.map +1 -0
  209. package/dist/esm/providers/kinesis-firehose/apis/index.d.ts +2 -0
  210. package/dist/esm/providers/kinesis-firehose/apis/index.mjs +3 -0
  211. package/dist/esm/providers/kinesis-firehose/apis/index.mjs.map +1 -0
  212. package/dist/esm/providers/kinesis-firehose/apis/record.d.ts +19 -0
  213. package/dist/esm/providers/kinesis-firehose/apis/record.mjs +68 -0
  214. package/dist/esm/providers/kinesis-firehose/apis/record.mjs.map +1 -0
  215. package/dist/esm/providers/kinesis-firehose/index.d.ts +1 -0
  216. package/dist/esm/providers/kinesis-firehose/index.mjs +3 -0
  217. package/dist/esm/providers/kinesis-firehose/index.mjs.map +1 -0
  218. package/dist/esm/providers/kinesis-firehose/types/buffer.d.ts +15 -0
  219. package/dist/esm/providers/kinesis-firehose/types/buffer.mjs +2 -0
  220. package/dist/esm/providers/kinesis-firehose/types/buffer.mjs.map +1 -0
  221. package/dist/esm/providers/kinesis-firehose/types/index.d.ts +2 -0
  222. package/dist/esm/providers/kinesis-firehose/types/index.mjs +2 -0
  223. package/dist/esm/providers/kinesis-firehose/types/index.mjs.map +1 -0
  224. package/dist/esm/providers/kinesis-firehose/types/inputs.d.ts +5 -0
  225. package/dist/esm/providers/kinesis-firehose/types/inputs.mjs +2 -0
  226. package/dist/esm/providers/kinesis-firehose/types/inputs.mjs.map +1 -0
  227. package/dist/esm/providers/kinesis-firehose/utils/constants.d.ts +6 -0
  228. package/dist/esm/providers/kinesis-firehose/utils/constants.mjs +11 -0
  229. package/dist/esm/providers/kinesis-firehose/utils/constants.mjs.map +1 -0
  230. package/dist/esm/providers/kinesis-firehose/utils/getEventBuffer.d.ts +3 -0
  231. package/dist/esm/providers/kinesis-firehose/utils/getEventBuffer.mjs +87 -0
  232. package/dist/esm/providers/kinesis-firehose/utils/getEventBuffer.mjs.map +1 -0
  233. package/dist/esm/providers/kinesis-firehose/utils/index.d.ts +2 -0
  234. package/dist/esm/providers/kinesis-firehose/utils/index.mjs +3 -0
  235. package/dist/esm/providers/kinesis-firehose/utils/index.mjs.map +1 -0
  236. package/dist/esm/providers/kinesis-firehose/utils/resolveConfig.d.ts +7 -0
  237. package/dist/esm/providers/kinesis-firehose/utils/resolveConfig.mjs +27 -0
  238. package/dist/esm/providers/kinesis-firehose/utils/resolveConfig.mjs.map +1 -0
  239. package/dist/esm/providers/personalize/apis/flushEvents.d.ts +8 -0
  240. package/dist/esm/providers/personalize/apis/flushEvents.mjs +43 -0
  241. package/dist/esm/providers/personalize/apis/flushEvents.mjs.map +1 -0
  242. package/dist/esm/providers/personalize/apis/index.d.ts +2 -0
  243. package/dist/esm/providers/personalize/apis/index.mjs +3 -0
  244. package/dist/esm/providers/personalize/apis/index.mjs.map +1 -0
  245. package/dist/esm/providers/personalize/apis/record.d.ts +27 -0
  246. package/dist/esm/providers/personalize/apis/record.mjs +106 -0
  247. package/dist/esm/providers/personalize/apis/record.mjs.map +1 -0
  248. package/dist/esm/providers/personalize/index.d.ts +1 -0
  249. package/dist/esm/providers/personalize/index.mjs +3 -0
  250. package/dist/esm/providers/personalize/index.mjs.map +1 -0
  251. package/dist/esm/providers/personalize/types/buffer.d.ts +16 -0
  252. package/dist/esm/providers/personalize/types/buffer.mjs +2 -0
  253. package/dist/esm/providers/personalize/types/buffer.mjs.map +1 -0
  254. package/dist/esm/providers/personalize/types/index.d.ts +2 -0
  255. package/dist/esm/providers/personalize/types/index.mjs +2 -0
  256. package/dist/esm/providers/personalize/types/index.mjs.map +1 -0
  257. package/dist/esm/providers/personalize/types/inputs.d.ts +7 -0
  258. package/dist/esm/providers/personalize/types/inputs.mjs +2 -0
  259. package/dist/esm/providers/personalize/types/inputs.mjs.map +1 -0
  260. package/dist/esm/providers/personalize/utils/autoTrackMedia.d.ts +10 -0
  261. package/dist/esm/providers/personalize/utils/autoTrackMedia.mjs +181 -0
  262. package/dist/esm/providers/personalize/utils/autoTrackMedia.mjs.map +1 -0
  263. package/dist/esm/providers/personalize/utils/cachedSession.d.ts +5 -0
  264. package/dist/esm/providers/personalize/utils/cachedSession.mjs +48 -0
  265. package/dist/esm/providers/personalize/utils/cachedSession.mjs.map +1 -0
  266. package/dist/esm/providers/personalize/utils/constants.d.ts +7 -0
  267. package/dist/esm/providers/personalize/utils/constants.mjs +12 -0
  268. package/dist/esm/providers/personalize/utils/constants.mjs.map +1 -0
  269. package/dist/esm/providers/personalize/utils/getEventBuffer.d.ts +3 -0
  270. package/dist/esm/providers/personalize/utils/getEventBuffer.mjs +90 -0
  271. package/dist/esm/providers/personalize/utils/getEventBuffer.mjs.map +1 -0
  272. package/dist/esm/providers/personalize/utils/index.d.ts +5 -0
  273. package/dist/esm/providers/personalize/utils/index.mjs +6 -0
  274. package/dist/esm/providers/personalize/utils/index.mjs.map +1 -0
  275. package/dist/esm/providers/personalize/utils/resolveConfig.d.ts +7 -0
  276. package/dist/esm/providers/personalize/utils/resolveConfig.mjs +28 -0
  277. package/dist/esm/providers/personalize/utils/resolveConfig.mjs.map +1 -0
  278. package/dist/esm/providers/pinpoint/apis/configureAutoTrack.d.ts +17 -0
  279. package/dist/esm/providers/pinpoint/apis/configureAutoTrack.mjs +42 -0
  280. package/dist/esm/providers/pinpoint/apis/configureAutoTrack.mjs.map +1 -0
  281. package/dist/esm/providers/pinpoint/apis/flushEvents.d.ts +10 -0
  282. package/dist/esm/providers/pinpoint/apis/flushEvents.mjs +47 -0
  283. package/dist/esm/providers/pinpoint/apis/flushEvents.mjs.map +1 -0
  284. package/dist/esm/providers/pinpoint/apis/identifyUser.d.ts +49 -0
  285. package/dist/esm/providers/pinpoint/apis/identifyUser.mjs +80 -0
  286. package/dist/esm/providers/pinpoint/apis/identifyUser.mjs.map +1 -0
  287. package/dist/esm/providers/pinpoint/apis/index.d.ts +4 -0
  288. package/dist/esm/providers/pinpoint/apis/index.mjs +5 -0
  289. package/dist/esm/providers/pinpoint/apis/index.mjs.map +1 -0
  290. package/dist/esm/providers/pinpoint/apis/record.d.ts +32 -0
  291. package/dist/esm/providers/pinpoint/apis/record.mjs +79 -0
  292. package/dist/esm/providers/pinpoint/apis/record.mjs.map +1 -0
  293. package/dist/esm/providers/pinpoint/index.d.ts +2 -0
  294. package/dist/esm/providers/pinpoint/index.mjs +5 -0
  295. package/dist/esm/providers/pinpoint/index.mjs.map +1 -0
  296. package/dist/esm/providers/pinpoint/types/index.d.ts +2 -0
  297. package/dist/esm/providers/pinpoint/types/index.mjs +2 -0
  298. package/dist/esm/providers/pinpoint/types/index.mjs.map +1 -0
  299. package/dist/esm/providers/pinpoint/types/inputs.d.ts +15 -0
  300. package/dist/esm/providers/pinpoint/types/inputs.mjs +2 -0
  301. package/dist/esm/providers/pinpoint/types/inputs.mjs.map +1 -0
  302. package/dist/esm/providers/pinpoint/types/options.d.ts +5 -0
  303. package/dist/esm/providers/pinpoint/types/options.mjs +2 -0
  304. package/dist/esm/providers/pinpoint/types/options.mjs.map +1 -0
  305. package/dist/esm/providers/pinpoint/utils/index.d.ts +2 -0
  306. package/dist/esm/providers/pinpoint/utils/index.mjs +3 -0
  307. package/dist/esm/providers/pinpoint/utils/index.mjs.map +1 -0
  308. package/dist/esm/providers/pinpoint/utils/resolveConfig.d.ts +11 -0
  309. package/dist/esm/providers/pinpoint/utils/resolveConfig.mjs +19 -0
  310. package/dist/esm/providers/pinpoint/utils/resolveConfig.mjs.map +1 -0
  311. package/dist/esm/providers/pinpoint/utils/resolveCredentials.d.ts +7 -0
  312. package/dist/esm/providers/pinpoint/utils/resolveCredentials.mjs +18 -0
  313. package/dist/esm/providers/pinpoint/utils/resolveCredentials.mjs.map +1 -0
  314. package/dist/esm/trackers/EventTracker.d.ts +10 -0
  315. package/dist/esm/trackers/EventTracker.mjs +98 -0
  316. package/dist/esm/trackers/EventTracker.mjs.map +1 -0
  317. package/dist/esm/trackers/PageViewTracker.d.ts +18 -0
  318. package/dist/esm/trackers/PageViewTracker.mjs +110 -0
  319. package/dist/esm/trackers/PageViewTracker.mjs.map +1 -0
  320. package/dist/esm/trackers/SessionTracker.d.ts +13 -0
  321. package/dist/esm/trackers/SessionTracker.mjs +67 -0
  322. package/dist/esm/trackers/SessionTracker.mjs.map +1 -0
  323. package/dist/esm/trackers/SessionTracker.native.d.ts +13 -0
  324. package/dist/esm/trackers/SessionTracker.native.mjs +67 -0
  325. package/dist/esm/trackers/SessionTracker.native.mjs.map +1 -0
  326. package/dist/esm/trackers/index.d.ts +3 -0
  327. package/dist/esm/trackers/index.mjs +4 -0
  328. package/dist/esm/trackers/index.mjs.map +1 -0
  329. package/dist/esm/types/index.d.ts +3 -0
  330. package/dist/esm/types/index.mjs +2 -0
  331. package/dist/esm/types/index.mjs.map +1 -0
  332. package/dist/esm/types/inputs.d.ts +35 -0
  333. package/dist/esm/types/inputs.mjs +2 -0
  334. package/dist/esm/types/inputs.mjs.map +1 -0
  335. package/dist/esm/types/kinesis.d.ts +8 -0
  336. package/dist/esm/types/kinesis.mjs +2 -0
  337. package/dist/esm/types/kinesis.mjs.map +1 -0
  338. package/dist/esm/types/options.d.ts +4 -0
  339. package/dist/esm/types/options.mjs +2 -0
  340. package/dist/esm/types/options.mjs.map +1 -0
  341. package/dist/esm/types/trackers.d.ts +22 -0
  342. package/dist/esm/types/trackers.mjs +2 -0
  343. package/dist/esm/types/trackers.mjs.map +1 -0
  344. package/dist/esm/utils/eventBuffer/EventBuffer.d.ts +16 -0
  345. package/dist/esm/utils/eventBuffer/EventBuffer.mjs +63 -0
  346. package/dist/esm/utils/eventBuffer/EventBuffer.mjs.map +1 -0
  347. package/dist/esm/utils/eventBuffer/index.d.ts +2 -0
  348. package/dist/esm/utils/eventBuffer/index.mjs +2 -0
  349. package/dist/esm/utils/eventBuffer/index.mjs.map +1 -0
  350. package/dist/esm/utils/eventBuffer/types.d.ts +6 -0
  351. package/dist/esm/utils/eventBuffer/types.mjs +2 -0
  352. package/dist/esm/utils/eventBuffer/types.mjs.map +1 -0
  353. package/dist/esm/utils/groupBy.d.ts +1 -0
  354. package/dist/esm/utils/groupBy.mjs +11 -0
  355. package/dist/esm/utils/groupBy.mjs.map +1 -0
  356. package/dist/esm/utils/index.d.ts +7 -0
  357. package/dist/esm/utils/index.mjs +8 -0
  358. package/dist/esm/utils/index.mjs.map +1 -0
  359. package/dist/esm/utils/resolveCredentials.d.ts +4 -0
  360. package/dist/esm/utils/resolveCredentials.mjs +15 -0
  361. package/dist/esm/utils/resolveCredentials.mjs.map +1 -0
  362. package/dist/esm/utils/statusHelpers.d.ts +6 -0
  363. package/dist/esm/utils/statusHelpers.mjs +16 -0
  364. package/dist/esm/utils/statusHelpers.mjs.map +1 -0
  365. package/dist/esm/utils/trackerConfigHelpers.d.ts +5 -0
  366. package/dist/esm/utils/trackerConfigHelpers.mjs +17 -0
  367. package/dist/esm/utils/trackerConfigHelpers.mjs.map +1 -0
  368. package/dist/esm/utils/trackerConfigHelpers.native.d.ts +5 -0
  369. package/dist/esm/utils/trackerConfigHelpers.native.mjs +16 -0
  370. package/dist/esm/utils/trackerConfigHelpers.native.mjs.map +1 -0
  371. package/dist/esm/utils/trackerHelpers.d.ts +9 -0
  372. package/dist/esm/utils/trackerHelpers.mjs +46 -0
  373. package/dist/esm/utils/trackerHelpers.mjs.map +1 -0
  374. package/dist/esm/utils/userAgent.d.ts +4 -0
  375. package/dist/esm/utils/userAgent.mjs +19 -0
  376. package/dist/esm/utils/userAgent.mjs.map +1 -0
  377. package/kinesis/package.json +8 -0
  378. package/kinesis-firehose/package.json +8 -0
  379. package/package.json +110 -0
  380. package/personalize/package.json +8 -0
  381. package/pinpoint/package.json +8 -0
  382. package/src/apis/disable.ts +13 -0
  383. package/src/apis/enable.ts +12 -0
  384. package/src/apis/index.ts +5 -0
  385. package/src/errors/AnalyticsError.ts +21 -0
  386. package/src/errors/assertValidationError.ts +25 -0
  387. package/src/errors/index.ts +6 -0
  388. package/src/errors/validation.ts +43 -0
  389. package/src/index.ts +14 -0
  390. package/src/providers/kinesis/apis/flushEvents.ts +43 -0
  391. package/src/providers/kinesis/apis/index.ts +5 -0
  392. package/src/providers/kinesis/apis/record.ts +82 -0
  393. package/src/providers/kinesis/index.ts +4 -0
  394. package/src/providers/kinesis/types/buffer.ts +21 -0
  395. package/src/providers/kinesis/types/index.ts +5 -0
  396. package/src/providers/kinesis/types/inputs.ts +10 -0
  397. package/src/providers/kinesis/utils/constants.ts +9 -0
  398. package/src/providers/kinesis/utils/getEventBuffer.ts +130 -0
  399. package/src/providers/kinesis/utils/resolveConfig.ts +39 -0
  400. package/src/providers/kinesis-firehose/apis/flushEvents.ts +42 -0
  401. package/src/providers/kinesis-firehose/apis/index.ts +5 -0
  402. package/src/providers/kinesis-firehose/apis/record.ts +71 -0
  403. package/src/providers/kinesis-firehose/index.ts +4 -0
  404. package/src/providers/kinesis-firehose/types/buffer.ts +21 -0
  405. package/src/providers/kinesis-firehose/types/index.ts +9 -0
  406. package/src/providers/kinesis-firehose/types/inputs.ts +9 -0
  407. package/src/providers/kinesis-firehose/utils/constants.ts +9 -0
  408. package/src/providers/kinesis-firehose/utils/getEventBuffer.ts +138 -0
  409. package/src/providers/kinesis-firehose/utils/index.ts +5 -0
  410. package/src/providers/kinesis-firehose/utils/resolveConfig.ts +39 -0
  411. package/src/providers/personalize/apis/flushEvents.ts +40 -0
  412. package/src/providers/personalize/apis/index.ts +5 -0
  413. package/src/providers/personalize/apis/record.ts +130 -0
  414. package/src/providers/personalize/index.ts +4 -0
  415. package/src/providers/personalize/types/buffer.ts +23 -0
  416. package/src/providers/personalize/types/index.ts +5 -0
  417. package/src/providers/personalize/types/inputs.ts +11 -0
  418. package/src/providers/personalize/utils/autoTrackMedia.ts +240 -0
  419. package/src/providers/personalize/utils/cachedSession.ts +68 -0
  420. package/src/providers/personalize/utils/constants.ts +12 -0
  421. package/src/providers/personalize/utils/getEventBuffer.ts +135 -0
  422. package/src/providers/personalize/utils/index.ts +11 -0
  423. package/src/providers/personalize/utils/resolveConfig.ts +46 -0
  424. package/src/providers/pinpoint/apis/configureAutoTrack.ts +54 -0
  425. package/src/providers/pinpoint/apis/flushEvents.ts +42 -0
  426. package/src/providers/pinpoint/apis/identifyUser.ts +81 -0
  427. package/src/providers/pinpoint/apis/index.ts +7 -0
  428. package/src/providers/pinpoint/apis/record.ts +92 -0
  429. package/src/providers/pinpoint/index.ts +9 -0
  430. package/src/providers/pinpoint/types/index.ts +9 -0
  431. package/src/providers/pinpoint/types/inputs.ts +26 -0
  432. package/src/providers/pinpoint/types/options.ts +12 -0
  433. package/src/providers/pinpoint/utils/index.ts +5 -0
  434. package/src/providers/pinpoint/utils/resolveConfig.ts +21 -0
  435. package/src/providers/pinpoint/utils/resolveCredentials.ts +22 -0
  436. package/src/trackers/EventTracker.ts +136 -0
  437. package/src/trackers/PageViewTracker.ts +155 -0
  438. package/src/trackers/SessionTracker.native.ts +106 -0
  439. package/src/trackers/SessionTracker.ts +106 -0
  440. package/src/trackers/index.ts +6 -0
  441. package/src/types/index.ts +11 -0
  442. package/src/types/inputs.ts +53 -0
  443. package/src/types/kinesis.ts +13 -0
  444. package/src/types/options.ts +7 -0
  445. package/src/types/trackers.ts +35 -0
  446. package/src/utils/eventBuffer/EventBuffer.ts +85 -0
  447. package/src/utils/eventBuffer/index.ts +5 -0
  448. package/src/utils/eventBuffer/types.ts +10 -0
  449. package/src/utils/groupBy.ts +16 -0
  450. package/src/utils/index.ts +21 -0
  451. package/src/utils/resolveCredentials.ts +16 -0
  452. package/src/utils/statusHelpers.ts +17 -0
  453. package/src/utils/trackerConfigHelpers.native.ts +18 -0
  454. package/src/utils/trackerConfigHelpers.ts +19 -0
  455. package/src/utils/trackerHelpers.ts +56 -0
  456. package/src/utils/userAgent.ts +23 -0
@@ -0,0 +1,130 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { AnalyticsAction } from '@aws-amplify/core/internals/utils';
5
+ import { ConsoleLogger } from '@aws-amplify/core';
6
+
7
+ import { RecordInput } from '../types';
8
+ import {
9
+ autoTrackMedia,
10
+ getEventBuffer,
11
+ resolveCachedSession,
12
+ resolveConfig,
13
+ updateCachedSession,
14
+ } from '../utils';
15
+ import {
16
+ getAnalyticsUserAgentString,
17
+ isAnalyticsEnabled,
18
+ resolveCredentials,
19
+ } from '../../../utils';
20
+ import {
21
+ IDENTIFY_EVENT_TYPE,
22
+ MEDIA_AUTO_TRACK_EVENT_TYPE,
23
+ } from '../utils/constants';
24
+ import { AnalyticsValidationErrorCode } from '../../../errors';
25
+
26
+ const logger = new ConsoleLogger('Personalize');
27
+
28
+ /**
29
+ * Record one analytic event and send it to Personalize. Events will be buffered and periodically sent to Amazon
30
+ * Personalize.
31
+ *
32
+ * For more examples, you can refer to {@link https://docs.amplify.aws/javascript/build-a-backend/more-features/analytics/personalize-recommendations/#working-with-the-api the API usage guidance.}
33
+ *
34
+ * @param input The input object used to construct the request.
35
+ *
36
+ * @throws validation: {@link AnalyticsValidationErrorCode} - Thrown when the provided parameters or library
37
+ * configuration is incorrect.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * // Record an `Identify` event to Personalize.
42
+ * record({
43
+ * eventType: "Identify",
44
+ * properties: {
45
+ * userId: "<USER_ID>"
46
+ * }
47
+ * });
48
+ * ```
49
+ * @param input - The event to record.
50
+ *
51
+ * @returns void
52
+ */
53
+ export const record = ({
54
+ userId,
55
+ eventId,
56
+ eventType,
57
+ properties,
58
+ }: RecordInput): void => {
59
+ if (!isAnalyticsEnabled()) {
60
+ logger.debug('Analytics is disabled, event will not be recorded.');
61
+
62
+ return;
63
+ }
64
+
65
+ const { region, trackingId, bufferSize, flushSize, flushInterval } =
66
+ resolveConfig();
67
+ resolveCredentials()
68
+ .then(async ({ credentials, identityId }) => {
69
+ const timestamp = Date.now();
70
+ const { sessionId: cachedSessionId, userId: cachedUserId } =
71
+ await resolveCachedSession();
72
+ if (eventType === IDENTIFY_EVENT_TYPE) {
73
+ updateCachedSession(
74
+ typeof properties.userId === 'string' ? properties.userId : '',
75
+ cachedSessionId,
76
+ cachedUserId,
77
+ );
78
+ } else if (userId) {
79
+ updateCachedSession(userId, cachedSessionId, cachedUserId);
80
+ }
81
+
82
+ const { sessionId: updatedSessionId, userId: updatedUserId } =
83
+ await resolveCachedSession();
84
+
85
+ const eventBuffer = getEventBuffer({
86
+ region,
87
+ flushSize,
88
+ flushInterval,
89
+ bufferSize,
90
+ credentials,
91
+ identityId,
92
+ userAgentValue: getAnalyticsUserAgentString(AnalyticsAction.Record),
93
+ });
94
+
95
+ if (eventType === MEDIA_AUTO_TRACK_EVENT_TYPE) {
96
+ autoTrackMedia(
97
+ {
98
+ trackingId,
99
+ sessionId: updatedSessionId,
100
+ userId: updatedUserId,
101
+ event: {
102
+ eventId,
103
+ eventType,
104
+ properties,
105
+ },
106
+ },
107
+ eventBuffer,
108
+ );
109
+ } else {
110
+ eventBuffer.append({
111
+ trackingId,
112
+ sessionId: updatedSessionId,
113
+ userId: updatedUserId,
114
+ event: {
115
+ eventId,
116
+ eventType,
117
+ properties,
118
+ },
119
+ timestamp,
120
+ });
121
+ }
122
+
123
+ if (eventBuffer.length >= bufferSize) {
124
+ eventBuffer.flushAll();
125
+ }
126
+ })
127
+ .catch(e => {
128
+ logger.warn('Failed to record event.', e);
129
+ });
130
+ };
@@ -0,0 +1,4 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { record, flushEvents } from './apis';
@@ -0,0 +1,23 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { AWSCredentials } from '@aws-amplify/core/internals/utils';
5
+
6
+ import { EventBufferConfig } from '../../../utils';
7
+
8
+ import { PersonalizeEvent } from './';
9
+
10
+ export interface PersonalizeBufferEvent {
11
+ trackingId: string;
12
+ sessionId?: string;
13
+ userId?: string;
14
+ event: PersonalizeEvent;
15
+ timestamp: number;
16
+ }
17
+
18
+ export type PersonalizeBufferConfig = EventBufferConfig & {
19
+ region: string;
20
+ credentials: AWSCredentials;
21
+ identityId?: string;
22
+ userAgentValue?: string;
23
+ };
@@ -0,0 +1,5 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { RecordInput, PersonalizeEvent } from './inputs';
5
+ export { PersonalizeBufferEvent, PersonalizeBufferConfig } from './buffer';
@@ -0,0 +1,11 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export interface PersonalizeEvent {
5
+ userId?: string;
6
+ eventId?: string;
7
+ eventType: string;
8
+ properties: Record<string, unknown>;
9
+ }
10
+
11
+ export type RecordInput = PersonalizeEvent;
@@ -0,0 +1,240 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { isBrowser } from '@aws-amplify/core/internals/utils';
5
+ import { ConsoleLogger } from '@aws-amplify/core';
6
+
7
+ import { EventBuffer } from '../../../utils';
8
+ import { PersonalizeBufferEvent, PersonalizeEvent } from '../types';
9
+
10
+ enum HTML5_MEDIA_EVENT {
11
+ 'PLAY' = 'play',
12
+ 'PAUSE' = 'pause',
13
+ 'ENDED' = 'Ended',
14
+ }
15
+
16
+ enum MEDIA_TYPE {
17
+ 'IFRAME' = 'IFRAME',
18
+ 'VIDEO' = 'VIDEO',
19
+ 'AUDIO' = 'AUDIO',
20
+ }
21
+
22
+ enum EVENT_TYPE {
23
+ 'PLAY' = 'Play',
24
+ 'ENDED' = 'Ended',
25
+ 'PAUSE' = 'Pause',
26
+ 'TIME_WATCHED' = 'TimeWatched',
27
+ }
28
+
29
+ type IRecordEvent = (
30
+ eventType: string,
31
+ properties: Record<string, unknown>,
32
+ ) => void;
33
+
34
+ interface MediaAutoTrackConfig {
35
+ trackingId: string;
36
+ sessionId: string;
37
+ userId?: string;
38
+ event: PersonalizeEvent;
39
+ }
40
+
41
+ const logger = new ConsoleLogger('MediaAutoTrack');
42
+
43
+ const startIframeAutoTracking = (
44
+ element: HTMLElement,
45
+ recordEvent: IRecordEvent,
46
+ ) => {
47
+ let isPlaying = false;
48
+ let player: any;
49
+ const mediaProperties = (): Record<string, unknown> => {
50
+ const duration = Number(parseFloat(player.getDuration()).toFixed(4));
51
+ const currentTime = Number(parseFloat(player.getCurrentTime()).toFixed(4));
52
+
53
+ return {
54
+ duration,
55
+ eventValue: Number((currentTime / duration).toFixed(4)),
56
+ };
57
+ };
58
+
59
+ const scriptElement = document.createElement('script');
60
+ scriptElement.type = 'text/javascript';
61
+ scriptElement.src = 'https://www.youtube.com/iframe_api';
62
+ document.body.append(scriptElement);
63
+
64
+ const timer = setInterval(() => {
65
+ if (isPlaying && player) {
66
+ recordEvent(EVENT_TYPE.TIME_WATCHED, mediaProperties());
67
+ }
68
+ }, 3_000);
69
+
70
+ element.addEventListener('unload', () => {
71
+ clearInterval(timer);
72
+ });
73
+
74
+ (window as any).onYouTubeIframeAPIReady = () => {
75
+ delete (window as any).onYouTubeIframeAPIReady;
76
+
77
+ player = new (window as any).YT.Player(element.id, {
78
+ events: {
79
+ onStateChange: (event: any) => {
80
+ const iframeEventMapping: Record<number, EVENT_TYPE> = {
81
+ 0: EVENT_TYPE.ENDED,
82
+ 1: EVENT_TYPE.PLAY,
83
+ 2: EVENT_TYPE.PAUSE,
84
+ };
85
+
86
+ const eventType = iframeEventMapping[event.data];
87
+ switch (eventType) {
88
+ case EVENT_TYPE.ENDED:
89
+ case EVENT_TYPE.PAUSE:
90
+ isPlaying = false;
91
+ break;
92
+ case EVENT_TYPE.PLAY:
93
+ isPlaying = true;
94
+ break;
95
+ }
96
+
97
+ if (eventType) {
98
+ recordEvent(eventType, mediaProperties());
99
+ }
100
+ },
101
+ },
102
+ });
103
+ };
104
+ };
105
+
106
+ const startHTMLMediaAutoTracking = (
107
+ element: HTMLMediaElement,
108
+ recordEvent: IRecordEvent,
109
+ ) => {
110
+ let isPlaying = false;
111
+ const mediaProperties = (): Record<string, unknown> => ({
112
+ duration: element.duration,
113
+ eventValue: Number((element.currentTime / element.duration).toFixed(4)),
114
+ });
115
+
116
+ const timer = setInterval(() => {
117
+ if (isPlaying) {
118
+ recordEvent(EVENT_TYPE.TIME_WATCHED, mediaProperties());
119
+ }
120
+ }, 3_000);
121
+
122
+ element.addEventListener('unload', () => {
123
+ clearInterval(timer);
124
+ });
125
+
126
+ element.addEventListener(HTML5_MEDIA_EVENT.PLAY, () => {
127
+ isPlaying = true;
128
+ recordEvent(EVENT_TYPE.PLAY, mediaProperties());
129
+ });
130
+
131
+ element.addEventListener(HTML5_MEDIA_EVENT.PAUSE, () => {
132
+ isPlaying = false;
133
+ recordEvent(EVENT_TYPE.PAUSE, mediaProperties());
134
+ });
135
+
136
+ element.addEventListener(HTML5_MEDIA_EVENT.ENDED, () => {
137
+ isPlaying = false;
138
+ recordEvent(EVENT_TYPE.ENDED, mediaProperties());
139
+ });
140
+ };
141
+
142
+ const checkElementLoaded = (interval: number, maxTries: number) => {
143
+ let retryCount = 0;
144
+ const wait = () => new Promise(resolve => setTimeout(resolve, interval));
145
+ const check = async (elementId: string): Promise<boolean> => {
146
+ if (retryCount >= maxTries) {
147
+ return false;
148
+ }
149
+
150
+ const domElement = document.getElementById(elementId);
151
+ if (domElement && domElement.clientHeight) {
152
+ return true;
153
+ } else {
154
+ retryCount += 1;
155
+ await wait();
156
+
157
+ return check(elementId);
158
+ }
159
+ };
160
+
161
+ return check;
162
+ };
163
+
164
+ const recordEvent =
165
+ (
166
+ config: MediaAutoTrackConfig,
167
+ eventBuffer: EventBuffer<PersonalizeBufferEvent>,
168
+ ): IRecordEvent =>
169
+ (eventType: string, properties: Record<string, unknown>) => {
170
+ // override eventType and merge properties
171
+ eventBuffer.append({
172
+ ...config,
173
+ event: {
174
+ ...config.event,
175
+ eventType,
176
+ properties: {
177
+ ...config.event.properties,
178
+ ...properties,
179
+ },
180
+ },
181
+ timestamp: Date.now(),
182
+ });
183
+ };
184
+
185
+ export const autoTrackMedia = async (
186
+ config: MediaAutoTrackConfig,
187
+ eventBuffer: EventBuffer<PersonalizeBufferEvent>,
188
+ ) => {
189
+ const { eventType, properties } = config.event;
190
+ const { domElementId, ...otherProperties } = properties;
191
+ if (!isBrowser()) {
192
+ logger.debug(`${eventType} only for browser`);
193
+
194
+ return;
195
+ }
196
+
197
+ if (typeof domElementId === 'string' && !domElementId) {
198
+ logger.debug(
199
+ "Missing domElementId field in 'properties' for MediaAutoTrack event type.",
200
+ );
201
+
202
+ return;
203
+ }
204
+
205
+ const elementId = domElementId as string;
206
+ const isElementLoaded = await checkElementLoaded(500, 5)(elementId);
207
+ if (isElementLoaded) {
208
+ const autoTrackConfigWithoutDomElementId = {
209
+ ...config,
210
+ event: {
211
+ ...config.event,
212
+ properties: otherProperties,
213
+ },
214
+ };
215
+
216
+ const element = document.getElementById(elementId);
217
+ switch (element?.tagName) {
218
+ case MEDIA_TYPE.IFRAME:
219
+ startIframeAutoTracking(
220
+ element,
221
+ recordEvent(autoTrackConfigWithoutDomElementId, eventBuffer),
222
+ );
223
+ break;
224
+ case MEDIA_TYPE.VIDEO:
225
+ case MEDIA_TYPE.AUDIO:
226
+ if (element instanceof HTMLMediaElement) {
227
+ startHTMLMediaAutoTracking(
228
+ element,
229
+ recordEvent(autoTrackConfigWithoutDomElementId, eventBuffer),
230
+ );
231
+ }
232
+ break;
233
+ default:
234
+ logger.debug(`Unsupported DOM element tag: ${element?.tagName}`);
235
+ break;
236
+ }
237
+ } else {
238
+ logger.debug('Cannot find the media element.');
239
+ }
240
+ };
@@ -0,0 +1,68 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { Cache } from '@aws-amplify/core';
5
+ import { amplifyUuid, isBrowser } from '@aws-amplify/core/internals/utils';
6
+
7
+ const PERSONALIZE_CACHE_USERID = '_awsct_uid';
8
+ const PERSONALIZE_CACHE_SESSIONID = '_awsct_sid';
9
+ const DEFAULT_CACHE_PREFIX = 'personalize';
10
+ const DELIMITER = '.';
11
+ const CACHE_EXPIRY_IN_DAYS = 7;
12
+
13
+ const normalize = (key: string): string =>
14
+ [key, isBrowser() ? window.location.host : DEFAULT_CACHE_PREFIX].join(
15
+ DELIMITER,
16
+ );
17
+
18
+ const getCache = (key: string) => Cache.getItem(normalize(key));
19
+
20
+ const setCache = (key: string, value: unknown) => {
21
+ const expiredAt = new Date(
22
+ Date.now() + 3_600_000 * 24 * CACHE_EXPIRY_IN_DAYS,
23
+ );
24
+ Cache.setItem(normalize(key), value, {
25
+ expires: expiredAt.getTime(),
26
+ });
27
+ };
28
+
29
+ export const resolveCachedSession = async () => {
30
+ let sessionId: string | undefined = await getCache(
31
+ PERSONALIZE_CACHE_SESSIONID,
32
+ );
33
+ if (!sessionId) {
34
+ sessionId = amplifyUuid();
35
+ setCache(PERSONALIZE_CACHE_SESSIONID, sessionId);
36
+ }
37
+
38
+ const userId: string | undefined = await getCache(PERSONALIZE_CACHE_USERID);
39
+
40
+ return {
41
+ sessionId,
42
+ userId,
43
+ };
44
+ };
45
+
46
+ export const updateCachedSession = (
47
+ newUserId?: string,
48
+ currentSessionId?: string,
49
+ currentUserId?: string,
50
+ ) => {
51
+ const isNoCachedSession = !currentSessionId;
52
+ const isSignOutCase = !newUserId && !currentUserId;
53
+ const isSwitchUserCase =
54
+ !!newUserId && !!currentUserId && newUserId !== currentUserId;
55
+
56
+ const isRequireNewSession =
57
+ isNoCachedSession || isSignOutCase || isSwitchUserCase;
58
+ const isRequireUpdateSession =
59
+ !!currentSessionId && !currentUserId && !!newUserId;
60
+
61
+ if (isRequireNewSession) {
62
+ const newSessionId = amplifyUuid();
63
+ setCache(PERSONALIZE_CACHE_SESSIONID, newSessionId);
64
+ setCache(PERSONALIZE_CACHE_USERID, newUserId);
65
+ } else if (isRequireUpdateSession) {
66
+ setCache(PERSONALIZE_CACHE_USERID, newUserId);
67
+ }
68
+ };
@@ -0,0 +1,12 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const DEFAULT_PERSONALIZE_CONFIG = {
5
+ flushSize: 5,
6
+ flushInterval: 5_000,
7
+ };
8
+
9
+ export const PERSONALIZE_FLUSH_SIZE_MAX = 10;
10
+
11
+ export const IDENTIFY_EVENT_TYPE = 'Identify';
12
+ export const MEDIA_AUTO_TRACK_EVENT_TYPE = 'MediaAutoTrack';
@@ -0,0 +1,135 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import {
5
+ AWSCredentials,
6
+ haveCredentialsChanged,
7
+ } from '@aws-amplify/core/internals/utils';
8
+ import {
9
+ PersonalizeEventsClient,
10
+ PutEventsCommand,
11
+ } from '@aws-sdk/client-personalize-events';
12
+
13
+ import { EventBuffer, IAnalyticsClient, groupBy } from '../../../utils';
14
+ import { PersonalizeBufferConfig, PersonalizeBufferEvent } from '../types';
15
+
16
+ /**
17
+ * These Records hold cached event buffers and AWS clients.
18
+ * The hash key is determined by the region and session,
19
+ * consisting of a combined value comprising [region, sessionToken, identityId].
20
+ *
21
+ * Only one active session should exist at any given moment.
22
+ * When a new session is initiated, the previous ones should be released.
23
+ * */
24
+ const eventBufferMap: Record<string, EventBuffer<PersonalizeBufferEvent>> = {};
25
+ const cachedClients: Record<string, [PersonalizeEventsClient, AWSCredentials]> =
26
+ {};
27
+
28
+ const DELIMITER = '#';
29
+
30
+ const createPutEventsCommand = (
31
+ ids: string,
32
+ events: PersonalizeBufferEvent[],
33
+ ): PutEventsCommand => {
34
+ const [trackingId, sessionId, userId] = ids.split(DELIMITER);
35
+
36
+ return new PutEventsCommand({
37
+ trackingId,
38
+ sessionId,
39
+ userId,
40
+ eventList: events.map(event => ({
41
+ eventId: event.event.eventId,
42
+ eventType: event.event.eventType,
43
+ properties: JSON.stringify(event.event.properties),
44
+ sentAt: new Date(event.timestamp),
45
+ })),
46
+ });
47
+ };
48
+
49
+ const submitEvents = async (
50
+ events: PersonalizeBufferEvent[],
51
+ client: PersonalizeEventsClient,
52
+ ): Promise<PersonalizeBufferEvent[]> => {
53
+ const groupedByIds = Object.entries(
54
+ groupBy(
55
+ event =>
56
+ [event.trackingId, event.sessionId, event.userId]
57
+ .filter(id => !!id)
58
+ .join(DELIMITER),
59
+ events,
60
+ ),
61
+ );
62
+
63
+ const requests = groupedByIds
64
+ .map(([ids, groupedEvents]) => createPutEventsCommand(ids, groupedEvents))
65
+ .map(command => client.send(command));
66
+
67
+ await Promise.allSettled(requests);
68
+
69
+ return Promise.resolve([]);
70
+ };
71
+
72
+ export const getEventBuffer = ({
73
+ region,
74
+ flushSize,
75
+ flushInterval,
76
+ bufferSize,
77
+ credentials,
78
+ identityId,
79
+ userAgentValue,
80
+ }: PersonalizeBufferConfig): EventBuffer<PersonalizeBufferEvent> => {
81
+ const sessionIdentityKey = [region, identityId].filter(x => !!x).join('-');
82
+ const [cachedClient, cachedCredentials] =
83
+ cachedClients[sessionIdentityKey] ?? [];
84
+ let credentialsHaveChanged = false;
85
+
86
+ // Check if credentials have changed for the cached client
87
+ if (cachedClient) {
88
+ credentialsHaveChanged = haveCredentialsChanged(
89
+ cachedCredentials,
90
+ credentials,
91
+ );
92
+ }
93
+
94
+ if (!eventBufferMap[sessionIdentityKey] || credentialsHaveChanged) {
95
+ const getClient = (): IAnalyticsClient<PersonalizeBufferEvent> => {
96
+ if (!cachedClient || credentialsHaveChanged) {
97
+ cachedClients[sessionIdentityKey] = [
98
+ new PersonalizeEventsClient({
99
+ region,
100
+ credentials,
101
+ customUserAgent: userAgentValue,
102
+ }),
103
+ credentials,
104
+ ];
105
+ }
106
+
107
+ const [personalizeClient] = cachedClients[sessionIdentityKey];
108
+
109
+ return events => submitEvents(events, personalizeClient);
110
+ };
111
+
112
+ eventBufferMap[sessionIdentityKey] =
113
+ new EventBuffer<PersonalizeBufferEvent>(
114
+ {
115
+ bufferSize,
116
+ flushSize,
117
+ flushInterval,
118
+ },
119
+ getClient,
120
+ );
121
+
122
+ const releaseSessionKeys = Object.keys(eventBufferMap).filter(
123
+ key => key !== sessionIdentityKey,
124
+ );
125
+ for (const releaseSessionKey of releaseSessionKeys) {
126
+ eventBufferMap[releaseSessionKey].flushAll().finally(() => {
127
+ eventBufferMap[releaseSessionKey].release();
128
+ delete eventBufferMap[releaseSessionKey];
129
+ delete cachedClients[releaseSessionKey];
130
+ });
131
+ }
132
+ }
133
+
134
+ return eventBufferMap[sessionIdentityKey];
135
+ };
@@ -0,0 +1,11 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { getEventBuffer } from './getEventBuffer';
5
+ export { resolveConfig } from './resolveConfig';
6
+ export { autoTrackMedia } from './autoTrackMedia';
7
+ export { resolveCachedSession, updateCachedSession } from './cachedSession';
8
+ export {
9
+ DEFAULT_PERSONALIZE_CONFIG,
10
+ PERSONALIZE_FLUSH_SIZE_MAX,
11
+ } from './constants';
@@ -0,0 +1,46 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { Amplify } from '@aws-amplify/core';
5
+
6
+ import {
7
+ AnalyticsValidationErrorCode,
8
+ assertValidationError,
9
+ } from '../../../errors';
10
+
11
+ import {
12
+ DEFAULT_PERSONALIZE_CONFIG,
13
+ PERSONALIZE_FLUSH_SIZE_MAX,
14
+ } from './constants';
15
+
16
+ export const resolveConfig = () => {
17
+ const config = Amplify.getConfig().Analytics?.Personalize;
18
+ const {
19
+ region,
20
+ trackingId,
21
+ flushSize = DEFAULT_PERSONALIZE_CONFIG.flushSize,
22
+ flushInterval = DEFAULT_PERSONALIZE_CONFIG.flushInterval,
23
+ } = {
24
+ ...DEFAULT_PERSONALIZE_CONFIG,
25
+ ...config,
26
+ };
27
+
28
+ assertValidationError(!!region, AnalyticsValidationErrorCode.NoRegion);
29
+ assertValidationError(
30
+ !!trackingId,
31
+ AnalyticsValidationErrorCode.NoTrackingId,
32
+ );
33
+ assertValidationError(
34
+ flushSize <= PERSONALIZE_FLUSH_SIZE_MAX,
35
+ AnalyticsValidationErrorCode.InvalidFlushSize,
36
+ `FlushSize for Personalize should be less or equal than ${PERSONALIZE_FLUSH_SIZE_MAX}`,
37
+ );
38
+
39
+ return {
40
+ region,
41
+ trackingId,
42
+ bufferSize: flushSize + 1,
43
+ flushSize,
44
+ flushInterval,
45
+ };
46
+ };