@24i/bigscreen-sdk 1.0.4 → 1.0.5-4.alpha-2832

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 (292) hide show
  1. package/README.md +2 -3
  2. package/ci/is_ci_job_skippable.sh +153 -0
  3. package/package.json +55 -34
  4. package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
  5. package/packages/analytics/README.md +8 -0
  6. package/packages/analytics/src/A.ts +1 -0
  7. package/packages/analytics/src/Analytics.ts +1 -0
  8. package/packages/analytics/src/analyticsOnScroll.ts +1 -0
  9. package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +1 -0
  10. package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +1 -0
  11. package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +196 -0
  12. package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +126 -0
  13. package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +17 -0
  14. package/packages/analytics/src/clients/GoogleAnalytics/index.ts +2 -0
  15. package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +82 -0
  16. package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +51 -0
  17. package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +14 -0
  18. package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +181 -0
  19. package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +106 -0
  20. package/packages/analytics/src/clients/TealiumAnalytics/findForLanguage.ts +9 -0
  21. package/packages/analytics/src/clients/TealiumAnalytics/index.ts +4 -0
  22. package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +35 -0
  23. package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +72 -0
  24. package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +36 -0
  25. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +13 -0
  26. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppOpen.ts +13 -0
  27. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +11 -0
  28. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +11 -0
  29. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +15 -0
  30. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +15 -0
  31. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +18 -0
  32. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +18 -0
  33. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +8 -0
  34. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +8 -0
  35. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +15 -0
  36. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +18 -0
  37. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +15 -0
  38. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +15 -0
  39. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +15 -0
  40. package/packages/analytics/src/clients/TealiumAnalytics/types.ts +161 -0
  41. package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +107 -0
  42. package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +111 -0
  43. package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +34 -0
  44. package/packages/analytics/src/clients/TwentyFourIQ/index.ts +2 -0
  45. package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +34 -0
  46. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdEvent.ts +20 -0
  47. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +24 -0
  48. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +15 -0
  49. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +25 -0
  50. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +17 -0
  51. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +15 -0
  52. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +17 -0
  53. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +22 -0
  54. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +25 -0
  55. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +25 -0
  56. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +34 -0
  57. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +32 -0
  58. package/packages/analytics/src/clients/TwentyFourIQ/types.ts +132 -0
  59. package/packages/analytics/src/constants.ts +1 -0
  60. package/packages/analytics/src/index.ts +3 -0
  61. package/packages/analytics/src/interface.ts +1 -0
  62. package/packages/analytics/src/utils/generateSessionId.ts +8 -0
  63. package/packages/async-image/src/AsyncImage.tsx +15 -10
  64. package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
  65. package/packages/developer-tools/src/DeveloperConsole/DeveloperConsole.tsx +1 -0
  66. package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +11 -0
  67. package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
  68. package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +15 -0
  69. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfo.tsx +2 -0
  70. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +2 -1
  71. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +57 -5
  72. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +12 -0
  73. package/packages/developer-tools/src/TechnicalInfo/translations.ts +8 -0
  74. package/packages/device/src/driver/index.android.tv.ts +1 -0
  75. package/packages/device/src/driver/index.firetv.ts +1 -0
  76. package/packages/device/src/driver/index.smartcast.tv.ts +1 -0
  77. package/packages/device/src/getKeyDigit.ts +2 -2
  78. package/packages/device/src/resolver/resolver.ts +19 -0
  79. package/packages/digital-clock/src/DigitalClock.tsx +15 -4
  80. package/packages/driver-androidtv/src/DeviceAndroidTV.ts +262 -0
  81. package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +45 -0
  82. package/packages/driver-androidtv/src/formatUserAgent.ts +11 -0
  83. package/packages/driver-androidtv/src/index.ts +2 -0
  84. package/packages/driver-androidtv/src/keymap.ts +27 -0
  85. package/packages/driver-androidtv/src/types.ts +155 -0
  86. package/packages/driver-base/src/DeviceBase.ts +73 -2
  87. package/packages/driver-base/src/KeyMap/Key.ts +8 -1
  88. package/packages/driver-base/src/KeyMap/KeyMap.ts +4 -0
  89. package/packages/driver-base/src/KeyMap/interface.ts +1 -0
  90. package/packages/driver-base/src/KeyMap/overrideValues.ts +2 -1
  91. package/packages/driver-base/src/__mocks__/DeviceBase.ts +24 -0
  92. package/packages/driver-base/src/__mocks__/keyMap.ts +1 -0
  93. package/packages/driver-base/src/index.ts +3 -0
  94. package/packages/driver-base/src/types/AdInfo.ts +5 -0
  95. package/packages/driver-base/src/types/DeviceEvent.ts +2 -0
  96. package/packages/driver-base/src/types/InAppPurchase.ts +20 -0
  97. package/packages/driver-base/src/types/KeycodeKeyMap.ts +1 -0
  98. package/packages/driver-browser/src/DeviceBrowser.ts +26 -0
  99. package/packages/driver-browser/src/keymap.ts +8 -0
  100. package/packages/driver-entone/src/DeviceEntone.ts +31 -1
  101. package/packages/driver-entone/src/keymap.ts +1 -0
  102. package/packages/driver-firetv/src/DeviceFireTV.ts +86 -0
  103. package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +45 -0
  104. package/packages/driver-firetv/src/index.ts +1 -0
  105. package/packages/driver-firetv/src/types.ts +1 -0
  106. package/packages/driver-hbbtv/src/DeviceHbbTV.ts +26 -0
  107. package/packages/driver-kreatv/src/DeviceKreaTV.ts +26 -0
  108. package/packages/driver-saphi/src/DeviceSaphi.ts +26 -0
  109. package/packages/driver-smartcast/src/DeviceSmartCast.ts +380 -0
  110. package/packages/driver-smartcast/src/__mocks__/api.ts +69 -0
  111. package/packages/driver-smartcast/src/index.ts +1 -0
  112. package/packages/driver-smartcast/src/keymap.ts +9 -0
  113. package/packages/driver-smartcast/src/types.ts +102 -0
  114. package/packages/driver-tizen/src/DeviceTizen.ts +121 -7
  115. package/packages/driver-tizen/src/ITizen.ts +15116 -202
  116. package/packages/driver-tizen/src/IWebapis.ts +8643 -87
  117. package/packages/driver-tizen/src/TizenKeys.ts +4 -2
  118. package/packages/driver-tizen/src/__mocks__/tizen.ts +7 -8
  119. package/packages/driver-tizen/src/constants.ts +1 -195
  120. package/packages/driver-vidaa/src/DeviceVidaa.ts +29 -2
  121. package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
  122. package/packages/driver-vidaa/src/keymap.ts +2 -0
  123. package/packages/driver-webos/src/DeviceWebos.ts +55 -0
  124. package/packages/driver-webos/src/__mocks__/webos.ts +33 -0
  125. package/packages/driver-webos/src/constants.ts +1 -0
  126. package/packages/driver-webos/src/keymap.ts +2 -1
  127. package/packages/driver-webos/src/types.ts +30 -0
  128. package/packages/driver-xbox/src/DeviceXbox.ts +30 -1
  129. package/packages/driver-xbox/src/keymap.ts +1 -1
  130. package/packages/epg/README.md +3 -1
  131. package/packages/epg/src/v2/Cell.tsx +16 -2
  132. package/packages/epg/src/v2/DataManager.ts +112 -41
  133. package/packages/epg/src/v2/DatePicker.tsx +9 -3
  134. package/packages/epg/src/v2/DateToast/DateToast.tsx +12 -9
  135. package/packages/epg/src/v2/Day.tsx +6 -3
  136. package/packages/epg/src/v2/Epg.tsx +5 -5
  137. package/packages/epg/src/v2/MockGenerator/generator.ts +3 -2
  138. package/packages/epg/src/v2/ProgramInfo/utils.ts +4 -3
  139. package/packages/epg/src/v2/Row.tsx +3 -1
  140. package/packages/epg/src/v2/TimelineSection.tsx +4 -1
  141. package/packages/epg/src/v2/basic/CellsManager.tsx +7 -2
  142. package/packages/epg/src/v2/basic/RowsManager.tsx +3 -1
  143. package/packages/epg/src/v2/interface.ts +13 -0
  144. package/packages/events-manager/src/EventsManager.ts +1 -56
  145. package/packages/focus/README.md +33 -0
  146. package/packages/focus/src/IFocusable.ts +1 -0
  147. package/packages/focus/src/Layout/Base.tsx +41 -6
  148. package/packages/focus/src/Layout/Matrix.tsx +51 -19
  149. package/packages/focus/src/focusFirstExisting.ts +7 -1
  150. package/packages/focus/src/hasFocus.ts +36 -0
  151. package/packages/focus/src/index.ts +2 -1
  152. package/packages/gallup/src/Gallup.ts +3 -3
  153. package/packages/grid/src/Base/Base.tsx +15 -10
  154. package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +4 -2
  155. package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +6 -6
  156. package/packages/icon/src/Icon.tsx +27 -5
  157. package/packages/input/README.md +1 -1
  158. package/packages/input/src/Input.tsx +10 -10
  159. package/packages/interactable/README.md +2 -1
  160. package/packages/interactable/src/Interactable.tsx +9 -3
  161. package/packages/interactable/src/interface.ts +1 -0
  162. package/packages/jsx/src/index.ts +1 -1
  163. package/packages/jsx/src/test-utils/index.ts +1 -0
  164. package/packages/jsx/src/test-utils/keyup.ts +27 -0
  165. package/packages/keyboard/README.md +2 -0
  166. package/packages/keyboard/src/Backdrop/Backdrop.scss +2 -0
  167. package/packages/keyboard/src/KeyboardBase.tsx +16 -4
  168. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +10 -0
  169. package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +128 -142
  170. package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/whitelabel.scss +4 -0
  171. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +1 -0
  172. package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +1 -0
  173. package/packages/keyboard/src/WhitelabelKeyboard/icons/key_language.svg +20 -0
  174. package/packages/keyboard/src/WhitelabelKeyboard/index.ts +1 -1
  175. package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +27 -0
  176. package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +27 -0
  177. package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +28 -0
  178. package/packages/keyboard/src/WhitelabelKeyboard/layouts/hebrew.ts +28 -0
  179. package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +15 -0
  180. package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +26 -0
  181. package/packages/keyboard/src/WhitelabelKeyboard/layouts/latin.ts +26 -0
  182. package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +27 -0
  183. package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +27 -0
  184. package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +27 -0
  185. package/packages/keyboard/src/WhitelabelKeyboard/layouts/spanish.ts +26 -0
  186. package/packages/keyboard/src/WhitelabelKeyboard/layouts/special.ts +28 -0
  187. package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +26 -0
  188. package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +26 -0
  189. package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +27 -0
  190. package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +26 -0
  191. package/packages/keyboard/src/WhitelabelKeyboard/types.ts +22 -2
  192. package/packages/keyboard/src/types/index.ts +1 -1
  193. package/packages/keyboard/src/utils/caret.ts +5 -8
  194. package/packages/keyboard/src/utils/input.ts +5 -6
  195. package/packages/keyboard/src/utils/setInputSelectionRange.ts +10 -0
  196. package/packages/l10n/README.md +18 -0
  197. package/packages/l10n/src/date/common.ts +18 -6
  198. package/packages/l10n/src/date/cs.ts +2 -8
  199. package/packages/l10n/src/date/de.ts +97 -0
  200. package/packages/l10n/src/date/en-001.ts +3 -3
  201. package/packages/l10n/src/date/en-common.ts +5 -4
  202. package/packages/l10n/src/date/en-us.ts +3 -3
  203. package/packages/l10n/src/date/es.ts +71 -0
  204. package/packages/l10n/src/date/fr.ts +94 -0
  205. package/packages/l10n/src/date/he.ts +101 -0
  206. package/packages/l10n/src/date/iso.ts +12 -13
  207. package/packages/l10n/src/date/types.ts +9 -0
  208. package/packages/l10n/src/l10n.ts +61 -3
  209. package/packages/list/src/Base/Base.tsx +19 -9
  210. package/packages/list/src/Base/interface.ts +2 -2
  211. package/packages/list/src/BasicList/BasicList.tsx +7 -7
  212. package/packages/list/src/CenteredList/CenteredList.tsx +2 -2
  213. package/packages/list/src/CenteredList/controller.ts +0 -1
  214. package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +10 -10
  215. package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +2 -2
  216. package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +2 -2
  217. package/packages/list/src/FixedToEndList/FixedToEndList.tsx +2 -2
  218. package/packages/list/src/UnifiedListController/UnifiedListController.ts +6 -2
  219. package/packages/list/src/interface.ts +2 -2
  220. package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +7 -1
  221. package/packages/logger/src/loggers/SentryLogger/Sentry.ts +1 -0
  222. package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +5 -3
  223. package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +31 -3
  224. package/packages/menu/src/MenuAndContentContainer/interface.ts +8 -0
  225. package/packages/modal-service/README.md +4 -1
  226. package/packages/modal-service/src/ModalService.tsx +29 -5
  227. package/packages/perf-utils/README.md +1 -120
  228. package/packages/perf-utils/src/array/filter.ts +1 -54
  229. package/packages/perf-utils/src/array/find.ts +1 -43
  230. package/packages/perf-utils/src/array/findIndex.ts +1 -43
  231. package/packages/perf-utils/src/array/forEach.ts +1 -48
  232. package/packages/perf-utils/src/array/includes.ts +1 -41
  233. package/packages/perf-utils/src/array/includesNaN.ts +1 -32
  234. package/packages/perf-utils/src/array/index.ts +1 -7
  235. package/packages/perf-utils/src/array/map.ts +1 -52
  236. package/packages/player-ui/README.md +1 -1
  237. package/packages/player-ui/src/CurrentTime.tsx +2 -2
  238. package/packages/player-ui/src/Duration.tsx +2 -2
  239. package/packages/player-ui/src/PauseButton.tsx +8 -0
  240. package/packages/player-ui/src/PlayerInteractable.tsx +1 -0
  241. package/packages/player-ui/src/PlayerTime.tsx +3 -1
  242. package/packages/player-ui/src/PlayerUI.tsx +68 -35
  243. package/packages/player-ui/src/RemainingTime.tsx +2 -2
  244. package/packages/player-ui/src/Seekbar.tsx +110 -18
  245. package/packages/player-ui/src/Seeking.ts +57 -16
  246. package/packages/player-ui/src/Subtitles.tsx +2 -2
  247. package/packages/player-ui/src/index.ts +1 -0
  248. package/packages/player-ui/src/mocks.ts +32 -8
  249. package/packages/player-ui/src/timeUtils.ts +3 -3
  250. package/packages/player-ui/src/types.ts +9 -3
  251. package/packages/router/README.md +1 -0
  252. package/packages/router/src/Route.tsx +61 -27
  253. package/packages/router/src/Router.tsx +63 -14
  254. package/packages/router/src/history.ts +8 -1
  255. package/packages/router/src/index.ts +1 -1
  256. package/packages/router/src/utils.ts +9 -4
  257. package/packages/sass-utils/src/linear-gradient.scss +9 -4
  258. package/packages/sass-utils/src/scale.1080.scss +3 -1
  259. package/packages/sass-utils/src/scale.720.scss +1 -1
  260. package/packages/time/README.md +4 -1
  261. package/packages/time/src/Time.ts +35 -13
  262. package/packages/time/src/adapters/24iMediaTimeApi.ts +47 -0
  263. package/packages/time/src/constants.ts +1 -0
  264. package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +43 -0
  265. package/packages/time/src/services/24iMediaTimeApi/index.ts +6 -0
  266. package/packages/toast/src/ToastService.scss +1 -0
  267. package/packages/toast/src/ToastService.tsx +16 -5
  268. package/packages/types-bigscreen-jsx/README.md +5 -4
  269. package/packages/types-bigscreen-jsx/index.d.ts +72 -67
  270. package/packages/utils/README.md +27 -0
  271. package/packages/utils/src/elementUtils.ts +25 -0
  272. package/packages/utils/src/forceReflow.ts +14 -0
  273. package/packages/utils/src/index.ts +8 -0
  274. package/packages/utils/src/keyPress/index.ts +6 -0
  275. package/packages/utils/src/keyPress/keyPressSimulator.ts +74 -0
  276. package/packages/utils/src/keyPress/simulateKeyPress.ts +25 -0
  277. package/packages/utils/src/scaledImage.ts +6 -3
  278. package/packages/utils/src/textUtils.ts +46 -14
  279. package/packages/utils/src/wait.ts +3 -1
  280. package/packages/utils/src/xhr/xhrSend.ts +3 -1
  281. package/packages/utils/src/xhr/xhrSendRetry.ts +3 -1
  282. package/packages/zapping/src/ChannelZapping.ts +9 -0
  283. package/packages/zapping/src/Zapping.tsx +10 -0
  284. package/utils/release/release.ts +156 -0
  285. package/packages/driver-tizen/src/types.ts +0 -14
  286. package/packages/focus/src/Layout/__test__/Base.spec.ts +0 -180
  287. package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +0 -94
  288. package/packages/focus/src/Layout/__test__/Matrix.spec.ts +0 -261
  289. package/packages/focus/src/Layout/__test__/Vertical.spec.ts +0 -46
  290. package/packages/focus/src/Layout/__test__/isRtl.spec.ts +0 -23
  291. package/packages/focus/src/Layout/__test__/shared.ts +0 -19
  292. package/packages/keyboard/src/WhitelabelKeyboard/focusMatrix.ts +0 -19
