@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,18 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaSearchResult } from '../types';
3
- import { AppEvents, TrackEventType } from '../constants';
4
-
5
- export const mapSearch = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): TeaSearchResult => {
9
- const searchEventName = payload.searchSuccess
10
- ? AnalyticsTriggers.SEARCH_SUCCESS
11
- : AnalyticsTriggers.SEARCH_FAILED;
12
- return {
13
- app_events: AppEvents[searchEventName],
14
- event_trigger: searchEventName,
15
- track_event_type: TrackEventType.ACTIVITY,
16
- search_keyword: payload.searchTerm,
17
- };
18
- };
@@ -1,8 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaSearchResult } from '../types';
3
- import { mapSearch } from './mapSearch';
4
-
5
- export const mapSearchFailed = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): TeaSearchResult => (mapSearch(triggerName, payload));
@@ -1,8 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, TeaSearchResult } from '../types';
3
- import { mapSearch } from './mapSearch';
4
-
5
- export const mapSearchSuccess = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): TeaSearchResult => (mapSearch(triggerName, payload));
@@ -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 mapVideoPause = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.playback_pause,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.playback_pause,
14
- ...(mapMediaPayload(payload)),
15
- });
@@ -1,18 +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 mapVideoProgress = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => {
10
- const appEvent = (AppEvents as any)[triggerName] ?? '';
11
- return {
12
- app_events: appEvent,
13
- event_trigger: triggerName,
14
- track_event_type: TrackEventType.ACTIVITY,
15
- video_event: appEvent,
16
- ...(mapMediaPayload(payload)),
17
- };
18
- };
@@ -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 mapVideoResume = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.playback_unpause,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.playback_unpause,
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 mapVideoStart = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.playback_start,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.playback_start,
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 mapVideoStop = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): TeaVideoResult => ({
10
- app_events: AppEvents.playback_stop,
11
- event_trigger: triggerName,
12
- track_event_type: TrackEventType.ACTIVITY,
13
- video_event: AppEvents.playback_stop,
14
- ...(mapMediaPayload(payload)),
15
- });
@@ -1,156 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { AppEvents, EVENTS, TrackEventType as TrackEventTypeEnum } from './constants';
3
- import type {
4
- UserInfo, AppInfo, VideoProgress, SceneInfo, PlayerSession, ErrorInfo,
5
- } from '../../interface';
6
-
7
- export type TeaEventType = 'view' | 'link';
8
- type TeaAppType = 'html5' | 'react' | 'native';
9
- type TeaOttType = 'Samsung' | 'LG' | 'AndroidTV' | 'FireTV' | 'tvOS' | 'Chromecast'
10
- | 'Roku' | 'Set-top Box' | 'Xiaomi' | 'SmartTV';
11
- type TeaTrackEventType = `${TrackEventTypeEnum}`;
12
- type TeaAppEventValues = typeof AppEvents[keyof typeof AppEvents];
13
- type TeaAnalyticsTriggerValues = `${AnalyticsTriggers}`;
14
-
15
- export interface PropertyIds {
16
- [key: string]: number;
17
- }
18
-
19
- export type CustomMappers = Partial<Record<EVENTS, EventMappingFunction>>;
20
-
21
- export type TealiumDataMapper = {
22
- app_type: TeaAppType, // e.g. 'html5' for bigscreen
23
- entity: string, // e.g: 'rfe'
24
- property_ids: PropertyIds, // e.g: 414
25
- language?: string, // e.g: 'english'
26
- platform_short?: string,
27
- platform_type?: string,
28
- short_language_service?: string, // e.g: 'eng'
29
- };
30
-
31
- export type TealiumCustomConfiguration = {
32
- customMappers?: CustomMappers,
33
- };
34
-
35
- export type TealiumAnalyticsConfiguration = {
36
- account: string, // e.g: 'bbg'
37
- profile: string, // e.g: 'main'
38
- environment: string, // e.g: 'dev'
39
- dataMapper?: TealiumDataMapper,
40
- datasource?: string, // e.g: '6g2fzf'
41
- baseURL?: string, // e.g: 'https://collect.tealiumiq.com/event',
42
- } & TealiumCustomConfiguration;
43
-
44
- export type CorePayload = {
45
- app_id: string;
46
- app_type: TeaAppType;
47
- };
48
-
49
- export type SessionInfo = {
50
- sessionId: number;
51
- sessionNumber: number;
52
- };
53
-
54
- export type DeviceInfo = {
55
- appVersion: string,
56
- manufacturer: string,
57
- platform: string,
58
- platformVersion: string,
59
- deviceId: string,
60
- };
61
-
62
- export type SearchInfo = {
63
- searchTerm?: string,
64
- searchSuccess?: boolean,
65
- };
66
-
67
- export type SubPageInfo = {
68
- section: string,
69
- subcontentType?: string,
70
- pubDate?: string,
71
- };
72
-
73
- export type Payload = CorePayload &
74
- AppInfo &
75
- SceneInfo &
76
- SubPageInfo &
77
- PlayerSession &
78
- VideoProgress &
79
- SessionInfo &
80
- UserInfo &
81
- SearchInfo &
82
- ErrorInfo;
83
-
84
- export type EventMappingFunction = (
85
- triggerName: AnalyticsTriggers,
86
- payload: Payload
87
- ) => TeaResult;
88
-
89
- export type TeaStaticCoreResult = {
90
- tealium_account: string,
91
- tealium_profile: string,
92
- tealium_environment?: string,
93
- tealium_datasource?: string,
94
- instance?: string,
95
- app_id: string;
96
- app_type: TeaAppType;
97
- entity: string;
98
- language: string;
99
- language_service: string;
100
- ott_type: TeaOttType;
101
- platform_short: string;
102
- platform_type: string;
103
- property_id: string;
104
- short_language_service: string;
105
- };
106
-
107
- export type TeaCoreResult = {
108
- app_events?: TeaAppEventValues | '', // '' for Scene View event
109
- event_trigger: TeaAnalyticsTriggerValues,
110
- track_event_type: TeaTrackEventType,
111
- };
112
-
113
- export type TeaPageResult = {
114
- page_name: string,
115
- page_title?: string,
116
- content_type: string,
117
- section?: string,
118
- categories: string,
119
- subcontent_type?: string;
120
- };
121
-
122
- export type TeaMediaResult = TeaPageResult & {
123
- video_name: string,
124
- video_length: number,
125
- video_position: number,
126
- media_type: string,
127
- canonical_url: string,
128
- video_series_title: string,
129
- byline: string,
130
- pub_date: string,
131
- article_uid: string,
132
- tags: string,
133
- };
134
-
135
- export type TeaSceneViewResult = TeaCoreResult & TeaPageResult;
136
-
137
- export type TeaVideoResult = TeaCoreResult & TeaMediaResult & {
138
- video_event?: string,
139
- };
140
-
141
- export type TeaErrorResult = TeaCoreResult & {
142
- message: string,
143
- };
144
-
145
- export type TeaPlayerOpenResult = TeaCoreResult & {
146
- thing_id: string;
147
- source_page: string;
148
- source_rail?: string | null;
149
- };
150
-
151
- export type TeaSearchResult = TeaCoreResult & {
152
- search_keyword?: string;
153
- };
154
-
155
- export type TeaResult = TeaSceneViewResult | TeaVideoResult | TeaErrorResult
156
- | TeaPlayerOpenResult | TeaSearchResult;
@@ -1,116 +0,0 @@
1
- import { Storage } from '@24i/bigscreen-sdk/storage';
2
- import { device } from '@24i/bigscreen-sdk/device';
3
- import { MINUTE_IN_MS } from '@24i/bigscreen-sdk/utils/timeConstants';
4
- import { createTimeout } from '@24i/bigscreen-sdk/utils/timers';
5
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
6
- import {
7
- TRIGGER_NAME_TO_24IQ_EVENTS,
8
- } from './constants';
9
- import { EVENTS_MAPPING } from './interface';
10
- import type { AnalyticsClient, AnyPayload } from '../../interface';
11
- import { generateSessionId } from '../../utils/generateSessionId';
12
- import { CorePayload, DeviceInfo, EventBody, Payload, SessionInfo } from './types';
13
-
14
- // eslint-disable-next-line no-magic-numbers
15
- const SESSION_TIMEOUT = 30 * MINUTE_IN_MS;
16
-
17
- const TWENYFOURIQ_SESSION_COUNTER = '24iQ_session_counter';
18
-
19
- export class TwentyFourIQClient implements AnalyticsClient {
20
- name = '24iQ';
21
-
22
- deviceInfo = {
23
- manufacturer: '',
24
- platform: '',
25
- platformVersion: '',
26
- deviceId: '',
27
- appVersion: '',
28
- applicationId: '',
29
- deviceType: '',
30
- };
31
-
32
- constantPayload: CorePayload & SessionInfo & DeviceInfo = {
33
- sessionNumber: 0,
34
- sessionId: 0,
35
- ...this.deviceInfo,
36
- };
37
-
38
- sessionTimeout = createTimeout();
39
-
40
- isSessionActive = false;
41
-
42
- sessionStartSent = false;
43
-
44
- constructor(private baseURL: string, private appVersion: string = '') {
45
- this.init();
46
- }
47
-
48
- async init() {
49
- this.deviceInfo.manufacturer = await device.getManufacturerName();
50
- this.deviceInfo.platform = await device.getPlatformName();
51
- this.deviceInfo.platformVersion = await device.getPlatformVersion();
52
- this.deviceInfo.deviceId = await device.getUuid();
53
- await this.startSession();
54
- }
55
-
56
- async startSession() {
57
- const sessionNumber = parseInt(
58
- await Storage.getItem(TWENYFOURIQ_SESSION_COUNTER) ?? '0', 10,
59
- ) + 1;
60
- this.constantPayload.sessionNumber = sessionNumber;
61
- this.constantPayload.sessionId = generateSessionId();
62
- this.constantPayload.manufacturer = this.deviceInfo.manufacturer;
63
- this.constantPayload.platform = this.deviceInfo.platform;
64
- this.constantPayload.platformVersion = this.deviceInfo.platformVersion;
65
- this.constantPayload.appVersion = this.appVersion;
66
- await Storage.setItem(TWENYFOURIQ_SESSION_COUNTER, sessionNumber.toString());
67
- this.isSessionActive = true;
68
- this.setSessionTimeout();
69
- }
70
-
71
- setSessionTimeout() {
72
- this.sessionTimeout.set(() => {
73
- this.isSessionActive = false;
74
- this.sessionStartSent = false;
75
- }, SESSION_TIMEOUT);
76
- }
77
-
78
- async sendEvent(eventBody: EventBody) {
79
- try {
80
- await fetch(this.baseURL, {
81
- method: 'POST',
82
- body: JSON.stringify(eventBody),
83
- headers: {
84
- Accept: 'application/json',
85
- 'Content-Type': 'application/json;charset=UTF-8',
86
- },
87
- });
88
- } catch (error) {
89
- console.warn(`[${this.name}] Error sendEvent: `, error);
90
- }
91
- }
92
-
93
- async onEvent(triggerName: AnalyticsTriggers, payload: AnyPayload): Promise<void> {
94
- const events = TRIGGER_NAME_TO_24IQ_EVENTS[triggerName];
95
- if (this.isSessionActive) {
96
- this.setSessionTimeout();
97
- } else {
98
- await this.startSession();
99
- }
100
- if (!events) return;
101
- await Promise.all(
102
- events.map(async (event) => {
103
- const mappingFunction = EVENTS_MAPPING[event];
104
- try {
105
- const eventBody = mappingFunction?.(triggerName, {
106
- ...this.constantPayload,
107
- ...payload,
108
- } as unknown as Payload);
109
- if (eventBody) await this.sendEvent(eventBody);
110
- } catch (e) {
111
- console.warn(`[${this.name}] Error onEvent: `, e);
112
- }
113
- }),
114
- );
115
- }
116
- }
@@ -1,99 +0,0 @@
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_LOADED,
58
- AnalyticsTriggers.AD_SKIPPED,
59
- ];
60
-
61
- export enum EVENTS {
62
- SCENE_VIEW = 'scene_view',
63
- BUFFERING = 'buffering',
64
- VIDEO_PROGRESS = 'video_progress',
65
- VIDEO_START = 'video_start',
66
- VIDEO_COMPLETE = 'video_complete',
67
- VIDEO_STOP = 'video_stop',
68
- VIDEO_PAUSE = 'video_pause',
69
- PLAYER_CLOSE = 'player_close',
70
- PLAYER_OPEN = 'player_open',
71
- SCROLL = 'scroll',
72
- AD_LOADED = 'ad_loaded',
73
- AD_SKIPPED = 'ad_skipped',
74
- }
75
-
76
- export const TRIGGER_NAME_TO_24IQ_EVENTS: { [K in AnalyticsTriggers]?: EVENTS[]; } = {
77
- [AnalyticsTriggers.SCENE_VIEW]: [EVENTS.SCENE_VIEW],
78
- [AnalyticsTriggers.BUFFERING_START]: [EVENTS.BUFFERING],
79
- [AnalyticsTriggers.BUFFERING_STOP]: [EVENTS.BUFFERING],
80
- [AnalyticsTriggers.PLAYBACK_10]: [EVENTS.VIDEO_PROGRESS],
81
- [AnalyticsTriggers.PLAYBACK_25]: [EVENTS.VIDEO_PROGRESS],
82
- [AnalyticsTriggers.PLAYBACK_50]: [EVENTS.VIDEO_PROGRESS],
83
- [AnalyticsTriggers.PLAYBACK_75]: [EVENTS.VIDEO_PROGRESS],
84
- [AnalyticsTriggers.PLAYBACK_90]: [EVENTS.VIDEO_COMPLETE],
85
- [AnalyticsTriggers.PLAYBACK_PAUSE]: [EVENTS.VIDEO_PAUSE],
86
- [AnalyticsTriggers.PLAYBACK_START]: [EVENTS.VIDEO_START],
87
- [AnalyticsTriggers.PLAYBACK_STOP]: [EVENTS.VIDEO_STOP],
88
- [AnalyticsTriggers.PLAYER_CLOSE]: [EVENTS.PLAYER_CLOSE],
89
- [AnalyticsTriggers.PLAYER_OPEN]: [EVENTS.PLAYER_OPEN],
90
- [AnalyticsTriggers.SCROLL_25]: [EVENTS.SCROLL],
91
- [AnalyticsTriggers.SCROLL_50]: [EVENTS.SCROLL],
92
- [AnalyticsTriggers.SCROLL_75]: [EVENTS.SCROLL],
93
- [AnalyticsTriggers.SCROLL_90]: [EVENTS.SCROLL],
94
- [AnalyticsTriggers.APP_CLOSE]: [EVENTS.VIDEO_STOP, EVENTS.PLAYER_CLOSE],
95
- [AnalyticsTriggers.AD_LOADED]: [EVENTS.AD_LOADED],
96
- [AnalyticsTriggers.AD_SKIPPED]: [EVENTS.AD_SKIPPED],
97
- };
98
-
99
- export const HUNDRED_PERCENT = 100;
@@ -1,34 +0,0 @@
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
- };
@@ -1,2 +0,0 @@
1
- export { TwentyFourIQClient } from './TwentyFourIQClient';
2
- export { TWENTY_FOUR_IQ_TRIGGERS } from './constants';
@@ -1,31 +0,0 @@
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 { mapAdLoaded } from './mappers/mapAdLoaded';
15
- import { mapAdSkipped } from './mappers/mapAdSkipped';
16
- import { EventMappingFunction } from './types';
17
-
18
- export const EVENTS_MAPPING: Record<EVENTS, EventMappingFunction> = {
19
- [EVENTS.SCENE_VIEW]: mapSceneView,
20
- [EVENTS.BUFFERING]: mapBuffering,
21
- [EVENTS.SCROLL]: mapScroll,
22
- [EVENTS.PLAYER_OPEN]: mapPlayerOpen,
23
- [EVENTS.PLAYER_CLOSE]: mapPlayerClose,
24
- [EVENTS.VIDEO_START]: mapVideoStart,
25
- [EVENTS.VIDEO_STOP]: mapVideoStop,
26
- [EVENTS.VIDEO_PROGRESS]: mapVideoProgress,
27
- [EVENTS.VIDEO_COMPLETE]: mapVideoComplete,
28
- [EVENTS.VIDEO_PAUSE]: mapVideoPause,
29
- [EVENTS.AD_LOADED]: mapAdLoaded,
30
- [EVENTS.AD_SKIPPED]: mapAdSkipped,
31
- };
@@ -1,13 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { getAssetId } from '../helper';
3
- import { Payload, AdLoadedResult } from '../types';
4
- import { mapBase } from './mapBase';
5
-
6
- export const mapAdLoaded = (triggerName: AnalyticsTriggers, payload: Payload): AdLoadedResult => ({
7
- ...mapBase(payload),
8
- action: triggerName,
9
- event_trigger: triggerName,
10
- thing_id: getAssetId(payload.sceneId),
11
- player_advertisment_name: '', // TODO: adPayload?.adName,
12
- player_advertisment_position: 0, // TODO: adPayload?.adPosition,
13
- });
@@ -1,16 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { getAssetId } from '../helper';
3
- import { Payload, AdSkippedResult } from '../types';
4
- import { mapBase } from './mapBase';
5
-
6
- export const mapAdSkipped = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): AdSkippedResult => ({
10
- ...mapBase(payload),
11
- action: triggerName,
12
- event_trigger: triggerName,
13
- thing_id: getAssetId(payload.sceneId),
14
- player_advertisment_name: '', // TODO: adPayload?.adName,
15
- player_advertisment_position: 0, // TODO: adPayload?.adPosition,
16
- });
@@ -1,21 +0,0 @@
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 formatedTimestamp = getTimezoneOffsetString();
8
- return {
9
- session_id: payload.sessionId.toString(),
10
- timestamp_initiated: formatDateTime(timestampDate),
11
- device_id: payload.deviceId,
12
- device_type: payload.deviceType,
13
- device_platform: payload.platform || '',
14
- device_timezone: formatedTimestamp,
15
- service_id: payload.serviceId || '',
16
- user_id: payload.userId || '',
17
- user_profile_id: payload.userProfileId,
18
- custom_gdpr_status: payload.gdprStatus,
19
- ...(!payload.userId && { user_anon_id: payload.deviceId }),
20
- };
21
- };
@@ -1,15 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { getAssetId } from '../helper';
3
- import { Payload, BufferingResult } from '../types';
4
- import { mapBase } from './mapBase';
5
-
6
- export const mapBuffering = (
7
- triggerName: AnalyticsTriggers,
8
- payload: Payload,
9
- ): BufferingResult => ({
10
- ...mapBase(payload),
11
- action: triggerName,
12
- event_trigger: triggerName,
13
- thing_id: getAssetId(payload.sceneId),
14
- source_page: payload.sceneName,
15
- });
@@ -1,24 +0,0 @@
1
- import { SECOND_IN_MS } from '@24i/bigscreen-sdk/utils';
2
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
3
- import { EVENTS, HUNDRED_PERCENT } from '../constants';
4
- import { PlayerCloseResult, Payload } from '../types';
5
- import { mapBase } from './mapBase';
6
- import { getAssetId } from '../helper';
7
-
8
- export const mapPlayerClose = (
9
- triggerName: AnalyticsTriggers,
10
- payload: Payload,
11
- ): PlayerCloseResult | undefined => {
12
- const progressPercent = Number(payload.percentOfPlayback);
13
- const assetDuration = Number(payload.duration) / SECOND_IN_MS
14
- || payload?.asset?.duration || 0;
15
- const duration = Math.round((assetDuration * progressPercent) / HUNDRED_PERCENT);
16
- return {
17
- ...mapBase(payload),
18
- action: EVENTS.PLAYER_CLOSE,
19
- event_trigger: triggerName,
20
- thing_id: getAssetId(payload.sceneId),
21
- duration,
22
- progress_pct: progressPercent,
23
- };
24
- };