@npo/player 1.23.2 → 1.24.1

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 (146) hide show
  1. package/README.md +1 -1
  2. package/lib/js/playeractions/handlers/error.js +2 -2
  3. package/lib/js/playeractions/handlers/error.test.js +2 -2
  4. package/lib/js/playeractions/handlers/handleoffsets.d.ts +4 -6
  5. package/lib/js/playeractions/handlers/handleoffsets.js +16 -17
  6. package/lib/js/playeractions/handlers/handleoffsets.test.js +73 -29
  7. package/lib/js/playeractions/handlers/mediasessionactions.js +24 -12
  8. package/lib/js/playeractions/handlers/processsourceconfig.js +16 -3
  9. package/lib/js/tracking/handlers/eventbinding.d.ts +1 -1
  10. package/lib/js/tracking/handlers/eventbinding.js +17 -23
  11. package/lib/js/tracking/handlers/eventlogging.d.ts +1 -1
  12. package/lib/js/tracking/handlers/eventlogging.js +18 -18
  13. package/lib/js/tracking/handlers/eventlogging.test.js +24 -24
  14. package/lib/js/tracking/handlers/playertrackerstart.js +4 -2
  15. package/lib/lang/nl.json +3 -1
  16. package/lib/npoplayer.d.ts +1 -2
  17. package/lib/npoplayer.js +30 -44
  18. package/lib/package.json +5 -5
  19. package/lib/services/a11y/setup.js +2 -2
  20. package/lib/services/a11y/setup.test.js +7 -8
  21. package/lib/services/advertHandlers/discardAdBreak.d.ts +2 -0
  22. package/lib/services/advertHandlers/discardAdBreak.js +11 -0
  23. package/lib/services/advertHandlers/discardAdBreak.test.js +60 -0
  24. package/lib/services/advertHandlers/handlePreRolls.d.ts +2 -0
  25. package/lib/services/advertHandlers/handlePreRolls.js +132 -0
  26. package/lib/services/advertHandlers/handlePrerolls.test.js +52 -0
  27. package/lib/services/cdnProviders/cdnProviders.d.ts +4 -0
  28. package/lib/services/cdnProviders/cdnProviders.js +22 -0
  29. package/lib/services/cdnProviders/cndProviders.test.d.ts +1 -0
  30. package/lib/services/cdnProviders/cndProviders.test.js +22 -0
  31. package/lib/services/eventListenerHandlers/removeEventListeners.d.ts +1 -1
  32. package/lib/services/eventListenerHandlers/removeEventListeners.js +4 -4
  33. package/lib/services/eventListenerHandlers/removeEventListeners.test.js +28 -13
  34. package/lib/services/liveStreamHandlers/handleLiveStreamControls.d.ts +1 -1
  35. package/lib/services/liveStreamHandlers/handleLiveStreamControls.js +3 -3
  36. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.d.ts +2 -0
  37. package/lib/services/liveStreamHandlers/handleLiveStreamControls.test.js +65 -0
  38. package/lib/services/localStorageHandlers/localStorageHandlers.d.ts +1 -1
  39. package/lib/services/localStorageHandlers/localStorageHandlers.test.js +0 -1
  40. package/lib/services/npoPlayerAPI/contants.d.ts +5 -0
  41. package/lib/services/npoPlayerAPI/contants.js +5 -0
  42. package/lib/services/npoPlayerAPI/npoPlayerAPI.d.ts +17 -4
  43. package/lib/services/npoPlayerAPI/npoPlayerAPI.js +68 -3
  44. package/lib/services/npoPlayerAPI/npoPlayerAPI.test.js +66 -1
  45. package/lib/services/segmentHandlers/addSegmentEventListeners.js +3 -3
  46. package/lib/services/segmentHandlers/addSegmentEventListeners.test.js +10 -9
  47. package/lib/services/segmentHandlers/convertFragmentToSegment.d.ts +1 -1
  48. package/lib/services/segmentHandlers/handleSegmentSeek.d.ts +1 -1
  49. package/lib/services/segmentHandlers/handleSegmentSeek.test.js +4 -4
  50. package/lib/services/segmentHandlers/handleSegmentTimeChanged.d.ts +1 -1
  51. package/lib/services/segmentHandlers/handleSegmentTimeChanged.test.js +33 -24
  52. package/lib/services/segmentHandlers/initSegment.d.ts +1 -1
  53. package/lib/services/segmentHandlers/initSegment.test.js +3 -1
  54. package/lib/services/segmentHandlers/setSegmentMarkers.d.ts +1 -1
  55. package/lib/services/services.d.ts +3 -1
  56. package/lib/services/services.js +8 -0
  57. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.d.ts +2 -0
  58. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.js +8 -0
  59. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.test.d.ts +1 -0
  60. package/lib/services/verticalVideoHandlers/handleVerticalVideoControls.test.js +36 -0
  61. package/lib/src/js/playeractions/handlers/handleoffsets.d.ts +4 -6
  62. package/lib/src/js/tracking/handlers/eventbinding.d.ts +1 -1
  63. package/lib/src/js/tracking/handlers/eventlogging.d.ts +1 -1
  64. package/lib/src/npoplayer.d.ts +1 -2
  65. package/lib/src/services/advertHandlers/discardAdBreak.d.ts +2 -0
  66. package/lib/src/services/advertHandlers/discardAdBreak.test.d.ts +1 -0
  67. package/lib/src/services/advertHandlers/handlePreRolls.d.ts +2 -0
  68. package/lib/src/services/advertHandlers/handlePrerolls.test.d.ts +1 -0
  69. package/lib/src/services/cdnProviders/cdnProviders.d.ts +4 -0
  70. package/lib/src/services/cdnProviders/cndProviders.test.d.ts +1 -0
  71. package/lib/src/services/eventListenerHandlers/removeEventListeners.d.ts +1 -1
  72. package/lib/src/services/liveStreamHandlers/handleLiveStreamControls.d.ts +1 -1
  73. package/lib/src/services/liveStreamHandlers/handleLiveStreamControls.test.d.ts +2 -0
  74. package/lib/src/services/localStorageHandlers/localStorageHandlers.d.ts +1 -1
  75. package/lib/src/services/npoPlayerAPI/contants.d.ts +5 -0
  76. package/lib/src/services/npoPlayerAPI/npoPlayerAPI.d.ts +17 -4
  77. package/lib/src/services/segmentHandlers/convertFragmentToSegment.d.ts +1 -1
  78. package/lib/src/services/segmentHandlers/handleSegmentSeek.d.ts +1 -1
  79. package/lib/src/services/segmentHandlers/handleSegmentTimeChanged.d.ts +1 -1
  80. package/lib/src/services/segmentHandlers/initSegment.d.ts +1 -1
  81. package/lib/src/services/segmentHandlers/setSegmentMarkers.d.ts +1 -1
  82. package/lib/src/services/services.d.ts +3 -1
  83. package/lib/src/services/verticalVideoHandlers/handleVerticalVideoControls.d.ts +2 -0
  84. package/lib/src/services/verticalVideoHandlers/handleVerticalVideoControls.test.d.ts +1 -0
  85. package/lib/src/types/events.d.ts +8 -1
  86. package/lib/src/types/interfaces.d.ts +8 -12
  87. package/lib/src/ui/components/audio/controlbar.d.ts +1 -1
  88. package/lib/src/ui/components/controlbar.d.ts +1 -1
  89. package/lib/src/ui/components/seekbar.d.ts +1 -1
  90. package/lib/src/ui/components/settingspanel.d.ts +1 -1
  91. package/lib/src/ui/components/verticalvideo/controlbar.d.ts +3 -0
  92. package/lib/src/ui/handlers/streamhandler.d.ts +2 -4
  93. package/lib/src/ui/uicontainer.d.ts +2 -2
  94. package/lib/tests/mocks/mockNpoplayer.js +0 -1
  95. package/lib/tests/mocks/playerContextMock.d.ts +67 -0
  96. package/lib/tests/mocks/playerContextMock.js +118 -0
  97. package/lib/types/events.d.ts +8 -1
  98. package/lib/types/events.js +184 -1
  99. package/lib/types/interfaces.d.ts +8 -12
  100. package/lib/types/interfaces.js +1 -0
  101. package/lib/ui/components/audio/controlbar.d.ts +1 -1
  102. package/lib/ui/components/audio/controlbar.js +6 -6
  103. package/lib/ui/components/controlbar.d.ts +1 -1
  104. package/lib/ui/components/controlbar.js +13 -11
  105. package/lib/ui/components/nativemobile/controlbar.js +0 -1
  106. package/lib/ui/components/seekbar.js +1 -1
  107. package/lib/ui/components/settingspanel.d.ts +1 -1
  108. package/lib/ui/components/settingspanel.js +68 -84
  109. package/lib/ui/components/topbar.js +6 -3
  110. package/lib/ui/components/verticalvideo/controlbar.d.ts +3 -0
  111. package/lib/ui/components/verticalvideo/controlbar.js +34 -0
  112. package/lib/ui/handlers/streamhandler.d.ts +2 -4
  113. package/lib/ui/handlers/streamhandler.js +16 -7
  114. package/lib/ui/nativemobileuifactory.js +2 -0
  115. package/lib/ui/uicontainer.d.ts +2 -2
  116. package/lib/ui/uicontainer.js +35 -29
  117. package/package.json +5 -5
  118. package/src/style/components/_settingspanel.scss +35 -3
  119. package/src/style/components/_subtitles.scss +29 -25
  120. package/src/style/components/_textbuttons.scss +2 -2
  121. package/src/style/components/_volumeslider.scss +1 -0
  122. package/src/style/components/vertical-video/_bottombar.scss +19 -0
  123. package/src/style/components/vertical-video/_buttons.scss +23 -0
  124. package/src/style/components/vertical-video/_hugeplaybacktogglebutton.scss +14 -0
  125. package/src/style/components/vertical-video/_seekbar.scss +19 -0
  126. package/src/style/components/vertical-video/_settingsbutton.scss +7 -0
  127. package/src/style/components/vertical-video/_settingspanel.scss +14 -0
  128. package/src/style/components/vertical-video/_shortvideo.scss +14 -0
  129. package/src/style/components/vertical-video/_subtitles.scss +3 -0
  130. package/src/style/components/vertical-video/_topbar.scss +17 -0
  131. package/src/style/components/vertical-video/_volumeslider.scss +9 -0
  132. package/src/style/npoplayer.css +74 -34
  133. package/src/style/npoplayer.scss +2 -1
  134. package/src/style/variants/_player-small.scss +18 -10
  135. package/src/style/variants/_player-vertical.scss +23 -0
  136. package/lib/js/ads/ster.d.ts +0 -4
  137. package/lib/js/ads/ster.js +0 -126
  138. package/lib/js/ads/ster.test.js +0 -63
  139. package/lib/js/cdnproviders.d.ts +0 -1
  140. package/lib/js/cdnproviders.js +0 -16
  141. package/lib/src/js/ads/ster.d.ts +0 -4
  142. package/lib/src/js/cdnproviders.d.ts +0 -1
  143. package/lib/tests/mocks/mockPlayerContext.d.ts +0 -2
  144. package/lib/tests/mocks/mockPlayerContext.js +0 -40
  145. /package/lib/{js/ads/ster.test.d.ts → services/advertHandlers/discardAdBreak.test.d.ts} +0 -0
  146. /package/lib/{src/js/ads/ster.test.d.ts → services/advertHandlers/handlePrerolls.test.d.ts} +0 -0
