@24i/bigscreen-sdk 1.1.0 → 2.1.1-alpha.2133

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 (256) hide show
  1. package/README.md +1 -1
  2. package/package.json +34 -53
  3. package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
  4. package/packages/async-image/src/AsyncImage.tsx +10 -15
  5. package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
  6. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +0 -11
  7. package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
  8. package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +0 -15
  9. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +1 -2
  10. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +3 -34
  11. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -4
  12. package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -4
  13. package/packages/device/src/getKeyDigit.ts +2 -2
  14. package/packages/device/src/resolver/resolver.ts +5 -18
  15. package/packages/digital-clock/src/DigitalClock.tsx +4 -15
  16. package/packages/driver-androidtv/src/DeviceAndroidTV.ts +9 -54
  17. package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +5 -29
  18. package/packages/driver-androidtv/src/keymap.ts +0 -18
  19. package/packages/driver-androidtv/src/types.ts +16 -102
  20. package/packages/driver-base/src/DeviceBase.ts +2 -61
  21. package/packages/driver-base/src/KeyMap/Key.ts +1 -8
  22. package/packages/driver-base/src/KeyMap/KeyMap.ts +0 -4
  23. package/packages/driver-base/src/KeyMap/interface.ts +0 -1
  24. package/packages/driver-base/src/KeyMap/overrideValues.ts +1 -2
  25. package/packages/driver-base/src/__mocks__/keyMap.ts +0 -1
  26. package/packages/driver-base/src/types/DeviceEvent.ts +0 -2
  27. package/packages/driver-base/src/types/KeycodeKeyMap.ts +0 -1
  28. package/packages/driver-browser/src/keymap.ts +0 -8
  29. package/packages/driver-entone/src/keymap.ts +0 -1
  30. package/packages/driver-tizen/src/TizenKeys.ts +0 -2
  31. package/packages/driver-vidaa/src/DeviceVidaa.ts +2 -3
  32. package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
  33. package/packages/driver-vidaa/src/keymap.ts +0 -2
  34. package/packages/driver-webos/src/DeviceWebos.ts +0 -8
  35. package/packages/driver-webos/src/keymap.ts +1 -2
  36. package/packages/driver-xbox/src/keymap.ts +1 -1
  37. package/packages/epg/README.md +1 -3
  38. package/packages/epg/src/v2/Cell.tsx +2 -16
  39. package/packages/epg/src/v2/DataManager.ts +41 -112
  40. package/packages/epg/src/v2/DatePicker.tsx +3 -9
  41. package/packages/epg/src/v2/DateToast/DateToast.tsx +9 -12
  42. package/packages/epg/src/v2/Day.tsx +3 -6
  43. package/packages/epg/src/v2/Epg.tsx +5 -5
  44. package/packages/epg/src/v2/MockGenerator/generator.ts +2 -3
  45. package/packages/epg/src/v2/ProgramInfo/utils.ts +3 -4
  46. package/packages/epg/src/v2/Row.tsx +1 -3
  47. package/packages/epg/src/v2/TimelineSection.tsx +1 -4
  48. package/packages/epg/src/v2/basic/CellsManager.tsx +2 -7
  49. package/packages/epg/src/v2/basic/RowsManager.tsx +1 -3
  50. package/packages/epg/src/v2/interface.ts +0 -13
  51. package/packages/events-manager/src/EventsManager.ts +56 -1
  52. package/packages/focus/README.md +0 -33
  53. package/packages/focus/src/IFocusable.ts +0 -1
  54. package/packages/focus/src/Layout/Base.tsx +6 -41
  55. package/packages/focus/src/Layout/Matrix.tsx +19 -51
  56. package/packages/focus/src/Layout/__test__/Base.spec.ts +180 -0
  57. package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +94 -0
  58. package/packages/focus/src/Layout/__test__/Matrix.spec.ts +261 -0
  59. package/packages/focus/src/Layout/__test__/Vertical.spec.ts +46 -0
  60. package/packages/focus/src/Layout/__test__/isRtl.spec.ts +23 -0
  61. package/packages/focus/src/Layout/__test__/shared.ts +19 -0
  62. package/packages/focus/src/focusFirstExisting.ts +1 -7
  63. package/packages/focus/src/index.ts +1 -2
  64. package/packages/gallup/src/Gallup.ts +3 -3
  65. package/packages/grid/src/Base/Base.tsx +10 -15
  66. package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +2 -4
  67. package/packages/icon/src/Icon.tsx +5 -27
  68. package/packages/input/README.md +1 -4
  69. package/packages/input/src/Input.tsx +29 -65
  70. package/packages/input/src/handleOverflow.ts +29 -0
  71. package/packages/interactable/README.md +1 -2
  72. package/packages/interactable/src/Interactable.tsx +3 -9
  73. package/packages/interactable/src/interface.ts +0 -1
  74. package/packages/jsx/src/index.ts +1 -1
  75. package/packages/jsx/src/test-utils/index.ts +0 -1
  76. package/packages/keyboard/src/Backdrop/Backdrop.scss +0 -2
  77. package/packages/keyboard/src/KeyboardBase.tsx +4 -16
  78. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +0 -4
  79. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +20 -28
  80. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +0 -1
  81. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +0 -1
  82. package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -11
  83. package/packages/keyboard/src/WhitelabelKeyboard/types.ts +0 -1
  84. package/packages/l10n/README.md +0 -18
  85. package/packages/l10n/src/date/common.ts +6 -18
  86. package/packages/l10n/src/date/cs.ts +8 -2
  87. package/packages/l10n/src/date/en-001.ts +3 -3
  88. package/packages/l10n/src/date/en-common.ts +4 -5
  89. package/packages/l10n/src/date/en-us.ts +3 -3
  90. package/packages/l10n/src/date/iso.ts +13 -12
  91. package/packages/l10n/src/date/types.ts +0 -9
  92. package/packages/l10n/src/l10n.ts +3 -61
  93. package/packages/list/src/Base/Base.tsx +9 -19
  94. package/packages/list/src/Base/interface.ts +2 -2
  95. package/packages/list/src/CenteredList/controller.ts +1 -0
  96. package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +3 -3
  97. package/packages/list/src/UnifiedListController/UnifiedListController.ts +2 -6
  98. package/packages/logger/src/loggers/SentryLogger/Sentry.ts +0 -1
  99. package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +2 -2
  100. package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +3 -31
  101. package/packages/menu/src/MenuAndContentContainer/interface.ts +0 -8
  102. package/packages/modal-service/README.md +1 -4
  103. package/packages/modal-service/src/ModalService.tsx +5 -29
  104. package/packages/perf-utils/README.md +120 -1
  105. package/packages/perf-utils/src/array/filter.ts +54 -1
  106. package/packages/perf-utils/src/array/find.ts +43 -1
  107. package/packages/perf-utils/src/array/findIndex.ts +43 -1
  108. package/packages/perf-utils/src/array/forEach.ts +48 -1
  109. package/packages/perf-utils/src/array/includes.ts +41 -1
  110. package/packages/perf-utils/src/array/includesNaN.ts +32 -1
  111. package/packages/perf-utils/src/array/index.ts +7 -1
  112. package/packages/perf-utils/src/array/map.ts +52 -1
  113. package/packages/player-ui/README.md +1 -1
  114. package/packages/player-ui/src/CurrentTime.tsx +2 -2
  115. package/packages/player-ui/src/Duration.tsx +2 -2
  116. package/packages/player-ui/src/PauseButton.tsx +0 -8
  117. package/packages/player-ui/src/PlayerInteractable.tsx +0 -1
  118. package/packages/player-ui/src/PlayerTime.tsx +1 -3
  119. package/packages/player-ui/src/PlayerUI.tsx +35 -68
  120. package/packages/player-ui/src/RemainingTime.tsx +2 -2
  121. package/packages/player-ui/src/Seekbar.tsx +18 -110
  122. package/packages/player-ui/src/Seeking.ts +16 -57
  123. package/packages/player-ui/src/Subtitles.tsx +2 -2
  124. package/packages/player-ui/src/index.ts +0 -1
  125. package/packages/player-ui/src/mocks.ts +8 -32
  126. package/packages/player-ui/src/timeUtils.ts +3 -3
  127. package/packages/player-ui/src/types.ts +3 -9
  128. package/packages/router/src/Route.tsx +27 -61
  129. package/packages/router/src/Router.tsx +13 -59
  130. package/packages/router/src/history.ts +1 -8
  131. package/packages/router/src/index.ts +1 -1
  132. package/packages/router/src/utils.ts +4 -9
  133. package/packages/sass-utils/src/linear-gradient.scss +4 -9
  134. package/packages/sass-utils/src/scale.1080.scss +1 -3
  135. package/packages/sass-utils/src/scale.720.scss +1 -1
  136. package/packages/time/README.md +1 -4
  137. package/packages/time/src/Time.ts +13 -35
  138. package/packages/time/src/constants.ts +0 -1
  139. package/packages/toast/src/ToastService.tsx +5 -16
  140. package/packages/types-bigscreen-jsx/README.md +4 -5
  141. package/packages/types-bigscreen-jsx/index.d.ts +67 -72
  142. package/packages/utils/README.md +0 -27
  143. package/packages/utils/src/elementUtils.ts +0 -25
  144. package/packages/utils/src/index.ts +0 -8
  145. package/packages/utils/src/scaledImage.ts +3 -6
  146. package/packages/utils/src/textUtils.ts +14 -46
  147. package/packages/utils/src/wait.ts +1 -3
  148. package/packages/utils/src/xhr/xhrSend.ts +1 -3
  149. package/packages/utils/src/xhr/xhrSendRetry.ts +1 -3
  150. package/packages/zapping/src/ChannelZapping.ts +0 -9
  151. package/packages/zapping/src/Zapping.tsx +0 -10
  152. package/.vscode/settings.json +0 -6
  153. package/packages/analytics/README.md +0 -8
  154. package/packages/analytics/src/A.ts +0 -1
  155. package/packages/analytics/src/Analytics.ts +0 -1
  156. package/packages/analytics/src/analyticsOnScroll.ts +0 -1
  157. package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +0 -1
  158. package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +0 -1
  159. package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +0 -200
  160. package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +0 -118
  161. package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +0 -17
  162. package/packages/analytics/src/clients/GoogleAnalytics/index.ts +0 -2
  163. package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +0 -77
  164. package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -50
  165. package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +0 -14
  166. package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +0 -169
  167. package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +0 -102
  168. package/packages/analytics/src/clients/TealiumAnalytics/findIdForLanguage.ts +0 -9
  169. package/packages/analytics/src/clients/TealiumAnalytics/index.ts +0 -4
  170. package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +0 -33
  171. package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +0 -70
  172. package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +0 -36
  173. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +0 -13
  174. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +0 -11
  175. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +0 -11
  176. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +0 -15
  177. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +0 -15
  178. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +0 -18
  179. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +0 -18
  180. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +0 -8
  181. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +0 -8
  182. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +0 -15
  183. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +0 -18
  184. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +0 -15
  185. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +0 -15
  186. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +0 -15
  187. package/packages/analytics/src/clients/TealiumAnalytics/types.ts +0 -156
  188. package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +0 -116
  189. package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +0 -99
  190. package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +0 -34
  191. package/packages/analytics/src/clients/TwentyFourIQ/index.ts +0 -2
  192. package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +0 -31
  193. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +0 -13
  194. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +0 -16
  195. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +0 -21
  196. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +0 -15
  197. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +0 -24
  198. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +0 -18
  199. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +0 -15
  200. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +0 -17
  201. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +0 -21
  202. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +0 -24
  203. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +0 -24
  204. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +0 -34
  205. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +0 -32
  206. package/packages/analytics/src/clients/TwentyFourIQ/types.ts +0 -115
  207. package/packages/analytics/src/constants.ts +0 -1
  208. package/packages/analytics/src/index.ts +0 -3
  209. package/packages/analytics/src/interface.ts +0 -1
  210. package/packages/analytics/src/utils/generateSessionId.ts +0 -8
  211. package/packages/create-package/dist/createPackage.js +0 -66
  212. package/packages/create-package/dist/createPackage.js.map +0 -1
  213. package/packages/create-package/dist/index.js +0 -5
  214. package/packages/create-package/dist/index.js.map +0 -1
  215. package/packages/create-package/dist/questionnaire/questions.js +0 -35
  216. package/packages/create-package/dist/questionnaire/questions.js.map +0 -1
  217. package/packages/create-package/dist/settings/Settings.js +0 -10
  218. package/packages/create-package/dist/settings/Settings.js.map +0 -1
  219. package/packages/create-package/dist/types.js +0 -3
  220. package/packages/create-package/dist/types.js.map +0 -1
  221. package/packages/device/src/driver/index.firetv.ts +0 -1
  222. package/packages/device/src/driver/index.smartcast.tv.ts +0 -1
  223. package/packages/driver-firetv/src/DeviceFireTV.ts +0 -18
  224. package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -36
  225. package/packages/driver-firetv/src/index.ts +0 -1
  226. package/packages/driver-smartcast/src/DeviceSmartCast.ts +0 -317
  227. package/packages/driver-smartcast/src/__mocks__/api.ts +0 -49
  228. package/packages/driver-smartcast/src/index.ts +0 -1
  229. package/packages/driver-smartcast/src/keymap.ts +0 -9
  230. package/packages/driver-smartcast/src/types.ts +0 -65
  231. package/packages/focus/src/hasFocus.ts +0 -36
  232. package/packages/input/src/utils.ts +0 -71
  233. package/packages/jsx/src/test-utils/keyup.ts +0 -27
  234. package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +0 -27
  235. package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +0 -27
  236. package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +0 -28
  237. package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +0 -26
  238. package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +0 -27
  239. package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +0 -27
  240. package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +0 -27
  241. package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +0 -26
  242. package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +0 -26
  243. package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +0 -27
  244. package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +0 -26
  245. package/packages/l10n/src/date/de.ts +0 -97
  246. package/packages/l10n/src/date/es.ts +0 -71
  247. package/packages/l10n/src/date/fr.ts +0 -94
  248. package/packages/l10n/src/date/he.ts +0 -101
  249. package/packages/time/src/adapters/24iMediaTimeApi.ts +0 -47
  250. package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +0 -43
  251. package/packages/time/src/services/24iMediaTimeApi/index.ts +0 -6
  252. package/packages/utils/src/forceReflow.ts +0 -14
  253. package/packages/utils/src/keyPress/index.ts +0 -6
  254. package/packages/utils/src/keyPress/keyPressSimulator.ts +0 -74
  255. package/packages/utils/src/keyPress/simulateKeyPress.ts +0 -25
  256. package/utils/release/release.ts +0 -154