@@ -0,0 +1,111 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+
3
+ export enum AnalyticsPrefix {
4
+ SCROLL = 'SCROLL_',
5
+ PLAYBACK = 'PLAYBACK_',
6
+ }
7
+
8
+ export enum AnalyticsEvents {
9
+ INSTALLED_APP = 'Installed app',
10
+ LOADED_APP = 'Loaded App',
11
+ LOGGED_IN = 'Logged In',
12
+ LOGGED_OUT = 'Logged Out',
13
+ CANCELLED_PURCHASE = 'Cancelled Purchase',
14
+ PURCHASE_COMPLETE = 'Purchase Complete',
15
+ HOME = 'home',
16
+ DETAILS = 'details',
17
+ PLAYER = 'player',
18
+ TECHNICAL_INFO = 'Technical information',
19
+ }
20
+
21
+ export enum DefaultScreens {
22
+ PLAYBACK = 'playback',
23
+ }
24
+
25
+ export const TWENTY_FOUR_IQ_TRIGGERS = [
26
+ // App
27
+ AnalyticsTriggers.APP_CLOSE,
28
+
29
+ // Scenes
30
+ AnalyticsTriggers.SCENE_VIEW,
31
+
32
+ // Data loading / Player buffering
33
+ AnalyticsTriggers.BUFFERING_START,
34
+ AnalyticsTriggers.BUFFERING_STOP,
35
+
36
+ // Playback
37
+ AnalyticsTriggers.PLAYBACK_10,
38
+ AnalyticsTriggers.PLAYBACK_25,
39
+ AnalyticsTriggers.PLAYBACK_50,
40
+ AnalyticsTriggers.PLAYBACK_75,
41
+ AnalyticsTriggers.PLAYBACK_90,
42
+ AnalyticsTriggers.PLAYBACK_PAUSE,
43
+ AnalyticsTriggers.PLAYBACK_START,
44
+ AnalyticsTriggers.PLAYBACK_STOP,
45
+
46
+ // Player
47
+ AnalyticsTriggers.PLAYER_CLOSE,
48
+ AnalyticsTriggers.PLAYER_OPEN,
49
+
50
+ // Scrolling in scene
51
+ AnalyticsTriggers.SCROLL_25,
52
+ AnalyticsTriggers.SCROLL_50,
53
+ AnalyticsTriggers.SCROLL_75,
54
+ AnalyticsTriggers.SCROLL_90,
55
+
56
+ // Ads
57
+ AnalyticsTriggers.AD_BUFFERING,
58
+ AnalyticsTriggers.AD_COMPLETE,
59
+ AnalyticsTriggers.AD_ERROR,
60
+ AnalyticsTriggers.AD_SKIPPED,
61
+ AnalyticsTriggers.AD_START,
62
+ AnalyticsTriggers.AD_STOP,
63
+ ];
64
+
65
+ export enum EVENTS {
66
+ SCENE_VIEW = 'scene_view',
67
+ BUFFERING = 'buffering',
68
+ VIDEO_PROGRESS = 'video_progress',
69
+ VIDEO_START = 'video_start',
70
+ VIDEO_COMPLETE = 'video_complete',
71
+ VIDEO_STOP = 'video_stop',
72
+ VIDEO_PAUSE = 'video_pause',
73
+ PLAYER_CLOSE = 'player_close',
74
+ PLAYER_OPEN = 'player_open',
75
+ SCROLL = 'scroll',
76
+ AD_BUFFERING = 'ad_buffering',
77
+ AD_COMPLETE = 'ad_complete',
78
+ AD_ERROR = 'ad_error',
79
+ AD_SKIPPED = 'ad_skipped',
80
+ AD_START = 'ad_start',
81
+ AD_STOP = 'ad_stop',
82
+ }
83
+
84
+ export const TRIGGER_NAME_TO_24IQ_EVENTS: { [K in AnalyticsTriggers]?: EVENTS[]; } = {
85
+ [AnalyticsTriggers.SCENE_VIEW]: [EVENTS.SCENE_VIEW],
86
+ [AnalyticsTriggers.BUFFERING_START]: [EVENTS.BUFFERING],
87
+ [AnalyticsTriggers.BUFFERING_STOP]: [EVENTS.BUFFERING],
88
+ [AnalyticsTriggers.PLAYBACK_10]: [EVENTS.VIDEO_PROGRESS],
89
+ [AnalyticsTriggers.PLAYBACK_25]: [EVENTS.VIDEO_PROGRESS],
90
+ [AnalyticsTriggers.PLAYBACK_50]: [EVENTS.VIDEO_PROGRESS],
91
+ [AnalyticsTriggers.PLAYBACK_75]: [EVENTS.VIDEO_PROGRESS],
92
+ [AnalyticsTriggers.PLAYBACK_90]: [EVENTS.VIDEO_COMPLETE],
93
+ [AnalyticsTriggers.PLAYBACK_PAUSE]: [EVENTS.VIDEO_PAUSE],
94
+ [AnalyticsTriggers.PLAYBACK_START]: [EVENTS.VIDEO_START],
95
+ [AnalyticsTriggers.PLAYBACK_STOP]: [EVENTS.VIDEO_STOP],
96
+ [AnalyticsTriggers.PLAYER_CLOSE]: [EVENTS.PLAYER_CLOSE],
97
+ [AnalyticsTriggers.PLAYER_OPEN]: [EVENTS.PLAYER_OPEN],
98
+ [AnalyticsTriggers.SCROLL_25]: [EVENTS.SCROLL],
99
+ [AnalyticsTriggers.SCROLL_50]: [EVENTS.SCROLL],
100
+ [AnalyticsTriggers.SCROLL_75]: [EVENTS.SCROLL],
101
+ [AnalyticsTriggers.SCROLL_90]: [EVENTS.SCROLL],
102
+ [AnalyticsTriggers.APP_CLOSE]: [EVENTS.VIDEO_STOP, EVENTS.PLAYER_CLOSE],
103
+ [AnalyticsTriggers.AD_BUFFERING]: [EVENTS.AD_BUFFERING],
104
+ [AnalyticsTriggers.AD_COMPLETE]: [EVENTS.AD_COMPLETE],
105
+ [AnalyticsTriggers.AD_ERROR]: [EVENTS.AD_ERROR],
106
+ [AnalyticsTriggers.AD_SKIPPED]: [EVENTS.AD_SKIPPED],
107
+ [AnalyticsTriggers.AD_START]: [EVENTS.AD_START],
108
+ [AnalyticsTriggers.AD_STOP]: [EVENTS.AD_STOP],
109
+ };
110
+
111
+ export const HUNDRED_PERCENT = 100;
@@ -0,0 +1,34 @@
1
+ import { time } from '@24i/bigscreen-sdk/time';
2
+ import { MINUTES_PER_HOUR } from '@24i/bigscreen-sdk/utils';
3
+
4
+ export const getTimezoneOffsetString = (): string => {
5
+ const timezoneOffset = time.getTimezoneOffset();
6
+ const offsetHours = Math.floor(Math.abs(timezoneOffset) / MINUTES_PER_HOUR);
7
+ const offsetMinutesRemainder = Math.abs(timezoneOffset) % MINUTES_PER_HOUR;
8
+
9
+ const sign = timezoneOffset <= 0 ? '+' : '-';
10
+
11
+ const offsetHoursString = offsetHours.toString().padStart(2, '0');
12
+ const offsetMinutesString = offsetMinutesRemainder.toString().padStart(2, '0');
13
+ return `${sign}${offsetHoursString}:${offsetMinutesString}`;
14
+ };
15
+
16
+ export const formatDateTime = (date: Date): string => {
17
+ if (Number.isNaN(date.getTime())) {
18
+ return '';
19
+ }
20
+ const year = date.getUTCFullYear();
21
+ const month = (date.getUTCMonth() + 1).toString().padStart(2, '0');
22
+ const day = date.getUTCDate().toString().padStart(2, '0');
23
+ const hours = date.getUTCHours().toString().padStart(2, '0');
24
+ const minutes = date.getUTCMinutes().toString().padStart(2, '0');
25
+ const seconds = date.getUTCSeconds().toString().padStart(2, '0');
26
+
27
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+00:00`;
28
+ };
29
+
30
+ export const getAssetId = (url: string = ''): string => {
31
+ const urlParts = url.split('/');
32
+ const lastPart = urlParts[urlParts.length - 1];
33
+ return lastPart !== '' ? lastPart : '';
34
+ };
@@ -0,0 +1,2 @@
1
+ export { TwentyFourIQClient } from './TwentyFourIQClient';
2
+ export { TWENTY_FOUR_IQ_TRIGGERS } from './constants';
@@ -0,0 +1,34 @@
1
+ import {
2
+ EVENTS,
3
+ } from './constants';
4
+ import { mapSceneView } from './mappers/mapSceneView';
5
+ import { mapBuffering } from './mappers/mapBuffering';
6
+ import { mapScroll } from './mappers/mapScroll';
7
+ import { mapVideoProgress } from './mappers/mapVideoProgress';
8
+ import { mapVideoStop } from './mappers/mapVideoStop';
9
+ import { mapVideoComplete } from './mappers/mapVideoComplete';
10
+ import { mapPlayerOpen } from './mappers/mapPlayerOpen';
11
+ import { mapPlayerClose } from './mappers/mapPlayerClose';
12
+ import { mapVideoStart } from './mappers/mapVideoStart';
13
+ import { mapVideoPause } from './mappers/mapVideoPause';
14
+ import { mapAdEvent } from './mappers/mapAdEvent';
15
+ import { EventMappingFunction } from './types';
16
+
17
+ export const EVENTS_MAPPING: Record<EVENTS, EventMappingFunction> = {
18
+ [EVENTS.SCENE_VIEW]: mapSceneView,
19
+ [EVENTS.BUFFERING]: mapBuffering,
20
+ [EVENTS.SCROLL]: mapScroll,
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_COMPLETE]: mapVideoComplete,
27
+ [EVENTS.VIDEO_PAUSE]: mapVideoPause,
28
+ [EVENTS.AD_BUFFERING]: mapAdEvent,
29
+ [EVENTS.AD_COMPLETE]: mapAdEvent,
30
+ [EVENTS.AD_ERROR]: mapAdEvent,
31
+ [EVENTS.AD_SKIPPED]: mapAdEvent,
32
+ [EVENTS.AD_START]: mapAdEvent,
33
+ [EVENTS.AD_STOP]: mapAdEvent,
34
+ };
@@ -0,0 +1,20 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { Payload, AdEventResult } from '../types';
3
+ import { mapBase } from './mapBase';
4
+
5
+ export const mapAdEvent = (
6
+ triggerName: AnalyticsTriggers,
7
+ payload: Payload,
8
+ ): AdEventResult => ({
9
+ ...mapBase(payload),
10
+ action: triggerName,
11
+ event_trigger: triggerName,
12
+ ad_id: payload.adId || '',
13
+ ad_name: payload.adName || '',
14
+ ad_position: payload.adType || '',
15
+ ad_playback_position: payload.adPosition || '',
16
+ ad_playback_duration: payload.adDuration || '',
17
+ thing_id: payload.assetId || '',
18
+ attribution_id: payload.attributionId || '',
19
+ custom_campaign_url: '',
20
+ });
@@ -0,0 +1,24 @@
1
+ import { time } from '@24i/bigscreen-sdk/time';
2
+ import { Payload, BaseResult } from '../types';
3
+ import { formatDateTime, getTimezoneOffsetString } from '../helper';
4
+
5
+ export const mapBase = (payload: Payload): BaseResult => {
6
+ const timestampDate = time.getCurrentTime();
7
+ const formattedTimestamp = getTimezoneOffsetString();
8
+ return {
9
+ device_appversion: payload.appVersion || '',
10
+ session_id: payload.sessionId.toString(),
11
+ timestamp_initiated: formatDateTime(timestampDate),
12
+ device_id: payload.deviceId,
13
+ device_type: 'SmartTV',
14
+ device_platform: payload.platform || '',
15
+ device_model: payload.deviceModel || '',
16
+ device_manufacturer: payload.manufacturer || '',
17
+ device_timezone: formattedTimestamp,
18
+ service_id: payload.serviceId || '',
19
+ user_id: payload.userId || '',
20
+ user_profile_id: payload.userProfileId,
21
+ custom_gdpr_status: payload.gdprStatus,
22
+ ...(!payload.userId && { user_anon_id: payload.deviceId }),
23
+ };
24
+ };
@@ -0,0 +1,15 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { Payload, BufferingResult } from '../types';
3
+ import { mapBase } from './mapBase';
4
+
5
+ export const mapBuffering = (
6
+ triggerName: AnalyticsTriggers,
7
+ payload: Payload,
8
+ ): BufferingResult => ({
9
+ ...mapBase(payload),
10
+ action: triggerName,
11
+ event_trigger: triggerName,
12
+ thing_id: payload.assetId || '',
13
+ attribution_id: payload.attributionId || '',
14
+ source_page: payload.sceneName,
15
+ });
@@ -0,0 +1,25 @@
1
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
2
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
3
+ import { DefaultScreens, EVENTS, HUNDRED_PERCENT } from '../constants';
4
+ import { PlayerCloseResult, Payload } from '../types';
5
+ import { mapBase } from './mapBase';
6
+
7
+ export const mapPlayerClose = (
8
+ triggerName: AnalyticsTriggers,
9
+ payload: Payload,
10
+ ): PlayerCloseResult | undefined => {
11
+ const progressPercent = Number(payload.percentOfPlayback);
12
+ const assetDuration = Number(payload.duration) / SECOND_IN_MS
13
+ || payload?.asset?.duration || 0;
14
+ const duration = Math.round((assetDuration * progressPercent) / HUNDRED_PERCENT);
15
+ return {
16
+ ...mapBase(payload),
17
+ action: EVENTS.PLAYER_CLOSE,
18
+ event_trigger: triggerName,
19
+ source_page: DefaultScreens.PLAYBACK,
20
+ thing_id: payload.assetId || '',
21
+ attribution_id: payload.attributionId || '',
22
+ duration,
23
+ progress_pct: progressPercent,
24
+ };
25
+ };
@@ -0,0 +1,17 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { DefaultScreens } from '../constants';
3
+ import { PlayerOpenResult, Payload } from '../types';
4
+ import { mapBase } from './mapBase';
5
+
6
+ export const mapPlayerOpen = (
7
+ triggerName: AnalyticsTriggers,
8
+ payload: Payload,
9
+ ): PlayerOpenResult => ({
10
+ ...mapBase(payload),
11
+ action: triggerName,
12
+ event_trigger: triggerName,
13
+ source_page: DefaultScreens.PLAYBACK,
14
+ thing_id: payload.assetId || '',
15
+ attribution_id: payload.attributionId || '',
16
+ source_rail: '', // TODO: payload.payload.asset.sectionLabel,
17
+ });
@@ -0,0 +1,15 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { Payload, SceneViewResult } from '../types';
3
+ import { mapBase } from './mapBase';
4
+
5
+ export const mapSceneView = (
6
+ triggerName: AnalyticsTriggers,
7
+ payload: Payload,
8
+ ): SceneViewResult | undefined => ({
9
+ ...mapBase(payload),
10
+ action: triggerName,
11
+ event_trigger: triggerName,
12
+ source_page: payload.sceneName,
13
+ thing_id: payload.assetId || '',
14
+ attribution_id: payload.attributionId || '',
15
+ });
@@ -0,0 +1,17 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { EVENTS } from '../constants';
3
+ import { Payload, ScrollResult } from '../types';
4
+ import { mapBase } from './mapBase';
5
+
6
+ export const mapScroll = (triggerName: AnalyticsTriggers, payload: Payload): ScrollResult => {
7
+ const percentScrolled = triggerName.split('_')[1];
8
+ return {
9
+ ...mapBase(payload),
10
+ action: EVENTS.SCROLL,
11
+ event_trigger: triggerName,
12
+ source_page: payload.sceneName,
13
+ thing_id: payload.assetId || '',
14
+ attribution_id: payload.attributionId || '',
15
+ percent_scrolled: percentScrolled,
16
+ };
17
+ };
@@ -0,0 +1,22 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
3
+ import { DefaultScreens, EVENTS } from '../constants';
4
+ import { Payload, VideoCompleteResult } from '../types';
5
+ import { mapBase } from './mapBase';
6
+
7
+ export const mapVideoComplete = (
8
+ triggerName: AnalyticsTriggers,
9
+ payload: Payload,
10
+ ): VideoCompleteResult => {
11
+ const assetDuration = (payload.duration || 0) / SECOND_IN_MS;
12
+ return {
13
+ ...mapBase(payload),
14
+ action: EVENTS.VIDEO_COMPLETE,
15
+ event_trigger: triggerName,
16
+ thing_id: payload.assetId || '',
17
+ attribution_id: payload.attributionId || '',
18
+ progress_pct: 90,
19
+ duration: assetDuration,
20
+ source_page: DefaultScreens.PLAYBACK,
21
+ };
22
+ };
@@ -0,0 +1,25 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
3
+ import { DefaultScreens, EVENTS, HUNDRED_PERCENT } from '../constants';
4
+ import { VideoPauseResult, Payload } from '../types';
5
+ import { mapBase } from './mapBase';
6
+
7
+ export const mapVideoPause = (
8
+ triggerName: AnalyticsTriggers,
9
+ payload: Payload,
10
+ ): VideoPauseResult => {
11
+ const { asset, duration = 0 } = payload;
12
+ const progressPercent = Number(payload.percentOfPlayback);
13
+ const assetDuration = duration / SECOND_IN_MS || asset?.duration || 0;
14
+ const overallDuration = Math.round((assetDuration * progressPercent) / HUNDRED_PERCENT);
15
+ return {
16
+ ...mapBase(payload),
17
+ action: EVENTS.VIDEO_PAUSE,
18
+ event_trigger: triggerName,
19
+ thing_id: payload.assetId || '',
20
+ attribution_id: payload.attributionId || '',
21
+ duration: overallDuration,
22
+ progress_pct: progressPercent,
23
+ source_page: DefaultScreens.PLAYBACK,
24
+ };
25
+ };
@@ -0,0 +1,25 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
3
+ import { Payload, VideoProgressResult } from '../types';
4
+ import { DefaultScreens, EVENTS, HUNDRED_PERCENT } from '../constants';
5
+ import { mapBase } from './mapBase';
6
+
7
+ export const mapVideoProgress = (
8
+ triggerName: AnalyticsTriggers,
9
+ payload: Payload,
10
+ ): VideoProgressResult => {
11
+ const { asset, duration = 0 } = payload;
12
+ const progressPercent = Number(triggerName.split('_')[1]);
13
+ const assetDuration = duration / SECOND_IN_MS || asset?.duration || 0;
14
+ const durationInSeconds = Math.round((assetDuration * progressPercent) / HUNDRED_PERCENT);
15
+ return {
16
+ ...mapBase(payload),
17
+ action: EVENTS.VIDEO_PROGRESS,
18
+ event_trigger: triggerName,
19
+ thing_id: payload.assetId || '',
20
+ attribution_id: payload.attributionId || '',
21
+ progress_pct: progressPercent,
22
+ duration: durationInSeconds,
23
+ source_page: DefaultScreens.PLAYBACK,
24
+ };
25
+ };
@@ -0,0 +1,34 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { PropertyType } from '@24i/smartapps-datalayer/models';
3
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
4
+ import { DefaultScreens, EVENTS } from '../constants';
5
+ import { VideoStartResult, Payload } from '../types';
6
+ import { mapBase } from './mapBase';
7
+
8
+ const HUNDRED_PERCENT = 100;
9
+
10
+ export const mapVideoStart = (
11
+ triggerName: AnalyticsTriggers,
12
+ payload: Payload,
13
+ ): VideoStartResult => {
14
+ const { duration = 0, asset } = payload;
15
+ const assetDuration = duration / SECOND_IN_MS || asset?.duration || 0;
16
+ const startPosition = Number(asset?.properties?.find(
17
+ (property) => property.type === PropertyType.WATCH_PROGRESS,
18
+ ) || 0);
19
+ let progressPercent = 0;
20
+ if (assetDuration !== 0 && startPosition !== 0) {
21
+ progressPercent = Number(((startPosition / assetDuration) * HUNDRED_PERCENT).toFixed(2));
22
+ }
23
+ return {
24
+ ...mapBase(payload),
25
+ action: EVENTS.VIDEO_START,
26
+ event_trigger: triggerName,
27
+ thing_id: payload.assetId || '',
28
+ attribution_id: payload.attributionId || '',
29
+ duration: assetDuration,
30
+ progress_pct: progressPercent,
31
+ source_page: DefaultScreens.PLAYBACK,
32
+ source_rail: '', // TODO: asset.sectionLabel,
33
+ };
34
+ };
@@ -0,0 +1,32 @@
1
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
+ import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
3
+ import { PropertyType } from '@24i/smartapps-datalayer/models';
4
+ import { DefaultScreens, EVENTS, HUNDRED_PERCENT } from '../constants';
5
+ import { Payload, VideoStopResult } from '../types';
6
+ import { mapBase } from './mapBase';
7
+
8
+ export const mapVideoStop = (
9
+ triggerName: AnalyticsTriggers,
10
+ payload: Payload,
11
+ ): VideoStopResult | undefined => {
12
+ const { duration = 0, asset } = payload;
13
+ const assetDuration = duration / SECOND_IN_MS || asset?.duration || 0;
14
+ const startPosition = Number(asset?.properties?.find(
15
+ (property) => property.type === PropertyType.WATCH_PROGRESS,
16
+ ) || 0);
17
+ let progressPercent = 0;
18
+ if (assetDuration !== 0 && startPosition !== 0) {
19
+ progressPercent = Number(((startPosition / assetDuration) * HUNDRED_PERCENT));
20
+ }
21
+ return {
22
+ ...mapBase(payload),
23
+ action: EVENTS.VIDEO_STOP,
24
+ event_trigger: triggerName,
25
+ thing_id: payload.assetId || '',
26
+ attribution_id: payload.attributionId || '',
27
+ progress_pct: progressPercent,
28
+ duration,
29
+ source_page: DefaultScreens.PLAYBACK,
30
+ source_rail: '', // TODO: payload.payload.asset.sectionLabel,
31
+ };
32
+ };
@@ -0,0 +1,132 @@
1
+ import { Asset } from '@24i/smartapps-datalayer/models';
2
+ import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
3
+ import type { AnyPayload, UserInfo, AppInfo, AdType } from '../../interface';
4
+
5
+ interface ScreenParams {
6
+ screen: string;
7
+ screenName: string;
8
+ id: string;
9
+ asset: Asset;
10
+ }
11
+ export interface CorePayload {
12
+ timestamp?: number;
13
+ params?: ScreenParams;
14
+ asset?: Asset;
15
+ source?: string;
16
+ duration?: number;
17
+ assetId?: string;
18
+ percentOfPlayback?: number;
19
+ attributionId?: string;
20
+ }
21
+
22
+ export interface SessionInfo {
23
+ sessionId: number;
24
+ sessionNumber: number;
25
+ }
26
+
27
+ export interface DeviceInfo {
28
+ appVersion: string,
29
+ manufacturer: string,
30
+ platform: string,
31
+ deviceId: string,
32
+ deviceModel: string,
33
+ }
34
+
35
+ export interface SceneInfo {
36
+ sceneName: string,
37
+ sceneId: string,
38
+ sceneType?: string,
39
+ }
40
+
41
+ export interface AdInfo {
42
+ adId: string;
43
+ adName: string;
44
+ adType: AdType;
45
+ adDuration: string;
46
+ adPosition: string;
47
+ }
48
+
49
+ export type Payload = CorePayload
50
+ & SceneInfo
51
+ & SessionInfo
52
+ & UserInfo
53
+ & DeviceInfo
54
+ & AppInfo
55
+ & AdInfo;
56
+
57
+ export type EventBody = AnyPayload;
58
+
59
+ export type EventMappingFunction = (
60
+ triggerName: AnalyticsTriggers,
61
+ payload: Payload
62
+ ) => AnyPayload | void;
63
+
64
+ export type BaseResult = {
65
+ device_appversion: string,
66
+ session_id: string;
67
+ timestamp_initiated: string;
68
+ device_id: string;
69
+ device_type: string;
70
+ device_platform: string;
71
+ device_manufacturer: string;
72
+ device_model: string;
73
+ device_timezone: string;
74
+ service_id: string;
75
+ user_id?: string;
76
+ user_profile_id?: string;
77
+ custom_gdpr_status?: boolean;
78
+ };
79
+
80
+ export type CoreResult = BaseResult & {
81
+ action: string;
82
+ event_trigger: string;
83
+ };
84
+ export type SceneViewResult = CoreResult & {
85
+ source_page: string;
86
+ thing_id: string;
87
+ attribution_id: string;
88
+ };
89
+ export type BufferingResult = SceneViewResult;
90
+
91
+ export type ScrollResult = SceneViewResult & {
92
+ percent_scrolled: string;
93
+ };
94
+ export type PlayerOpenResult = CoreResult & {
95
+ thing_id: string;
96
+ attribution_id: string;
97
+ source_page: string;
98
+ source_rail?: string | null;
99
+ };
100
+
101
+ export type VideoBaseResult = CoreResult & {
102
+ thing_id: string;
103
+ attribution_id: string;
104
+ duration: number;
105
+ progress_pct: number;
106
+ source_page: string;
107
+ };
108
+
109
+ export type VideoStartResult = VideoBaseResult & {
110
+ source_rail?: string | null;
111
+ };
112
+
113
+ export type VideoPauseResult = VideoBaseResult;
114
+
115
+ export type VideoStopResult = VideoStartResult;
116
+
117
+ export type VideoProgressResult = VideoBaseResult;
118
+
119
+ export type VideoCompleteResult = VideoBaseResult;
120
+
121
+ export type PlayerCloseResult = VideoBaseResult;
122
+
123
+ export type AdEventResult = CoreResult & {
124
+ ad_id: string;
125
+ ad_name: string;
126
+ ad_position: AdType;
127
+ ad_playback_position: string;
128
+ ad_playback_duration: string;
129
+ thing_id: string;
130
+ attribution_id: string;
131
+ custom_campaign_url: string;
132
+ };
@@ -0,0 +1 @@
1
+ export * from '@24i/appstage-shared-analytics';
@@ -0,0 +1,3 @@
1
+ export { analytics } from './Analytics';
2
+ export { A } from './A';
3
+ export { analyticsOnScroll } from './analyticsOnScroll';
@@ -0,0 +1 @@
1
+ export * from '@24i/appstage-shared-analytics/dist/interface';
@@ -0,0 +1,8 @@
1
+ const RANDOM_SEED = 2147483647;
2
+ /**
3
+ * Recommended way to generate session id by Google.
4
+ * Blackbox
5
+ */
6
+ export const generateSessionId = () => (
7
+ Math.floor(Math.random() * (RANDOM_SEED - 0 + 1) + 0)
8
+ );