@@ -1,126 +0,0 @@
1
- import { AdTagType, PlayerEvent } from 'bitmovin-player';
2
- import { NpoPlayerUIVariants } from '../../types/interfaces';
3
- export async function handlePreRolls(playerapi, streamObject, npoplayer) {
4
- return new Promise((resolve) => {
5
- if (streamObject.metadata.hasPreroll == 'false' || streamObject.assets.preroll == undefined) {
6
- resolve();
7
- return;
8
- }
9
- const prerollUrl = streamObject.assets.preroll;
10
- let adIndex = 0;
11
- let totalAds = 0;
12
- let currentClickListener;
13
- let adUiSet = false;
14
- async function handleReady() {
15
- playerapi.off(PlayerEvent.Ready, handleReady);
16
- const advertConfig = {
17
- tag: {
18
- url: String(prerollUrl),
19
- type: AdTagType.VAST
20
- },
21
- id: 'Ad',
22
- position: 'pre'
23
- };
24
- await playerapi.ads.schedule(advertConfig);
25
- }
26
- playerapi.on(PlayerEvent.Ready, handleReady);
27
- async function handlePlay() {
28
- playerapi.off(PlayerEvent.Play, handlePlay);
29
- attemptSetAdUi();
30
- }
31
- playerapi.on(PlayerEvent.Play, handlePlay);
32
- function setAdUi() {
33
- const activeAdBreak = playerapi.ads.getActiveAdBreak();
34
- if (!activeAdBreak || !activeAdBreak.ads)
35
- return false;
36
- npoplayer.uiManager?.release();
37
- npoplayer.uiManager = undefined;
38
- if (npoplayer.playerContext) {
39
- npoplayer.createUIManager(playerapi, npoplayer.playerContext, NpoPlayerUIVariants.AD);
40
- }
41
- adUiSet = true;
42
- const adButton = npoplayer.uiComponents.adbutton;
43
- const currentAd = activeAdBreak.ads[0];
44
- adIndex = 1;
45
- totalAds = activeAdBreak.ads.length;
46
- adButton?.show();
47
- adClickHandler(currentAd, adButton);
48
- npoplayer.uiComponents.adlabel?.setText(`Advertentie 1 van ${activeAdBreak.ads.length}`);
49
- return true;
50
- }
51
- function attemptSetAdUi(attemptsLeft = 10) {
52
- if (attemptsLeft <= 0)
53
- return;
54
- if (!adUiSet) {
55
- setAdUi();
56
- setTimeout(() => {
57
- attemptSetAdUi(attemptsLeft - 1);
58
- }, 200);
59
- }
60
- }
61
- function handleAdStarted() {
62
- playerapi.off(PlayerEvent.AdStarted, handleAdStarted);
63
- const activeAdBreak = playerapi.ads.getActiveAdBreak();
64
- if (!activeAdBreak || !activeAdBreak.ads) {
65
- console.error('No active ad break data found');
66
- return;
67
- }
68
- if (!adUiSet)
69
- attemptSetAdUi();
70
- npoplayer.adBreakActive = true;
71
- }
72
- playerapi.on(PlayerEvent.AdStarted, handleAdStarted);
73
- function adClickHandler(ad, button) {
74
- const clickThroughCallback = ad.clickThroughUrlOpened;
75
- if (currentClickListener)
76
- button.onClick.unsubscribe(currentClickListener);
77
- currentClickListener = () => {
78
- try {
79
- window.open(ad.clickThroughUrl, '_blank');
80
- playerapi.pause();
81
- if (clickThroughCallback)
82
- clickThroughCallback();
83
- }
84
- catch (error) {
85
- console.log(error);
86
- }
87
- };
88
- button.onClick.subscribe(currentClickListener);
89
- }
90
- function handleAdFinished() {
91
- playerapi.off(PlayerEvent.AdFinished, handleAdFinished);
92
- const activeAdBreak = playerapi.ads.getActiveAdBreak();
93
- if (!activeAdBreak || !activeAdBreak.ads) {
94
- console.error('No active ad break data found');
95
- return;
96
- }
97
- if (adIndex >= totalAds) {
98
- handleAdBreakFinished();
99
- return;
100
- }
101
- const adButton = npoplayer.uiComponents.adbutton;
102
- const nextAd = activeAdBreak.ads[adIndex];
103
- adIndex += 1;
104
- adButton?.show();
105
- adClickHandler(nextAd, adButton);
106
- npoplayer.uiComponents.adlabel?.setText(`Advertentie ${adIndex} van ${activeAdBreak.ads.length}`);
107
- }
108
- playerapi.on(PlayerEvent.AdFinished, handleAdFinished);
109
- function handleAdBreakFinished() {
110
- playerapi.off(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
111
- playerapi.off(PlayerEvent.AdError, handleAdBreakFinished);
112
- npoplayer.adBreakActive = false;
113
- npoplayer.uiComponents.adbutton?.hide();
114
- npoplayer.uiComponents.adlabel?.hide();
115
- npoplayer.uiManager?.release();
116
- npoplayer.uiManager = undefined;
117
- if (npoplayer.playerContext) {
118
- npoplayer.createUIManager(playerapi, npoplayer.playerContext, NpoPlayerUIVariants.DEFAULT);
119
- }
120
- adUiSet = false;
121
- resolve();
122
- }
123
- playerapi.on(PlayerEvent.AdBreakFinished, handleAdBreakFinished);
124
- playerapi.on(PlayerEvent.AdError, handleAdBreakFinished);
125
- });
126
- }
@@ -1,63 +0,0 @@
1
- import { handlePreRolls } from './ster';
2
- jest.mock('bitmovin-player');
3
- jest.mock('../../npoplayer');
4
- describe('handlePreRolls', () => {
5
- let mockPlayerAPI;
6
- let mockNpoPlayer;
7
- beforeEach(() => {
8
- mockPlayerAPI = {
9
- ads: {
10
- schedule: jest.fn().mockResolvedValue(true),
11
- getActiveAdBreak: jest.fn()
12
- },
13
- on: jest.fn(),
14
- off: jest.fn()
15
- };
16
- mockNpoPlayer = {
17
- uiManager: {
18
- release: jest.fn()
19
- },
20
- createUIManager: jest.fn(),
21
- uiComponents: {
22
- adbutton: {
23
- show: jest.fn(),
24
- hide: jest.fn(),
25
- onClick: {
26
- subscribe: jest.fn(),
27
- unsubscribe: jest.fn()
28
- }
29
- },
30
- adlabel: {
31
- setText: jest.fn(),
32
- hide: jest.fn()
33
- }
34
- },
35
- adBreakActive: false
36
- };
37
- });
38
- it('should not schedule ads when hasPreroll is false', async () => {
39
- const streamObject = {
40
- metadata: {
41
- hasPreroll: 'false'
42
- },
43
- assets: {
44
- preroll: 'sample_url'
45
- }
46
- };
47
- await handlePreRolls(mockPlayerAPI, streamObject, mockNpoPlayer);
48
- expect(mockPlayerAPI.ads.schedule).not.toHaveBeenCalled();
49
- });
50
- it('should not schedule ads if preroll URL is missing', async () => {
51
- const streamObject = {
52
- metadata: {
53
- hasPreroll: 'true'
54
- },
55
- assets: {}
56
- };
57
- await handlePreRolls(mockPlayerAPI, streamObject, mockNpoPlayer);
58
- expect(mockPlayerAPI.ads.schedule).not.toHaveBeenCalled();
59
- });
60
- afterEach(() => {
61
- jest.clearAllMocks();
62
- });
63
- });
@@ -1 +0,0 @@
1
- export declare const npoCdnProviders: Map<any, any>;
@@ -1,16 +0,0 @@
1
- export const npoCdnProviders = new Map();
2
- npoCdnProviders.set('nep.global.ssl.fastly.net', 'NEP-FASTLY');
3
- npoCdnProviders.set('npo-fsly.cdn.streamgate.io', 'NEP-FASTLY');
4
- npoCdnProviders.set('cdn.streamgate.nl', 'NEP');
5
- npoCdnProviders.set('pr.lswcdn.net', 'NEP-LSW');
6
- npoCdnProviders.set('cdn.eurovisioncdn.net', 'EUROVISION');
7
- npoCdnProviders.set('npo.prd.cdn.bcms.kpn.com', 'KPN');
8
- npoCdnProviders.set('cdn.bcms.kpn.com', 'KPN');
9
- npoCdnProviders.set('Akamai', 'AKEMAI');
10
- npoCdnProviders.set('icecast.omroep.nl', 'OMROEP-ICECAST');
11
- npoCdnProviders.set('content.omroep.nl', 'OMROEP-CONTENT');
12
- npoCdnProviders.set('podcast.npo.nl', 'OMROEP-PODCAST');
13
- npoCdnProviders.set('video.omroep.nl', 'OMROEP-VIDEO');
14
- npoCdnProviders.set('download.omroep.nl', 'OMROEP-DOWNLOAD');
15
- npoCdnProviders.set('download.nos.nl', 'NOS');
16
- npoCdnProviders.set('entry.cdn.npoaudio.nl', 'NPOAUDIO');
@@ -1,4 +0,0 @@
1
- import { PlayerAPI } from 'bitmovin-player';
2
- import NpoPlayer from 'npoplayer';
3
- import { StreamObject } from '../../types/interfaces';
4
- export declare function handlePreRolls(playerapi: PlayerAPI, streamObject: StreamObject, npoplayer: NpoPlayer): Promise<void>;
@@ -1 +0,0 @@
1
- export declare const npoCdnProviders: Map<any, any>;
@@ -1,2 +0,0 @@
1
- import { PlayerContext } from '../../src/types/interfaces';
2
- export declare const mockPlayerContext: PlayerContext;
@@ -1,40 +0,0 @@
1
- import { mockNpoPlayer } from './mockNpoplayer';
2
- import { mockPlayerAPI } from './mockPlayerAPI';
3
- export const mockPlayerContext = {
4
- player: {
5
- load: jest.fn(),
6
- seek: jest.fn(),
7
- getCurrentTime: mockNpoPlayer.player?.getCurrentTime || (() => 0),
8
- play: jest.fn(),
9
- pause: jest.fn(),
10
- mute: jest.fn(),
11
- unmute: jest.fn(),
12
- isMuted: jest.fn().mockReturnValue(false),
13
- isPaused: jest.fn().mockReturnValue(true),
14
- on: jest.fn(),
15
- off: jest.fn(),
16
- setViewMode: jest.fn(),
17
- getViewMode: jest.fn(),
18
- getSupportedDRM: jest.fn(),
19
- getSupportedTech: jest.fn(),
20
- getTimeShift: jest.fn(),
21
- getContainer: jest.fn(),
22
- getNpoPlayerElement: jest.fn(),
23
- addClassToNpoPlayerElement: jest.fn(),
24
- removeClassFromNpoPlayerElement: jest.fn(),
25
- playerAPI: mockPlayerAPI,
26
- getVolume: function () {
27
- throw new Error('Function not implemented.');
28
- },
29
- setVolume: function (level) {
30
- throw new Error('Function not implemented.');
31
- },
32
- areSubtitlesEnabled: function () {
33
- throw new Error('Function not implemented.');
34
- },
35
- enableSubtitles: function () {
36
- throw new Error('Function not implemented.');
37
- }
38
- },
39
- npoplayer: mockNpoPlayer
40
- };