@@ -1,77 +0,0 @@
1
- export type GAEventsNames = (
2
- | 'app_close' // When the playback is active at the time the app or website is closing.
3
- | 'page_view' // Each time the page loads or the browser history state is changed
4
- | 'scroll' // The first time a user reaches the bottom of each page
5
- | 'video_progress' // When the video progresses past 10%, 25%, 50%, and 75% duration time
6
- | 'video_start' // When the video starts playing
7
- | 'video_complete' // When the video ends
8
- | 'open_player_session' // When the user opens a player scene and the player is initiated
9
- | 'close_player_session' // When the user exits the player scene with initiated player
10
- | 'select_content' // When a user has selected content
11
- | 'login' // When a user logs in
12
- | 'logout' // When a user logs in
13
- | 'sign_up' // When a user has signed up Allows you to see which methods of signup are popular
14
- | 'search' // When a user searches your content
15
- | 'purchase' // When a user completes a purchase
16
- | 'share' // When a user has shared content
17
- | 'favorite_add' // When a user add asset to favorites
18
- | 'favorite_remove' // When a user remove asset froms favorites
19
- | 'user_engagement' // Periodically, while the app is in the foreground
20
- | 'ad_loaded' // When advertisement has been loaded
21
- | 'ad_skipped' // When user skipped current advertisement
22
- | 'app_exception' // When application throws an error
23
- | 'rate_content' // When user rates an asset
24
- );
25
-
26
- export type QueuedEvent = {
27
- name: string,
28
- params: Record<string, any>,
29
- urlParams: EventUrlParams,
30
- };
31
-
32
- export type SessionInfo = {
33
- appVersion: string,
34
- manufacturer: string,
35
- platform: string,
36
- language: string,
37
- resolution: string,
38
- referrer: string,
39
- engagementTime: number | undefined,
40
- sessionStarted: boolean,
41
- firstEvent: boolean,
42
- firstVisit: boolean,
43
- };
44
-
45
- export type ConstantUrlParams = {
46
- /** Client ID (UUIv4 string) */
47
- cid: string,
48
- /** Session ID (random number) */
49
- sid: number,
50
- /** Session engagement 0 for first event of session, 1 otherwise */
51
- seg: number,
52
- /** Session count */
53
- sct: number,
54
- /** Random page hash */
55
- _p: string,
56
- /** Device manufacturer e.g. 'Samsung' */
57
- 'up.device_manufacturer': string,
58
- /** Platform e.g. 'Tizen' */
59
- 'up.device_platform': string,
60
- /** Platform version e.g. '5.0' */
61
- 'up.device_platform_version': string,
62
- /** Version of application 'v1.0.0' */
63
- 'up.app_version': string,
64
- };
65
-
66
- export type EventUrlParams = {
67
- /** Language iso639-1 */
68
- ul: string,
69
- /** Device resolution as WIDTHxHEIGHT */
70
- sr: string,
71
- /** Page hash route */
72
- dl: string,
73
- /** Page title */
74
- dt: string,
75
- /** Page referrer hash route */
76
- dr: string,
77
- };
@@ -1,50 +0,0 @@
1
- import type { AnalyticsEventsNames, AnyPayload } from '../../interface';
2
- import type { EventUrlParams, GAEventsNames } from './interface';
3
- import { gtagPayloadParams } from './constants';
4
-
5
- const map: Record<string, string> = {
6
- language: 'ul',
7
- resolution: 'sr',
8
- referrer: 'dr',
9
- sceneId: 'dl',
10
- sceneName: 'dt',
11
- };
12
-
13
- export const mapEventParamsToUrlParams = (eventParams: Record<string, any>)
14
- : EventUrlParams => {
15
- const urlParams = {};
16
- Object.entries(eventParams).forEach(([key]) => {
17
- if (map[key]) {
18
- Object.assign(urlParams, {
19
- [map[key]]: eventParams[key] || '',
20
- });
21
- }
22
- });
23
- return urlParams as EventUrlParams;
24
- };
25
-
26
- export const mapPayload = (
27
- eventName: GAEventsNames,
28
- triggerName: AnalyticsEventsNames,
29
- payload: AnyPayload,
30
- ) => {
31
- const pageParams = triggerName === 'scene_view' ? {
32
- ...(payload.firstEvent && { _ee: 1 }),
33
- ...(payload.firstVisit && { _fv: 1 }),
34
- ...(payload.sessionStarted && { _ss: 1 }),
35
- } : {};
36
- const gtagPayload: Record<string, any> = {
37
- 'ep.event_trigger': triggerName,
38
- _et: payload.engagementTime ?? 0,
39
- ...pageParams,
40
- };
41
- if (eventName === 'scroll') {
42
- gtagPayload['epn.percent_scrolled'] = parseInt(triggerName.split('_')[1], 10);
43
- }
44
- Object.keys(payload).forEach((key: keyof typeof payload) => {
45
- if (gtagPayloadParams[key] !== undefined) {
46
- gtagPayload[gtagPayloadParams[key]] = payload[key];
47
- }
48
- });
49
- return gtagPayload;
50
- };
@@ -1,14 +0,0 @@
1
- import { QueuedEvent } from './interface';
2
-
3
- export const prepareBody = (events: QueuedEvent[]) => {
4
- const eventLines = events.map((event: QueuedEvent) => {
5
- const eventParams = [
6
- `en=${event.name}`,
7
- ];
8
- Object.keys(event.params).forEach((paramName) => {
9
- eventParams.push(`${paramName}=${encodeURIComponent(event.params[paramName])}`);
10
- });
11
- return eventParams.join('&');
12
- });
13
- return eventLines.join('\r\n');
14
- };
@@ -1,169 +0,0 @@
1
- import { Storage } from '@24i/bigscreen-sdk/storage';
2
- import { MINUTE_IN_MS } from '@24i/bigscreen-sdk/utils/timeConstants';
3
- import { createTimeout } from '@24i/bigscreen-sdk/utils/timers';
4
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
5
- import { findIdForLanguage } from './findIdForLanguage';
6
- import {
7
- BIGSCREEN_APP_TYPE,
8
- BIGSCREEN_OTT_TYPE,
9
- BIGSCREEN_PLATFORM_SHORT,
10
- BIGSCREEN_PLATFORM_TYPE,
11
- TRIGGER_NAME_TO_TEALIUM_EVENTS,
12
- } from './constants';
13
- import { EVENTS_MAPPING } from './interface';
14
- import type { AnalyticsClient, AnyPayload } from '../../interface';
15
- import type {
16
- TeaStaticCoreResult,
17
- Payload,
18
- TealiumAnalyticsConfiguration,
19
- TeaResult,
20
- TealiumDataMapper,
21
- TealiumCustomConfiguration,
22
- CustomMappers,
23
- } from './types';
24
-
25
- // eslint-disable-next-line no-magic-numbers
26
- const SESSION_TIMEOUT = 30 * MINUTE_IN_MS;
27
- const TEALIUM_SESSION_COUNTER = 'tealium_session_counter';
28
- const TEALIUM_BASE_URL = 'https://collect.tealiumiq.com/event';
29
-
30
- const DEFAULT_PAYLOAD: TeaStaticCoreResult = {
31
- tealium_account: '',
32
- tealium_profile: '',
33
- language: '',
34
- language_service: '',
35
- entity: '',
36
- property_id: '',
37
- short_language_service: '',
38
- platform_short: BIGSCREEN_PLATFORM_SHORT,
39
- platform_type: BIGSCREEN_PLATFORM_TYPE,
40
- app_type: BIGSCREEN_APP_TYPE,
41
- ott_type: BIGSCREEN_OTT_TYPE,
42
- app_id: '',
43
- } as const;
44
-
45
- export class TealiumAnalytics implements AnalyticsClient {
46
- name = 'TealiumAnalytics';
47
-
48
- constantPayload: TeaStaticCoreResult = DEFAULT_PAYLOAD;
49
-
50
- sessionTimeout = createTimeout();
51
-
52
- isSessionActive = false;
53
-
54
- sessionStartSent = false;
55
-
56
- baseUrl: string = '';
57
-
58
- customMappers: CustomMappers | undefined = undefined;
59
-
60
- constructor(private config: TealiumAnalyticsConfiguration, private appVersion: string = '') {
61
- this.init();
62
- }
63
-
64
- async init() {
65
- this.baseUrl = this.config.baseURL || TEALIUM_BASE_URL;
66
- this.prepareDatasetPayload();
67
- }
68
-
69
- prepareDatasetPayload() {
70
- if (!this.config) {
71
- console.warn(`[${this.name}] prepareDatasetPayload missing configuration`);
72
- return;
73
- }
74
- const {
75
- account,
76
- profile,
77
- environment,
78
- datasource,
79
- customMappers,
80
- dataMapper = {} as TealiumDataMapper,
81
- } = this.config || {} as TealiumCustomConfiguration;
82
- const {
83
- entity,
84
- property_ids: propertyIds,
85
- language,
86
- short_language_service: shortLanguageService,
87
- platform_short: platformShort,
88
- platform_type: platformType,
89
- app_type: appType,
90
- } = dataMapper || {} as TealiumDataMapper;
91
- this.customMappers = customMappers;
92
- this.constantPayload = {
93
- tealium_account: account,
94
- tealium_profile: profile,
95
- tealium_environment: environment,
96
- ...(datasource && { tealium_datasource: datasource }),
97
- language: language || '',
98
- language_service: `${entity} ${language}`,
99
- entity,
100
- property_id: findIdForLanguage(propertyIds, language || '').toString(),
101
- short_language_service: shortLanguageService || '',
102
- platform_short: platformShort ?? BIGSCREEN_PLATFORM_SHORT,
103
- platform_type: platformType ?? BIGSCREEN_PLATFORM_TYPE,
104
- app_type: appType ?? BIGSCREEN_APP_TYPE,
105
- ott_type: BIGSCREEN_OTT_TYPE,
106
- app_id: `${entity} ${language}:${this.appVersion}`,
107
- };
108
- }
109
-
110
- async startSession() {
111
- const sessionNumber = parseInt(
112
- await Storage.getItem(TEALIUM_SESSION_COUNTER) ?? '0', 10,
113
- ) + 1;
114
- await Storage.setItem(TEALIUM_SESSION_COUNTER, sessionNumber.toString());
115
- this.isSessionActive = true;
116
- this.setSessionTimeout();
117
- }
118
-
119
- setSessionTimeout() {
120
- this.sessionTimeout.set(() => {
121
- this.isSessionActive = false;
122
- this.sessionStartSent = false;
123
- }, SESSION_TIMEOUT);
124
- }
125
-
126
- async sendEvent(eventBody: TeaResult) {
127
- try {
128
- await fetch(this.baseUrl, {
129
- method: 'POST',
130
- body: JSON.stringify(eventBody),
131
- headers: {
132
- Accept: 'application/json',
133
- 'Content-Type': 'application/json;charset=UTF-8',
134
- },
135
- });
136
- } catch (error) {
137
- console.warn(`[${this.name}] Error sendEvent: `, error);
138
- }
139
- }
140
-
141
- async onEvent(triggerName: AnalyticsTriggers, payload: AnyPayload): Promise<void> {
142
- const events = TRIGGER_NAME_TO_TEALIUM_EVENTS[triggerName];
143
- if (this.isSessionActive) {
144
- this.setSessionTimeout();
145
- } else {
146
- await this.startSession();
147
- }
148
- if (!events) return;
149
- await Promise.all(
150
- events.map(async (event) => {
151
- const mappingFunction = this.customMappers && this.customMappers[event]
152
- ? this.customMappers[event]
153
- : EVENTS_MAPPING[event];
154
- try {
155
- if (!mappingFunction) {
156
- throw Error(`Missing mapping function for "${event}"`);
157
- }
158
- const eventBody = {
159
- ...this.constantPayload,
160
- ...mappingFunction(triggerName, payload as Payload),
161
- };
162
- if (eventBody) await this.sendEvent(eventBody);
163
- } catch (e) {
164
- console.warn(`[${this.name}] Error onEvent: `, e);
165
- }
166
- }),
167
- );
168
- }
169
- }
@@ -1,102 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
-
3
- export const BIGSCREEN_OTT_TYPE = 'SmartTV';
4
-
5
- export const BIGSCREEN_APP_TYPE = 'html5';
6
-
7
- export const BIGSCREEN_PLATFORM_SHORT = 'o';
8
-
9
- export const BIGSCREEN_PLATFORM_TYPE = 'ott';
10
-
11
- export const TEALIUM_TRIGGERS = [
12
- // App
13
- AnalyticsTriggers.APP_CLOSE,
14
- AnalyticsTriggers.APP_ERROR,
15
-
16
- // Scenes
17
- AnalyticsTriggers.SCENE_VIEW,
18
-
19
- // Search
20
- AnalyticsTriggers.SEARCH,
21
-
22
- // Playback
23
- AnalyticsTriggers.PLAYBACK_10,
24
- AnalyticsTriggers.PLAYBACK_50,
25
- AnalyticsTriggers.PLAYBACK_90,
26
- AnalyticsTriggers.PLAYBACK_PAUSE,
27
- AnalyticsTriggers.PLAYBACK_UNPAUSE,
28
- AnalyticsTriggers.PLAYBACK_START,
29
- AnalyticsTriggers.PLAYBACK_STOP,
30
-
31
- // Player
32
- AnalyticsTriggers.PLAYER_CLOSE,
33
- AnalyticsTriggers.PLAYER_OPEN,
34
-
35
- // Favorites
36
- AnalyticsTriggers.FAVORITE_ADD,
37
- AnalyticsTriggers.FAVORITE_REMOVE,
38
-
39
- AnalyticsTriggers.SELECT_CONTENT,
40
- AnalyticsTriggers.SEARCH_SUCCESS,
41
- AnalyticsTriggers.SEARCH_FAILED,
42
- ];
43
-
44
- export const AppEvents = {
45
- [AnalyticsTriggers.SCENE_VIEW]: '',
46
- [AnalyticsTriggers.PLAYBACK_10]: 'media_milestone_10_video',
47
- [AnalyticsTriggers.PLAYBACK_50]: 'media_milestone_50_video',
48
- [AnalyticsTriggers.PLAYBACK_90]: 'media_milestone_90_video',
49
- [AnalyticsTriggers.PLAYBACK_STOP]: 'video_stop',
50
- [AnalyticsTriggers.PLAYBACK_PAUSE]: 'video_pause',
51
- [AnalyticsTriggers.PLAYBACK_UNPAUSE]: 'video_resume',
52
- [AnalyticsTriggers.PLAYBACK_START]: 'video_play',
53
- [AnalyticsTriggers.PLAYER_OPEN]: 'player_x',
54
- [AnalyticsTriggers.PLAYER_CLOSE]: 'player_x',
55
- [AnalyticsTriggers.FAVORITE_ADD]: 'subscribe_to_fav',
56
- [AnalyticsTriggers.FAVORITE_REMOVE]: 'subscribe_to_fav',
57
- [AnalyticsTriggers.APP_ERROR]: 'app_events',
58
- [AnalyticsTriggers.SELECT_CONTENT]: 'app_events',
59
- [AnalyticsTriggers.SEARCH_SUCCESS]: 'search_success',
60
- [AnalyticsTriggers.SEARCH_FAILED]: 'search_fail',
61
- } as const;
62
-
63
- export enum EVENTS {
64
- SCENE_VIEW = 'scene_view',
65
- VIDEO_PROGRESS = 'video_progress',
66
- VIDEO_START = 'video_start',
67
- VIDEO_STOP = 'video_stop',
68
- VIDEO_PAUSE = 'video_pause',
69
- VIDEO_UNPAUSE = 'video_unpause',
70
- PLAYER_CLOSE = 'player_close',
71
- PLAYER_OPEN = 'player_open',
72
- SEARCH_SUCCESS = 'search_success',
73
- SEARCH_FAILED = 'search_failed',
74
- FAVORITE_ADD = 'favorite_add',
75
- FAVORITE_REMOVE = 'favorite_remove',
76
- APP_ERROR = 'app_error',
77
- }
78
-
79
- export enum TrackEventType {
80
- VIEW = 'view',
81
- ACTIVITY = 'activity',
82
- }
83
-
84
- export const TRIGGER_NAME_TO_TEALIUM_EVENTS: { [K in AnalyticsTriggers]?: EVENTS[]; } = {
85
- [AnalyticsTriggers.SCENE_VIEW]: [EVENTS.SCENE_VIEW],
86
- [AnalyticsTriggers.PLAYBACK_10]: [EVENTS.VIDEO_PROGRESS],
87
- [AnalyticsTriggers.PLAYBACK_50]: [EVENTS.VIDEO_PROGRESS],
88
- [AnalyticsTriggers.PLAYBACK_90]: [EVENTS.VIDEO_PROGRESS],
89
- [AnalyticsTriggers.PLAYBACK_PAUSE]: [EVENTS.VIDEO_PAUSE],
90
- [AnalyticsTriggers.PLAYBACK_UNPAUSE]: [EVENTS.VIDEO_UNPAUSE],
91
- [AnalyticsTriggers.PLAYBACK_START]: [EVENTS.VIDEO_START],
92
- [AnalyticsTriggers.PLAYBACK_STOP]: [EVENTS.VIDEO_STOP],
93
- [AnalyticsTriggers.PLAYER_CLOSE]: [EVENTS.PLAYER_CLOSE],
94
- [AnalyticsTriggers.PLAYER_OPEN]: [EVENTS.PLAYER_OPEN],
95
- [AnalyticsTriggers.APP_CLOSE]: [EVENTS.VIDEO_STOP, EVENTS.PLAYER_CLOSE],
96
- [AnalyticsTriggers.APP_ERROR]: [EVENTS.APP_ERROR],
97
- [AnalyticsTriggers.FAVORITE_ADD]: [EVENTS.FAVORITE_ADD],
98
- [AnalyticsTriggers.FAVORITE_REMOVE]: [EVENTS.FAVORITE_REMOVE],
99
- [AnalyticsTriggers.SEARCH]: [EVENTS.SEARCH_SUCCESS, EVENTS.SEARCH_FAILED],
100
- };
101
-
102
- export const HUNDRED_PERCENT = 100;
@@ -1,9 +0,0 @@
1
- import { PropertyIds } from '@24i/bigscreen-sdk/analytics/TealiumAnalytics';
2
-
3
- export const findIdForLanguage = (
4
- property_ids: PropertyIds = {},
5
- language: string,
6
- ): number => {
7
- const languageKey = Object.keys(property_ids).find((key) => key.endsWith(language));
8
- return languageKey ? property_ids[languageKey] : -1;
9
- };
@@ -1,4 +0,0 @@
1
- export { TealiumAnalytics } from './TealiumAnalytics';
2
- export { findIdForLanguage } from './findIdForLanguage';
3
- export * from './constants';
4
- export * from './types';
@@ -1,33 +0,0 @@
1
- import {
2
- EVENTS,
3
- } from './constants';
4
- import { mapSceneView } from './mappers/mapSceneView';
5
- import { mapVideoProgress } from './mappers/mapVideoProgress';
6
- import { mapVideoStop } from './mappers/mapVideoStop';
7
- import { mapPlayerOpen } from './mappers/mapPlayerOpen';
8
- import { mapPlayerClose } from './mappers/mapPlayerClose';
9
- import { mapVideoStart } from './mappers/mapVideoStart';
10
- import { mapVideoPause } from './mappers/mapVideoPause';
11
- import { mapFavoriteAdd } from './mappers/mapFavoriteAdd';
12
- import { mapFavoriteRemove } from './mappers/mapFavoriteRemove';
13
- import { mapVideoResume } from './mappers/mapVideoResume';
14
- import { mapSearchSuccess } from './mappers/mapSearchSuccess';
15
- import { mapSearchFailed } from './mappers/mapSearchFailed';
16
- import { EventMappingFunction } from './types';
17
- import { mapAppError } from './mappers/mapAppError';
18
-
19
- export const EVENTS_MAPPING: Record<EVENTS, EventMappingFunction> = {
20
- [EVENTS.SCENE_VIEW]: mapSceneView,
21
- [EVENTS.PLAYER_OPEN]: mapPlayerOpen,
22
- [EVENTS.PLAYER_CLOSE]: mapPlayerClose,
23
- [EVENTS.VIDEO_START]: mapVideoStart,
24
- [EVENTS.VIDEO_STOP]: mapVideoStop,
25
- [EVENTS.VIDEO_PROGRESS]: mapVideoProgress,
26
- [EVENTS.VIDEO_PAUSE]: mapVideoPause,
27
- [EVENTS.VIDEO_UNPAUSE]: mapVideoResume,
28
- [EVENTS.FAVORITE_ADD]: mapFavoriteAdd,
29
- [EVENTS.FAVORITE_REMOVE]: mapFavoriteRemove,
30
- [EVENTS.SEARCH_SUCCESS]: mapSearchSuccess,
31
- [EVENTS.SEARCH_FAILED]: mapSearchFailed,
32
- [EVENTS.APP_ERROR]: mapAppError,
33
- };
@@ -1,70 +0,0 @@
1
- import { Payload } from '../../types';
2
-
3
- export const MEDIA_PAYLOAD: Payload = {
4
- duration: 120,
5
- currentTime: 60,
6
- title: 'Test Video',
7
- url: 'https://example.com/video',
8
- contentType: 'video/mp4',
9
- externalId: '',
10
- percent: 2,
11
- provider: 'provider',
12
- assetId: '12345',
13
- app_id: 'app_id',
14
- app_type: 'html5',
15
- sceneName: '',
16
- sceneId: '',
17
- sceneType: '',
18
- sessionId: 1,
19
- sessionNumber: 1,
20
- userId: '10',
21
- userProfileId: 'a1',
22
- applicationId: 'app',
23
- appVersion: 'v1.0',
24
- deviceId: 'ott',
25
- deviceType: 'smarttv',
26
- searchTerm: '',
27
- itemId: '',
28
- message: 'error message',
29
- section: 'BROWSE',
30
- subcontentType: '',
31
- };
32
-
33
- export const TEALIUM_PAGEINFO_PAYLOAD = {
34
- categories: '',
35
- content_type: 'video',
36
- page_name: '',
37
- page_title: '',
38
- section: '',
39
- subcontent_type: '',
40
- };
41
-
42
- export const TEALIUM_STATIC_CORE_PAYLOAD = {
43
- tealium_account: 'test',
44
- tealium_profile: 'main',
45
- tealium_environment: 'dev',
46
- tealium_datasource: 'abc',
47
- app_id: 'auto english:v1.0-test',
48
- app_type: 'html5',
49
- entity: 'auto',
50
- language: 'english',
51
- language_service: 'auto english',
52
- ott_type: 'SmartTV',
53
- platform_short: 'o',
54
- platform_type: 'ott',
55
- property_id: '1',
56
- short_language_service: 'eng',
57
- };
58
-
59
- export const TEALIUM_MEDIA_PAYLOAD = {
60
- article_uid: '12345',
61
- byline: 'N/A',
62
- canonical_url: 'https://example.com/video',
63
- media_type: 'video/mp4',
64
- pub_date: '',
65
- tags: '',
66
- video_length: 120,
67
- video_name: 'Test Video',
68
- video_position: 60,
69
- video_series_title: '',
70
- };
@@ -1,36 +0,0 @@
1
- import { Payload, TeaMediaResult } from '../types';
2
-
3
- export const mapMediaPayload = (
4
- payload: Payload,
5
- ): TeaMediaResult => {
6
- const {
7
- duration,
8
- currentTime,
9
- title,
10
- url,
11
- contentType,
12
- assetId,
13
- pubDate,
14
- seriesTitle,
15
- sceneName,
16
- sceneId,
17
- } = payload;
18
- return {
19
- video_name: title || '',
20
- video_length: duration,
21
- video_position: currentTime,
22
- media_type: contentType,
23
- canonical_url: url || '',
24
- byline: 'N/A',
25
- pub_date: pubDate || '',
26
- article_uid: assetId,
27
- video_series_title: seriesTitle || '',
28
- tags: '',
29
- page_title: sceneName || '',
30
- page_name: sceneName || '',
31
- content_type: 'video',
32
- section: seriesTitle || '',
33
- categories: sceneId,
34
- subcontent_type: seriesTitle || '',
35
- };
36
- };
@@ -1,13 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { TeaErrorResult, Payload } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
-
5
- export const mapAppError = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): TeaErrorResult => ({
9
- app_events: AppEvents.app_error,
10
- event_trigger: triggerName,
11
- track_event_type: TrackEventType.ACTIVITY,
12
- message: payload.message || '',
13
- });
@@ -1,11 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { TeaCoreResult } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
-
5
- export const mapFavoriteAdd = (
6
- triggerName: AnalyticsTriggers,
7
- ): TeaCoreResult => ({
8
- app_events: AppEvents.favorite_add,
9
- event_trigger: triggerName,
10
- track_event_type: TrackEventType.ACTIVITY,
11
- });
@@ -1,11 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { TeaCoreResult } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
-
5
- export const mapFavoriteRemove = (
6
- triggerName: AnalyticsTriggers,
7
- ): TeaCoreResult => ({
8
- app_events: AppEvents.favorite_remove,
9
- event_trigger: triggerName,
10
- track_event_type: TrackEventType.ACTIVITY,
11
- });
@@ -1,15 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaVideoResult } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
- import { mapMediaPayload } from './helper';
5
-
6
- export const mapPlayerClose = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.player_close,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.player_close,
14
- ...(mapMediaPayload(payload)),
15
- });
@@ -1,15 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaVideoResult } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
- import { mapMediaPayload } from './helper';
5
-
6
- export const mapPlayerOpen = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.player_open,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.player_open,
14
- ...(mapMediaPayload(payload)),
15
- });
@@ -1,18 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaSceneViewResult } from '../types';
3
- import { TrackEventType } from '../constants';
4
-
5
- export const mapSceneView = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): TeaSceneViewResult => ({
9
- app_events: '',
10
- event_trigger: AnalyticsTriggers.SCENE_VIEW,
11
- track_event_type: TrackEventType.VIEW,
12
- page_title: payload.sceneName || '',
13
- page_name: payload.sceneName || '',
14
- content_type: payload.sceneType || '',
15
- section: payload.section || '',
16
- categories: payload.sceneId,
17
- subcontent_type: payload.subcontentType || '',
18
- });