@npo/player 1.9.0
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.
- package/CHANGELOG.md +3 -0
- package/LICENSE +15 -0
- package/README.md +281 -0
- package/lib/js/ads/ster.d.ts +4 -0
- package/lib/js/ads/ster.js +159 -0
- package/lib/js/ads/ster.js.map +1 -0
- package/lib/js/ads/ster.test.d.ts +1 -0
- package/lib/js/ads/ster.test.js +91 -0
- package/lib/js/ads/ster.test.js.map +1 -0
- package/lib/js/api/getstreamobject.d.ts +3 -0
- package/lib/js/api/getstreamobject.js +19 -0
- package/lib/js/api/getstreamobject.js.map +1 -0
- package/lib/js/cdnproviders.d.ts +1 -0
- package/lib/js/cdnproviders.js +13 -0
- package/lib/js/cdnproviders.js.map +1 -0
- package/lib/js/checks/safari.d.ts +1 -0
- package/lib/js/checks/safari.js +10 -0
- package/lib/js/checks/safari.js.map +1 -0
- package/lib/js/checks/safari.test.d.ts +1 -0
- package/lib/js/checks/safari.test.js +21 -0
- package/lib/js/checks/safari.test.js.map +1 -0
- package/lib/js/drm/verifydrm.d.ts +4 -0
- package/lib/js/drm/verifydrm.js +38 -0
- package/lib/js/drm/verifydrm.js.map +1 -0
- package/lib/js/drm/verifydrm.test.d.ts +1 -0
- package/lib/js/drm/verifydrm.test.js +18 -0
- package/lib/js/drm/verifydrm.test.js.map +1 -0
- package/lib/js/fragments/setfragments.d.ts +3 -0
- package/lib/js/fragments/setfragments.js +68 -0
- package/lib/js/fragments/setfragments.js.map +1 -0
- package/lib/js/playeractions/customerrors.test.d.ts +1 -0
- package/lib/js/playeractions/customerrors.test.js +52 -0
- package/lib/js/playeractions/customerrors.test.js.map +1 -0
- package/lib/js/playeractions/handlers/customerrors.d.ts +50 -0
- package/lib/js/playeractions/handlers/customerrors.js +154 -0
- package/lib/js/playeractions/handlers/customerrors.js.map +1 -0
- package/lib/js/playeractions/handlers/error.d.ts +3 -0
- package/lib/js/playeractions/handlers/error.js +23 -0
- package/lib/js/playeractions/handlers/error.js.map +1 -0
- package/lib/js/playeractions/handlers/error.test.d.ts +1 -0
- package/lib/js/playeractions/handlers/error.test.js +45 -0
- package/lib/js/playeractions/handlers/error.test.js.map +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.d.ts +6 -0
- package/lib/js/playeractions/handlers/handleoffsets.js +71 -0
- package/lib/js/playeractions/handlers/handleoffsets.js.map +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.d.ts +1 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.js +50 -0
- package/lib/js/playeractions/handlers/handleoffsets.test.js.map +1 -0
- package/lib/js/playeractions/handlers/resolvekeypress.d.ts +3 -0
- package/lib/js/playeractions/handlers/resolvekeypress.js +55 -0
- package/lib/js/playeractions/handlers/resolvekeypress.js.map +1 -0
- package/lib/js/playeractions/playeractions.d.ts +3 -0
- package/lib/js/playeractions/playeractions.js +4 -0
- package/lib/js/playeractions/playeractions.js.map +1 -0
- package/lib/js/tracking/handlers/eventbinding.d.ts +10 -0
- package/lib/js/tracking/handlers/eventbinding.js +86 -0
- package/lib/js/tracking/handlers/eventbinding.js.map +1 -0
- package/lib/js/tracking/handlers/eventlogging.d.ts +11 -0
- package/lib/js/tracking/handlers/eventlogging.js +42 -0
- package/lib/js/tracking/handlers/eventlogging.js.map +1 -0
- package/lib/js/tracking/handlers/playertrackerinit.d.ts +13 -0
- package/lib/js/tracking/handlers/playertrackerinit.js +29 -0
- package/lib/js/tracking/handlers/playertrackerinit.js.map +1 -0
- package/lib/js/tracking/handlers/playertrackerstart.d.ts +8 -0
- package/lib/js/tracking/handlers/playertrackerstart.js +29 -0
- package/lib/js/tracking/handlers/playertrackerstart.js.map +1 -0
- package/lib/js/tracking/playertracker.d.ts +4 -0
- package/lib/js/tracking/playertracker.js +10 -0
- package/lib/js/tracking/playertracker.js.map +1 -0
- package/lib/js/ui/components/adbutton.d.ts +7 -0
- package/lib/js/ui/components/adbutton.js +21 -0
- package/lib/js/ui/components/adbutton.js.map +1 -0
- package/lib/js/ui/components/adlabel.d.ts +7 -0
- package/lib/js/ui/components/adlabel.js +17 -0
- package/lib/js/ui/components/adlabel.js.map +1 -0
- package/lib/js/ui/components/buttons.d.ts +30 -0
- package/lib/js/ui/components/buttons.js +89 -0
- package/lib/js/ui/components/buttons.js.map +1 -0
- package/lib/js/ui/components/controlbar.d.ts +3 -0
- package/lib/js/ui/components/controlbar.js +47 -0
- package/lib/js/ui/components/controlbar.js.map +1 -0
- package/lib/js/ui/components/ctabar.d.ts +9 -0
- package/lib/js/ui/components/ctabar.js +41 -0
- package/lib/js/ui/components/ctabar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/buttons.d.ts +13 -0
- package/lib/js/ui/components/nativemobile/buttons.js +43 -0
- package/lib/js/ui/components/nativemobile/buttons.js.map +1 -0
- package/lib/js/ui/components/nativemobile/controlbar.d.ts +2 -0
- package/lib/js/ui/components/nativemobile/controlbar.js +23 -0
- package/lib/js/ui/components/nativemobile/controlbar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/ctabar.d.ts +10 -0
- package/lib/js/ui/components/nativemobile/ctabar.js +12 -0
- package/lib/js/ui/components/nativemobile/ctabar.js.map +1 -0
- package/lib/js/ui/components/nativemobile/playnext.d.ts +10 -0
- package/lib/js/ui/components/nativemobile/playnext.js +16 -0
- package/lib/js/ui/components/nativemobile/playnext.js.map +1 -0
- package/lib/js/ui/components/nativemobile/topbar.d.ts +3 -0
- package/lib/js/ui/components/nativemobile/topbar.js +21 -0
- package/lib/js/ui/components/nativemobile/topbar.js.map +1 -0
- package/lib/js/ui/components/playnext.d.ts +11 -0
- package/lib/js/ui/components/playnext.js +11 -0
- package/lib/js/ui/components/playnext.js.map +1 -0
- package/lib/js/ui/components/settingspanel.d.ts +4 -0
- package/lib/js/ui/components/settingspanel.js +130 -0
- package/lib/js/ui/components/settingspanel.js.map +1 -0
- package/lib/js/ui/components/shared/playnextscreen.d.ts +2 -0
- package/lib/js/ui/components/shared/playnextscreen.js +18 -0
- package/lib/js/ui/components/shared/playnextscreen.js.map +1 -0
- package/lib/js/ui/components/titlebar.d.ts +3 -0
- package/lib/js/ui/components/titlebar.js +9 -0
- package/lib/js/ui/components/titlebar.js.map +1 -0
- package/lib/js/ui/components/topbar.d.ts +2 -0
- package/lib/js/ui/components/topbar.js +19 -0
- package/lib/js/ui/components/topbar.js.map +1 -0
- package/lib/js/ui/handlers/listboxhandlers.d.ts +5 -0
- package/lib/js/ui/handlers/listboxhandlers.js +41 -0
- package/lib/js/ui/handlers/listboxhandlers.js.map +1 -0
- package/lib/js/ui/handlers/nicamhandler.d.ts +2 -0
- package/lib/js/ui/handlers/nicamhandler.js +32 -0
- package/lib/js/ui/handlers/nicamhandler.js.map +1 -0
- package/lib/js/ui/handlers/nicamhandler.test.d.ts +1 -0
- package/lib/js/ui/handlers/nicamhandler.test.js +34 -0
- package/lib/js/ui/handlers/nicamhandler.test.js.map +1 -0
- package/lib/js/ui/handlers/playnexthandlers.d.ts +0 -0
- package/lib/js/ui/handlers/playnexthandlers.js +2 -0
- package/lib/js/ui/handlers/playnexthandlers.js.map +1 -0
- package/lib/js/ui/handlers/timecontrolhandlers.d.ts +3 -0
- package/lib/js/ui/handlers/timecontrolhandlers.js +23 -0
- package/lib/js/ui/handlers/timecontrolhandlers.js.map +1 -0
- package/lib/js/ui/nativemobileui.d.ts +6 -0
- package/lib/js/ui/nativemobileui.js +49 -0
- package/lib/js/ui/nativemobileui.js.map +1 -0
- package/lib/js/ui/uicontainer.d.ts +3 -0
- package/lib/js/ui/uicontainer.js +61 -0
- package/lib/js/ui/uicontainer.js.map +1 -0
- package/lib/js/utilities/localizationconfig.d.ts +6 -0
- package/lib/js/utilities/localizationconfig.js +8 -0
- package/lib/js/utilities/localizationconfig.js.map +1 -0
- package/lib/js/utilities/printversion.d.ts +1 -0
- package/lib/js/utilities/printversion.js +28 -0
- package/lib/js/utilities/printversion.js.map +1 -0
- package/lib/js/utilities/utilities.d.ts +60 -0
- package/lib/js/utilities/utilities.js +110 -0
- package/lib/js/utilities/utilities.js.map +1 -0
- package/lib/lang/nl.json +72 -0
- package/lib/npoplayer.d.ts +45 -0
- package/lib/npoplayer.js +518 -0
- package/lib/npoplayer.js.map +1 -0
- package/lib/npoplayer.test.d.ts +1 -0
- package/lib/npoplayer.test.js +12 -0
- package/lib/npoplayer.test.js.map +1 -0
- package/lib/package.json +88 -0
- package/lib/src/js/ads/ster.d.ts +4 -0
- package/lib/src/js/ads/ster.test.d.ts +1 -0
- package/lib/src/js/api/getstreamobject.d.ts +3 -0
- package/lib/src/js/cdnproviders.d.ts +1 -0
- package/lib/src/js/checks/safari.d.ts +1 -0
- package/lib/src/js/checks/safari.test.d.ts +1 -0
- package/lib/src/js/drm/verifydrm.d.ts +4 -0
- package/lib/src/js/drm/verifydrm.test.d.ts +1 -0
- package/lib/src/js/fragments/setfragments.d.ts +3 -0
- package/lib/src/js/playeractions/customerrors.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/customerrors.d.ts +50 -0
- package/lib/src/js/playeractions/handlers/error.d.ts +3 -0
- package/lib/src/js/playeractions/handlers/error.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/handleoffsets.d.ts +6 -0
- package/lib/src/js/playeractions/handlers/handleoffsets.test.d.ts +1 -0
- package/lib/src/js/playeractions/handlers/resolvekeypress.d.ts +3 -0
- package/lib/src/js/playeractions/playeractions.d.ts +3 -0
- package/lib/src/js/tracking/handlers/eventbinding.d.ts +10 -0
- package/lib/src/js/tracking/handlers/eventlogging.d.ts +11 -0
- package/lib/src/js/tracking/handlers/playertrackerinit.d.ts +13 -0
- package/lib/src/js/tracking/handlers/playertrackerstart.d.ts +8 -0
- package/lib/src/js/tracking/playertracker.d.ts +4 -0
- package/lib/src/js/ui/components/adbutton.d.ts +7 -0
- package/lib/src/js/ui/components/adlabel.d.ts +7 -0
- package/lib/src/js/ui/components/buttons.d.ts +30 -0
- package/lib/src/js/ui/components/controlbar.d.ts +3 -0
- package/lib/src/js/ui/components/ctabar.d.ts +9 -0
- package/lib/src/js/ui/components/nativemobile/buttons.d.ts +13 -0
- package/lib/src/js/ui/components/nativemobile/controlbar.d.ts +2 -0
- package/lib/src/js/ui/components/nativemobile/ctabar.d.ts +10 -0
- package/lib/src/js/ui/components/nativemobile/playnext.d.ts +10 -0
- package/lib/src/js/ui/components/nativemobile/topbar.d.ts +3 -0
- package/lib/src/js/ui/components/playnext.d.ts +11 -0
- package/lib/src/js/ui/components/settingspanel.d.ts +4 -0
- package/lib/src/js/ui/components/shared/playnextscreen.d.ts +2 -0
- package/lib/src/js/ui/components/titlebar.d.ts +3 -0
- package/lib/src/js/ui/components/topbar.d.ts +2 -0
- package/lib/src/js/ui/handlers/listboxhandlers.d.ts +5 -0
- package/lib/src/js/ui/handlers/nicamhandler.d.ts +2 -0
- package/lib/src/js/ui/handlers/nicamhandler.test.d.ts +1 -0
- package/lib/src/js/ui/handlers/playnexthandlers.d.ts +0 -0
- package/lib/src/js/ui/handlers/timecontrolhandlers.d.ts +3 -0
- package/lib/src/js/ui/nativemobileui.d.ts +6 -0
- package/lib/src/js/ui/uicontainer.d.ts +3 -0
- package/lib/src/js/utilities/localizationconfig.d.ts +6 -0
- package/lib/src/js/utilities/printversion.d.ts +1 -0
- package/lib/src/js/utilities/utilities.d.ts +60 -0
- package/lib/src/npoplayer.d.ts +45 -0
- package/lib/src/npoplayer.test.d.ts +1 -0
- package/lib/src/types/classes.d.ts +4 -0
- package/lib/src/types/interfaces.d.ts +105 -0
- package/lib/types/classes.d.ts +4 -0
- package/lib/types/classes.js +4 -0
- package/lib/types/classes.js.map +1 -0
- package/lib/types/interfaces.d.ts +105 -0
- package/lib/types/interfaces.js +6 -0
- package/lib/types/interfaces.js.map +1 -0
- package/package.json +88 -0
- package/src/scss/components/_advert.scss +74 -0
- package/src/scss/components/_buffering.scss +6 -0
- package/src/scss/components/_container.scss +8 -0
- package/src/scss/components/_controlbars.scss +36 -0
- package/src/scss/components/_error.scss +26 -0
- package/src/scss/components/_fonts.scss +19 -0
- package/src/scss/components/_icons.scss +241 -0
- package/src/scss/components/_nicam.scss +61 -0
- package/src/scss/components/_playnext.scss +52 -0
- package/src/scss/components/_seekbar.scss +116 -0
- package/src/scss/components/_settingspanel.scss +196 -0
- package/src/scss/components/_subtitles.scss +32 -0
- package/src/scss/components/_textbuttons.scss +42 -0
- package/src/scss/components/_volumeslider.scss +23 -0
- package/src/scss/npoplayer.css +1238 -0
- package/src/scss/npoplayer.scss +37 -0
- package/src/scss/variants/_player-base.scss +64 -0
- package/src/scss/variants/_player-large.scss +56 -0
- package/src/scss/variants/_player-medium.scss +57 -0
- package/src/scss/variants/_player-small.scss +234 -0
- package/src/scss/vars/_colors.scss +24 -0
- package/src/scss/vars/_fonts.scss +20 -0
- package/src/scss/vars/_icons.scss +37 -0
package/lib/npoplayer.js
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import { HttpResponseType, Player, PlayerEvent, } from 'bitmovin-player';
|
|
2
|
+
import AdsModuleBM from 'bitmovin-player/modules/bitmovinplayer-advertising-bitmovin';
|
|
3
|
+
import { logEvent, initPlayerTracker, startPlayerTracker } from './js/tracking/playertracker';
|
|
4
|
+
import { nativeMobileUIContainer } from './js/ui/nativemobileui';
|
|
5
|
+
import { hidePlayNextScreen, showPlayNextScreen } from './js/ui/components/shared/playnextscreen';
|
|
6
|
+
import { validateStreamLength, getModuleExport } from './js/utilities/utilities';
|
|
7
|
+
import { verifyDRM } from './js/drm/verifydrm';
|
|
8
|
+
import { setFragments } from './js/fragments/setfragments';
|
|
9
|
+
import * as playerAction from './js/playeractions/playeractions';
|
|
10
|
+
import { isSafari } from './js/checks/safari';
|
|
11
|
+
import { getStreamObject } from './js/api/getstreamobject';
|
|
12
|
+
import { printVersion } from './js/utilities/printversion';
|
|
13
|
+
import { UIManager } from 'bitmovin-player-ui';
|
|
14
|
+
import { customSpecificErrorMessageOverlayConfig } from './js/playeractions/handlers/customerrors';
|
|
15
|
+
import { createUIContainer } from './js/ui/uicontainer';
|
|
16
|
+
import { localizationConfig } from './js/utilities/localizationconfig';
|
|
17
|
+
import { processNicam } from './js/ui/handlers/nicamhandler';
|
|
18
|
+
import { npoCdnProviders } from './js/cdnproviders';
|
|
19
|
+
import { LogEmitter } from './types/classes';
|
|
20
|
+
import { handlePreRolls } from './js/ads/ster';
|
|
21
|
+
import pkg from '../package.json';
|
|
22
|
+
export default class NpoPlayer {
|
|
23
|
+
constructor(_container, _playerConfig, _npotag, _npotaginstance) {
|
|
24
|
+
this.playerConfig = _playerConfig;
|
|
25
|
+
this.sourceConfig = {};
|
|
26
|
+
this.streamObject = {
|
|
27
|
+
stream: { drmType: '', streamProfile: '', streamURL: '' },
|
|
28
|
+
metadata: { title: '', description: '' },
|
|
29
|
+
assets: { scrubbingThumbnail: '', subtitles: [] }
|
|
30
|
+
};
|
|
31
|
+
this.container = _container;
|
|
32
|
+
this.player = null;
|
|
33
|
+
this.uiManager = null;
|
|
34
|
+
this.fragment = null;
|
|
35
|
+
this.streamTracker = null;
|
|
36
|
+
this.streamOptions = {};
|
|
37
|
+
this.jwt = '';
|
|
38
|
+
this.apiPayload = { baseURL: '', jwt: '', data: {} };
|
|
39
|
+
this.adBreakActive = false;
|
|
40
|
+
this.version = pkg.version;
|
|
41
|
+
initPlayerTracker(this, _npotag, _npotaginstance);
|
|
42
|
+
this.logEmitter = new LogEmitter();
|
|
43
|
+
this.uiComponents = {};
|
|
44
|
+
this.initPlayer(this.container, _playerConfig);
|
|
45
|
+
}
|
|
46
|
+
initPlayer(_container, playerConfig) {
|
|
47
|
+
// Upon initiation print player version in console
|
|
48
|
+
printVersion(this.version);
|
|
49
|
+
if (isSafari(this.isFairPlayDrmSupported())) {
|
|
50
|
+
// Disable autoplay on safari
|
|
51
|
+
playerConfig.playback = {
|
|
52
|
+
autoplay: false
|
|
53
|
+
};
|
|
54
|
+
// Potential fix for DRM issues on safari
|
|
55
|
+
playerConfig.tweaks = {
|
|
56
|
+
fairplay_ignore_duplicate_init_data_key_errors: true
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
playerConfig.ui = false;
|
|
60
|
+
// Chromecast configuration
|
|
61
|
+
playerConfig.remotecontrol = {
|
|
62
|
+
type: 'googlecast',
|
|
63
|
+
receiverApplicationId: 'CC38EB17',
|
|
64
|
+
receiverVersion: 'v3',
|
|
65
|
+
messageNamespace: 'urn:x-cast:com.bitmovin.player.caf'
|
|
66
|
+
};
|
|
67
|
+
//creating this node enables the PlayerAdvertisingAPI
|
|
68
|
+
playerConfig.advertising = {};
|
|
69
|
+
//add the bitmovin ads module for more flexibility in ad handling
|
|
70
|
+
Player.addModule(getModuleExport(AdsModuleBM));
|
|
71
|
+
this.player = new Player(_container, playerConfig);
|
|
72
|
+
this.createUIManager(this.player, 'default');
|
|
73
|
+
this.container.addEventListener('keydown', e => {
|
|
74
|
+
this.keyPress(e);
|
|
75
|
+
}, true);
|
|
76
|
+
}
|
|
77
|
+
async loadStream(_jwt, options = {}) {
|
|
78
|
+
if (this.player == null) {
|
|
79
|
+
console.error('Er is nog geen player geladen.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (this.adBreakActive) {
|
|
83
|
+
console.error('Je kunt geen nieuwe content laden tijdens een reclameblok.');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Set jwt on class to make it accesible for DRM fallback logic
|
|
87
|
+
this.jwt = _jwt;
|
|
88
|
+
//StreamAPI logic
|
|
89
|
+
const profile = await this.decideProfile(options?.preferredDRM ?? '');
|
|
90
|
+
const defaultEndpoint = 'https://prod.npoplayer.nl/';
|
|
91
|
+
const endpoint = options?.endpoint ?? defaultEndpoint;
|
|
92
|
+
const payload = {
|
|
93
|
+
baseURL: endpoint,
|
|
94
|
+
jwt: _jwt,
|
|
95
|
+
data: { profileName: profile.tech, drmType: profile.drm }
|
|
96
|
+
};
|
|
97
|
+
let _streamObject;
|
|
98
|
+
try {
|
|
99
|
+
_streamObject = await getStreamObject(this, payload);
|
|
100
|
+
this.streamObject = _streamObject;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
this.doError('Het is niet gelukt de stream op te halen. \n' + err);
|
|
104
|
+
this.player?.pause();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
//if the streamobject is undefined abort the function early
|
|
108
|
+
if (this.streamObject?.stream == undefined)
|
|
109
|
+
return;
|
|
110
|
+
// Use data from options and/or streamobject response to make a source config
|
|
111
|
+
const drmType = this.streamObject.stream.drmType ?? null;
|
|
112
|
+
this.sourceConfig = this.processSourceConfig(options.sourceConfig ?? {}, this.streamObject, drmType && drmType.length > 0 ? profile.drm : null);
|
|
113
|
+
// verify that DRM is not yet expired
|
|
114
|
+
await verifyDRM(this, this.player, payload);
|
|
115
|
+
// set nicam kijkwijzer icons
|
|
116
|
+
processNicam(this.streamObject, this.container.id);
|
|
117
|
+
const isAutoplayEnabled = this.player.getConfig()?.playback?.autoplay ?? false;
|
|
118
|
+
if (isAutoplayEnabled && this.streamObject.stream.streamProfile === 'progressive') {
|
|
119
|
+
this.player.on(PlayerEvent.SourceLoaded, () => {
|
|
120
|
+
this.player?.play();
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Settings buttons based on response
|
|
124
|
+
const checkSubtitles = () => {
|
|
125
|
+
this.player?.off(PlayerEvent.Ready, checkSubtitles);
|
|
126
|
+
const subtitles = this.player?.subtitles?.list();
|
|
127
|
+
if (subtitles != null && subtitles.length > 0 && this.uiComponents.subtitlesButton) {
|
|
128
|
+
this.uiComponents.subtitlesButton.show();
|
|
129
|
+
}
|
|
130
|
+
else if (this.uiComponents.subtitlesButton)
|
|
131
|
+
this.uiComponents.subtitlesButton.hide();
|
|
132
|
+
};
|
|
133
|
+
this.player.on(PlayerEvent.Ready, checkSubtitles);
|
|
134
|
+
if (this.player.getAvailableVideoQualities().length > 0 && this.uiComponents.qualityButton) {
|
|
135
|
+
this.uiComponents.qualityButton.show();
|
|
136
|
+
}
|
|
137
|
+
// Start NPO Tag PlayerTracker
|
|
138
|
+
startPlayerTracker(this, validateStreamLength(this.streamObject.metadata.duration), this.version);
|
|
139
|
+
logEvent(this, 'load');
|
|
140
|
+
const addFragments = (section) => {
|
|
141
|
+
void this.setFragments({ sections: [section] });
|
|
142
|
+
};
|
|
143
|
+
if (_streamObject.segment != null) {
|
|
144
|
+
const seg = _streamObject.segment;
|
|
145
|
+
const section = {
|
|
146
|
+
start: seg.inpoint,
|
|
147
|
+
end: seg.outpoint,
|
|
148
|
+
title: 'Test'
|
|
149
|
+
};
|
|
150
|
+
this.player.off(PlayerEvent.Ready, () => addFragments(section));
|
|
151
|
+
this.player.on(PlayerEvent.Ready, () => addFragments(section));
|
|
152
|
+
}
|
|
153
|
+
// Timeshift to offset if offset is present in streamoptions
|
|
154
|
+
if (options?.startOffset != null)
|
|
155
|
+
playerAction.handleStartOffset(this.player, options.startOffset);
|
|
156
|
+
// set listeners for live offset and timestamps
|
|
157
|
+
const setLiveOffsetListener = function () {
|
|
158
|
+
if (this.player !== null)
|
|
159
|
+
this.player.off(PlayerEvent.SourceLoaded, setLiveOffsetListener);
|
|
160
|
+
playerAction.handleLiveOffsetLogic(this, this.player, options);
|
|
161
|
+
}.bind(this);
|
|
162
|
+
this.player.on(PlayerEvent.SourceLoaded, setLiveOffsetListener);
|
|
163
|
+
// Load fragments through options
|
|
164
|
+
if (options?.fragments != null) {
|
|
165
|
+
const fragments = options.fragments;
|
|
166
|
+
this.player.off(PlayerEvent.Ready, () => {
|
|
167
|
+
void this.setFragments(fragments);
|
|
168
|
+
});
|
|
169
|
+
this.player.on(PlayerEvent.Ready, () => {
|
|
170
|
+
void this.setFragments(fragments);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// set title in seekbar thumbnail
|
|
174
|
+
if (this.sourceConfig.thumbnailTrack && _streamObject.segment === undefined && options?.fragments === undefined) {
|
|
175
|
+
const element = document.querySelector('.bmpui-seekbar-label-title');
|
|
176
|
+
if (element !== null) {
|
|
177
|
+
element.textContent = this.sourceConfig.title || '';
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// If the stream options contain a PRID for the next episode show the playnext screen once playback is finished
|
|
181
|
+
// Test this behaviour by uncommenting the following line, mind that the api does not support this feature yet:
|
|
182
|
+
// options.prid = 'POW_04922615'
|
|
183
|
+
this.player.off(PlayerEvent.PlaybackFinished, () => {
|
|
184
|
+
this.showPlayNextScreen();
|
|
185
|
+
});
|
|
186
|
+
if (options?.prid != null) {
|
|
187
|
+
this.player.on(PlayerEvent.PlaybackFinished, () => {
|
|
188
|
+
this.showPlayNextScreen();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
handlePreRolls(this.player, this.streamObject, this);
|
|
192
|
+
}
|
|
193
|
+
async createUIManager(player, variant) {
|
|
194
|
+
const uiConfig = {
|
|
195
|
+
errorMessages: customSpecificErrorMessageOverlayConfig,
|
|
196
|
+
disableAutoHideWhenHovered: true
|
|
197
|
+
};
|
|
198
|
+
this.uiManager = new UIManager(player, createUIContainer(this, variant), uiConfig);
|
|
199
|
+
UIManager.setLocalizationConfig(localizationConfig);
|
|
200
|
+
}
|
|
201
|
+
async setFragments(fragments) {
|
|
202
|
+
void setFragments(this, fragments);
|
|
203
|
+
}
|
|
204
|
+
async decideProfile(preferredDRM = '') {
|
|
205
|
+
let bestWithDRM = '';
|
|
206
|
+
let bestWithoutDRM = '';
|
|
207
|
+
let bestDRM = '';
|
|
208
|
+
let supportedTech;
|
|
209
|
+
let supportedDRM;
|
|
210
|
+
if (this.player == null) {
|
|
211
|
+
console.log('No player detected');
|
|
212
|
+
return { tech: '', drm: '' };
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
supportedTech = this.player.getSupportedTech();
|
|
216
|
+
supportedDRM = await this.player.getSupportedDRM();
|
|
217
|
+
}
|
|
218
|
+
supportedTech.forEach(function (tech) {
|
|
219
|
+
if (bestWithoutDRM === '')
|
|
220
|
+
bestWithoutDRM = tech.streaming;
|
|
221
|
+
if (bestWithDRM !== '')
|
|
222
|
+
return;
|
|
223
|
+
// DASH
|
|
224
|
+
if (tech.streaming === 'dash') {
|
|
225
|
+
supportedDRM.forEach(function (drm) {
|
|
226
|
+
if (bestDRM !== '' &&
|
|
227
|
+
(preferredDRM === '' || preferredDRM.length > 0)) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (['com.widevine.alpha'].includes(drm)) {
|
|
231
|
+
bestDRM = 'widevine';
|
|
232
|
+
}
|
|
233
|
+
if ([
|
|
234
|
+
'com.microsoft.playready',
|
|
235
|
+
'com.microsoft.playready.recommendation'
|
|
236
|
+
].includes(drm)) {
|
|
237
|
+
bestDRM = 'playready';
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
if (bestDRM !== '')
|
|
241
|
+
bestWithDRM = 'dash';
|
|
242
|
+
}
|
|
243
|
+
// HLS
|
|
244
|
+
if (tech.streaming === 'hls') {
|
|
245
|
+
if (bestDRM !== '' &&
|
|
246
|
+
(preferredDRM === '' || bestDRM === preferredDRM)) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
supportedDRM.forEach(function (drm) {
|
|
250
|
+
if (['com.apple.fps.1_0', 'com.apple.fps.2_0'].includes(drm)) {
|
|
251
|
+
bestDRM = 'fairplay';
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
if (bestDRM !== '')
|
|
255
|
+
bestWithDRM = 'hls';
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
if (bestWithDRM !== '')
|
|
259
|
+
return { tech: bestWithDRM, drm: bestDRM };
|
|
260
|
+
return { tech: bestWithoutDRM, drm: bestDRM };
|
|
261
|
+
}
|
|
262
|
+
processSourceConfig(_sourceConfig = {}, _streamObject, drm = null) {
|
|
263
|
+
const sourceConfig = {};
|
|
264
|
+
sourceConfig.title =
|
|
265
|
+
_sourceConfig.title ?? _streamObject.metadata.title ?? '';
|
|
266
|
+
sourceConfig.description =
|
|
267
|
+
_sourceConfig.description ??
|
|
268
|
+
_streamObject.metadata.description ??
|
|
269
|
+
'';
|
|
270
|
+
sourceConfig.poster =
|
|
271
|
+
_sourceConfig.poster ?? _streamObject.metadata.poster ?? '';
|
|
272
|
+
sourceConfig.metadata = {
|
|
273
|
+
title: sourceConfig.title,
|
|
274
|
+
description: sourceConfig.description,
|
|
275
|
+
poster: sourceConfig.poster
|
|
276
|
+
};
|
|
277
|
+
// strict-boolean-expressions is disabled here because I did not write this code and
|
|
278
|
+
// I do not know if _sourceConfig.subtitleTracks and _streamObject.assets.subtitles can both be null at once
|
|
279
|
+
sourceConfig.subtitleTracks =
|
|
280
|
+
_sourceConfig.subtitleTracks ??
|
|
281
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
282
|
+
(_streamObject.assets.subtitles
|
|
283
|
+
? _streamObject.assets.subtitles.map((subtitle, i) => ({
|
|
284
|
+
url: subtitle.location,
|
|
285
|
+
lang: subtitle.iso,
|
|
286
|
+
label: subtitle.name,
|
|
287
|
+
kind: 'subtitle',
|
|
288
|
+
id: 'sub' + i
|
|
289
|
+
}))
|
|
290
|
+
: undefined);
|
|
291
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
292
|
+
sourceConfig.thumbnailTrack =
|
|
293
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
294
|
+
_sourceConfig.thumbnailTrack ??
|
|
295
|
+
_streamObject.assets.scrubbingThumbnail
|
|
296
|
+
? { url: _streamObject.assets.scrubbingThumbnail }
|
|
297
|
+
: undefined;
|
|
298
|
+
sourceConfig.options = _sourceConfig.options; // Nog nodig?
|
|
299
|
+
// Stream type
|
|
300
|
+
const streamProfile = _streamObject.stream.streamProfile;
|
|
301
|
+
const streamURL = _streamObject.stream.streamURL;
|
|
302
|
+
const hlsConfig = _sourceConfig.hls === '' ? undefined : _sourceConfig.hls;
|
|
303
|
+
const dashConfig = _sourceConfig.dash === '' ? undefined : _sourceConfig.dash;
|
|
304
|
+
const progressiveConfig = _sourceConfig.progressive === '' ? undefined : _sourceConfig.progressive;
|
|
305
|
+
if (streamProfile === 'hls') {
|
|
306
|
+
sourceConfig.hls = hlsConfig ?? streamURL ?? '';
|
|
307
|
+
sourceConfig.dash = '';
|
|
308
|
+
sourceConfig.progressive = '';
|
|
309
|
+
}
|
|
310
|
+
else if (streamProfile === 'dash') {
|
|
311
|
+
sourceConfig.hls = '';
|
|
312
|
+
sourceConfig.dash = dashConfig ?? streamURL ?? '';
|
|
313
|
+
sourceConfig.progressive = '';
|
|
314
|
+
}
|
|
315
|
+
else if (streamProfile === 'progressive') {
|
|
316
|
+
sourceConfig.hls = '';
|
|
317
|
+
sourceConfig.dash = '';
|
|
318
|
+
sourceConfig.progressive = progressiveConfig ?? streamURL ?? '';
|
|
319
|
+
}
|
|
320
|
+
// DRM
|
|
321
|
+
const npoDrmGateway = 'https://npo-drm-gateway.samgcloud.nepworldwide.nl/authentication?custom_data=';
|
|
322
|
+
if (drm === 'fairplay') {
|
|
323
|
+
sourceConfig.drm = {
|
|
324
|
+
fairplay: {
|
|
325
|
+
certificateURL: 'https://fairplay.npo.nl/certificate/fairplay.cer',
|
|
326
|
+
LA_URL: npoDrmGateway + _streamObject.stream.drmToken,
|
|
327
|
+
prepareMessage: event => {
|
|
328
|
+
return new Uint8Array(event.message);
|
|
329
|
+
},
|
|
330
|
+
prepareContentId: url => {
|
|
331
|
+
const link = document.createElement('a');
|
|
332
|
+
const trimmedUrl = url
|
|
333
|
+
.split('')
|
|
334
|
+
.filter(char => !(char.codePointAt(0) == null))
|
|
335
|
+
.join('');
|
|
336
|
+
link.href = trimmedUrl.replace('T', '');
|
|
337
|
+
return link.hostname;
|
|
338
|
+
},
|
|
339
|
+
prepareLicense: license => {
|
|
340
|
+
let binary = '';
|
|
341
|
+
const bytes = new Uint8Array(license);
|
|
342
|
+
const len = bytes.byteLength;
|
|
343
|
+
for (let i = 0; i < len; i++) {
|
|
344
|
+
binary += String.fromCharCode(bytes[i]);
|
|
345
|
+
}
|
|
346
|
+
return window.btoa(binary);
|
|
347
|
+
},
|
|
348
|
+
licenseResponseType: HttpResponseType.ARRAYBUFFER,
|
|
349
|
+
useUint16InitData: true
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
if (drm === 'widevine') {
|
|
354
|
+
sourceConfig.drm = {
|
|
355
|
+
widevine: {
|
|
356
|
+
LA_URL: npoDrmGateway + _streamObject.stream.drmToken,
|
|
357
|
+
audioRobustness: 'SW_SECURE_CRYPTO',
|
|
358
|
+
videoRobustness: 'SW_SECURE_CRYPTO'
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
if (drm === 'playready') {
|
|
363
|
+
sourceConfig.drm = {
|
|
364
|
+
playready: {
|
|
365
|
+
LA_URL: npoDrmGateway + _streamObject.stream.drmToken
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
// CDN
|
|
370
|
+
const streamSource = _streamObject.stream.streamURL;
|
|
371
|
+
let cdnString = streamSource;
|
|
372
|
+
npoCdnProviders.forEach(function (value, key) {
|
|
373
|
+
if (streamSource.includes(key)) {
|
|
374
|
+
cdnString = value;
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
if (sourceConfig.analytics == null)
|
|
378
|
+
sourceConfig.analytics = {};
|
|
379
|
+
sourceConfig.analytics.cdnProvider = cdnString;
|
|
380
|
+
sourceConfig.analytics.videoId = _streamObject.metadata.prid;
|
|
381
|
+
sourceConfig.analytics.title = _streamObject.metadata.title;
|
|
382
|
+
sourceConfig.analytics = {
|
|
383
|
+
...sourceConfig.analytics,
|
|
384
|
+
..._sourceConfig.analytics
|
|
385
|
+
};
|
|
386
|
+
// Labeling
|
|
387
|
+
const getSubtitleLabels = function (data) {
|
|
388
|
+
if (data.label === 'nl') {
|
|
389
|
+
return 'Nederlands';
|
|
390
|
+
}
|
|
391
|
+
return data.label;
|
|
392
|
+
};
|
|
393
|
+
const getQualityLabels = function (data) {
|
|
394
|
+
return data.height + 'p';
|
|
395
|
+
};
|
|
396
|
+
if (sourceConfig.progressive !== '') {
|
|
397
|
+
sourceConfig.labeling = {
|
|
398
|
+
dash: {
|
|
399
|
+
qualities: getQualityLabels,
|
|
400
|
+
subtitles: getSubtitleLabels
|
|
401
|
+
},
|
|
402
|
+
hls: {
|
|
403
|
+
qualities: getQualityLabels,
|
|
404
|
+
subtitles: getSubtitleLabels
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
return sourceConfig;
|
|
409
|
+
}
|
|
410
|
+
doError(input) {
|
|
411
|
+
if (this.player == null)
|
|
412
|
+
return;
|
|
413
|
+
playerAction.handlePlayerError(this.player, this.uiComponents, input);
|
|
414
|
+
}
|
|
415
|
+
// Hotkeys
|
|
416
|
+
keyPress(e) {
|
|
417
|
+
if (['Space', 'ArrowUp', 'ArrowDown'].includes(e.code))
|
|
418
|
+
e.preventDefault();
|
|
419
|
+
if (!this.player)
|
|
420
|
+
return;
|
|
421
|
+
playerAction.resolveKeyPress(this.player, this, e);
|
|
422
|
+
}
|
|
423
|
+
setVolume(volume) {
|
|
424
|
+
this.player?.setVolume(volume);
|
|
425
|
+
}
|
|
426
|
+
increaseVolume() {
|
|
427
|
+
if (this.player == null)
|
|
428
|
+
return;
|
|
429
|
+
this.setVolume(this.player.getVolume() + 10);
|
|
430
|
+
}
|
|
431
|
+
decreaseVolume() {
|
|
432
|
+
if (this.player == null)
|
|
433
|
+
return;
|
|
434
|
+
this.setVolume(this.player.getVolume() - 10);
|
|
435
|
+
}
|
|
436
|
+
goForward(seconds) {
|
|
437
|
+
if (this.player?.isLive() ?? false) {
|
|
438
|
+
this.player?.timeShift(Math.min(0, this.player.getTimeShift() + seconds));
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this.player?.seek(this.player.getCurrentTime() + seconds);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
goBackwards(seconds) {
|
|
445
|
+
if (this.player?.isLive() ?? false) {
|
|
446
|
+
this.player?.timeShift(this.player.getTimeShift() - seconds);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
this.player?.seek(this.player.getCurrentTime() - seconds);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
watchFromStart() {
|
|
453
|
+
if (this.player == null)
|
|
454
|
+
return;
|
|
455
|
+
playerAction.shiftToProgramStart(this.player, this.streamOptions.liveProgramTime);
|
|
456
|
+
}
|
|
457
|
+
// Show the "next episode is playing soon..." screen if a PRID is supplied in player options
|
|
458
|
+
showPlayNextScreen() {
|
|
459
|
+
showPlayNextScreen(this.doPlayNext.bind(this));
|
|
460
|
+
}
|
|
461
|
+
hidePlayNextScreen() {
|
|
462
|
+
hidePlayNextScreen();
|
|
463
|
+
}
|
|
464
|
+
doPlayNext() {
|
|
465
|
+
this.hidePlayNextScreen();
|
|
466
|
+
void this.loadStream(this.jwt, this.streamOptions);
|
|
467
|
+
}
|
|
468
|
+
destroy() {
|
|
469
|
+
try {
|
|
470
|
+
if (this.npoTag != null) {
|
|
471
|
+
clearInterval(this.npoTag.heartbeatInterval);
|
|
472
|
+
}
|
|
473
|
+
this.uiManager?.release();
|
|
474
|
+
void this.player?.destroy();
|
|
475
|
+
return true;
|
|
476
|
+
}
|
|
477
|
+
catch (e) {
|
|
478
|
+
console.log('NPO Player is al destroyed', e);
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
unload() {
|
|
483
|
+
try {
|
|
484
|
+
if (this.npoTag != null) {
|
|
485
|
+
clearInterval(this.npoTag.heartbeatInterval);
|
|
486
|
+
}
|
|
487
|
+
void this.player?.unload();
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
catch (e) {
|
|
491
|
+
console.log('NPO Player is al unloaded', e);
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
isFairPlayDrmSupported(ks) {
|
|
496
|
+
let isSupported = false;
|
|
497
|
+
['com.apple.fps.1_0', 'com.apple.fps.2_0'].forEach(ks => {
|
|
498
|
+
if (typeof window.WebKitMediaKeys === 'function' &&
|
|
499
|
+
Boolean(window.WebKitMediaKeys?.isTypeSupported(ks, 'video/mp4'))) {
|
|
500
|
+
isSupported = true;
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
return isSupported;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
window.bitmovin.playerui = function () { };
|
|
507
|
+
window.bitmovin.playerui.UIFactory = {
|
|
508
|
+
buildDefaultSmallScreenUI: function (player, config = {}) {
|
|
509
|
+
const uiConfig = {
|
|
510
|
+
...config,
|
|
511
|
+
errorMessages: customSpecificErrorMessageOverlayConfig,
|
|
512
|
+
disableAutoHideWhenHovered: true
|
|
513
|
+
};
|
|
514
|
+
UIManager.setLocalizationConfig(localizationConfig);
|
|
515
|
+
return new UIManager(player, nativeMobileUIContainer(player), uiConfig);
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
//# sourceMappingURL=npoplayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npoplayer.js","sourceRoot":"","sources":["../../src/npoplayer.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,gBAAgB,EAChB,MAAM,EACN,WAAW,GAMd,MAAM,iBAAiB,CAAA;AACxB,OAAO,WAAW,MAAM,6DAA6D,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AACjG,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,KAAK,YAAY,MAAM,kCAAkC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,uCAAuC,EAAE,MAAM,0CAA0C,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAWlC,MAAM,CAAC,OAAO,OAAO,SAAS;IAkB1B,YACI,UAAuB,EACvB,aAA2B,EAC3B,OAAoC,EACpC,eAAwB;QAExB,IAAI,CAAC,YAAY,GAAG,aAAa,CAAA;QACjC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,YAAY,GAAG;YAChB,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YACxC,MAAM,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;SACpD,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;QACpD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAE1B,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAA;QAEjD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QAClC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QAEtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAClD,CAAC;IAED,UAAU,CAAE,UAAuB,EAAE,YAA0B;QAE3D,kDAAkD;QAClD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE1B,IAAI,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACzC,6BAA6B;YAC7B,YAAY,CAAC,QAAQ,GAAG;gBACpB,QAAQ,EAAE,KAAK;aAClB,CAAA;YAED,yCAAyC;YACzC,YAAY,CAAC,MAAM,GAAG;gBAClB,8CAA8C,EAAE,IAAI;aACvD,CAAA;SACJ;QAED,YAAY,CAAC,EAAE,GAAG,KAAK,CAAA;QAEvB,2BAA2B;QAC3B,YAAY,CAAC,aAAa,GAAG;YACzB,IAAI,EAAE,YAAY;YAClB,qBAAqB,EAAE,UAAU;YACjC,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,oCAAoC;SACzD,CAAA;QAED,qDAAqD;QACrD,YAAY,CAAC,WAAW,GAAG,EAAE,CAAA;QAE7B,iEAAiE;QACjE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAElD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAE5C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC3B,SAAS,EACT,CAAC,CAAC,EAAE;YACA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC,EACD,IAAI,CACP,CAAA;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAE,IAAY,EAAE,UAAyB,EAAE;QACvD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;YAC/C,OAAM;SACT;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAA;YAC3E,OAAM;SACT;QAED,+DAA+D;QAC/D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA;QAEf,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC,CAAA;QACrE,MAAM,eAAe,GAAG,4BAA4B,CAAA;QACpD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,eAAe,CAAA;QACrD,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;SAC5D,CAAA;QAED,IAAI,aAAa,CAAA;QAEjB,IAAI;YACA,aAAa,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACpD,IAAI,CAAC,YAAY,GAAG,aAAa,CAAA;SACpC;QAAC,OAAO,GAAQ,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,8CAA8C,GAAG,GAAG,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;YACpB,OAAM;SACT;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,SAAS;YAAE,OAAM;QAElD,6EAA6E;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CACxC,OAAO,CAAC,YAAY,IAAI,EAAE,EAC1B,IAAI,CAAC,YAAY,EACjB,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACrD,CAAC;QAEF,qCAAqC;QACrC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAE3C,6BAA6B;QAC7B,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAElD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC;QAE/E,IAAI,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,KAAK,aAAa,EAAE;YAC/E,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC1C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;SACN;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;YAChD,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;gBAChF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;aAC3C;iBAAM,IAAG,IAAI,CAAC,YAAY,CAAC,eAAe;gBAAE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;QACzF,CAAC,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QAEjD,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACxF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;SACzC;QAED,8BAA8B;QAC9B,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACjG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAEtB,MAAM,YAAY,GAAQ,CAAC,OAAY,EAAE,EAAE;YACvC,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,IAAI,aAAa,CAAC,OAAO,IAAI,IAAI,EAAE;YAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAA;YACjC,MAAM,OAAO,GAAG;gBACZ,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,GAAG,EAAE,GAAG,CAAC,QAAQ;gBACjB,KAAK,EAAE,MAAM;aAChB,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;YAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;SACjE;QAED,4DAA4D;QAC5D,IAAI,OAAO,EAAE,WAAW,IAAI,IAAI;YAAE,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAElG,+CAA+C;QAC/C,MAAM,qBAAqB,GAAG;YAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;YAC1F,YAAY,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACZ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;QAE/D,iCAAiC;QACjC,IAAI,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE;YAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE;gBACpC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE;gBACnC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;SACL;QAED,iCAAiC;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS,EAAE;YAC7G,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAA;YACpE,IAAI,OAAO,KAAK,IAAI,EAAE;gBAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAA;aACtD;SACJ;QAED,+GAA+G;QAC/G,+GAA+G;QAC/G,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC/C,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC7B,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE;gBAC9C,IAAI,CAAC,kBAAkB,EAAE,CAAA;YAC7B,CAAC,CAAC,CAAA;SACL;QAED,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAgB,EAAE,OAAe;QACnD,MAAM,QAAQ,GAAa;YACvB,aAAa,EAAE,uCAAuC;YACtD,0BAA0B,EAAE,IAAI;SACnC,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAC1B,MAAM,EACN,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,EAChC,QAAQ,CACX,CAAA;QACD,SAAS,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,SAAoB;QACpC,KAAK,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,YAAY,GAAG,EAAE;QAClC,IAAI,WAAW,GAAW,EAAE,CAAA;QAC5B,IAAI,cAAc,GAAW,EAAE,CAAA;QAC/B,IAAI,OAAO,GAAW,EAAE,CAAA;QACxB,IAAI,aAA2B,CAAA;QAC/B,IAAI,YAAsB,CAAA;QAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YACjC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;SAC/B;aAAM;YACH,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAA;YAC9C,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;SACrD;QAED,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI;YAChC,IAAI,cAAc,KAAK,EAAE;gBAAE,cAAc,GAAG,IAAI,CAAC,SAAS,CAAA;YAC1D,IAAI,WAAW,KAAK,EAAE;gBAAE,OAAM;YAE9B,OAAO;YACP,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;gBAC3B,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG;oBAC9B,IACI,OAAO,KAAK,EAAE;wBACd,CAAC,YAAY,KAAK,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAClD;wBAAE,OAAM;qBAAE;oBACZ,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBAAE,OAAO,GAAG,UAAU,CAAA;qBAAE;oBAClE,IACI;wBACI,yBAAyB;wBACzB,wCAAwC;qBAC3C,CAAC,QAAQ,CAAC,GAAG,CAAC,EACjB;wBAAE,OAAO,GAAG,WAAW,CAAA;qBAAE;gBAC/B,CAAC,CAAC,CAAA;gBACF,IAAI,OAAO,KAAK,EAAE;oBAAE,WAAW,GAAG,MAAM,CAAA;aAC3C;YAED,MAAM;YACN,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC1B,IACI,OAAO,KAAK,EAAE;oBACd,CAAC,YAAY,KAAK,EAAE,IAAI,OAAO,KAAK,YAAY,CAAC,EACnD;oBAAE,OAAM;iBAAE;gBACZ,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG;oBAC9B,IACI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1D;wBAAE,OAAO,GAAG,UAAU,CAAA;qBAAE;gBAC9B,CAAC,CAAC,CAAA;gBACF,IAAI,OAAO,KAAK,EAAE;oBAAE,WAAW,GAAG,KAAK,CAAA;aAC1C;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,KAAK,EAAE;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;QAClE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;IACjD,CAAC;IAED,mBAAmB,CACf,gBAA8B,EAAE,EAChC,aAA2B,EAC3B,MAAqB,IAAI;QAEzB,MAAM,YAAY,GAAiB,EAAE,CAAA;QAErC,YAAY,CAAC,KAAK;YACd,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAA;QAC7D,YAAY,CAAC,WAAW;YACpB,aAAa,CAAC,WAAW;gBACzB,aAAa,CAAC,QAAQ,CAAC,WAAW;gBAClC,EAAE,CAAA;QACN,YAAY,CAAC,MAAM;YACf,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAA;QAE/D,YAAY,CAAC,QAAQ,GAAG;YACpB,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,YAAY,CAAC,MAAM;SAC9B,CAAA;QAED,oFAAoF;QACpF,4GAA4G;QAC5G,YAAY,CAAC,cAAc;YACvB,aAAa,CAAC,cAAc;gBAC5B,yEAAyE;gBACzE,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS;oBAC3B,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnD,GAAG,EAAE,QAAQ,CAAC,QAAQ;wBACtB,IAAI,EAAE,QAAQ,CAAC,GAAG;wBAClB,KAAK,EAAE,QAAQ,CAAC,IAAI;wBACpB,IAAI,EAAE,UAAU;wBAChB,EAAE,EAAE,KAAK,GAAG,CAAC;qBAChB,CAAC,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC,CAAA;QAEpB,yEAAyE;QACzE,YAAY,CAAC,cAAc;YACvB,yEAAyE;YACzE,aAAa,CAAC,cAAc;gBACxB,aAAa,CAAC,MAAM,CAAC,kBAAkB;gBACvC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAClD,CAAC,CAAC,SAAS,CAAA;QAEnB,YAAY,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA,CAAC,aAAa;QAE1D,cAAc;QACd,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC;QACzD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;QAEjD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;QAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;QAC9E,MAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC;QAEnG,IAAI,aAAa,KAAK,KAAK,EAAE;YACzB,YAAY,CAAC,GAAG,GAAG,SAAS,IAAI,SAAS,IAAI,EAAE,CAAC;YAChD,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;YACvB,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC;SACjC;aAAM,IAAI,aAAa,KAAK,MAAM,EAAE;YACjC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,GAAG,UAAU,IAAI,SAAS,IAAI,EAAE,CAAC;YAClD,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC;SACjC;aAAM,IAAI,aAAa,KAAK,aAAa,EAAE;YACxC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;YACvB,YAAY,CAAC,WAAW,GAAG,iBAAiB,IAAI,SAAS,IAAI,EAAE,CAAC;SACnE;QAED,MAAM;QACN,MAAM,aAAa,GAAG,+EAA+E,CAAA;QAErG,IAAI,GAAG,KAAK,UAAU,EAAE;YACpB,YAAY,CAAC,GAAG,GAAG;gBACf,QAAQ,EAAE;oBACN,cAAc,EACV,kDAAkD;oBACtD,MAAM,EACF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ;oBACjD,cAAc,EAAE,KAAK,CAAC,EAAE;wBACpB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBACxC,CAAC;oBACD,gBAAgB,EAAE,GAAG,CAAC,EAAE;wBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;wBACxC,MAAM,UAAU,GAAG,GAAG;6BACjB,KAAK,CAAC,EAAE,CAAC;6BACT,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;6BAC9C,IAAI,CAAC,EAAE,CAAC,CAAA;wBACb,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;wBACvC,OAAO,IAAI,CAAC,QAAQ,CAAA;oBACxB,CAAC;oBACD,cAAc,EAAE,OAAO,CAAC,EAAE;wBACtB,IAAI,MAAM,GAAG,EAAE,CAAA;wBACf,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;wBACrC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAA;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC1B,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;yBAC1C;wBACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAC9B,CAAC;oBACD,mBAAmB,EAAE,gBAAgB,CAAC,WAAW;oBACjD,iBAAiB,EAAE,IAAI;iBAC1B;aACJ,CAAA;SACJ;QACD,IAAI,GAAG,KAAK,UAAU,EAAE;YACpB,YAAY,CAAC,GAAG,GAAG;gBACf,QAAQ,EAAE;oBACN,MAAM,EACF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ;oBACjD,eAAe,EAAE,kBAAkB;oBACnC,eAAe,EAAE,kBAAkB;iBACtC;aACJ,CAAA;SACJ;QACD,IAAI,GAAG,KAAK,WAAW,EAAE;YACrB,YAAY,CAAC,GAAG,GAAG;gBACf,SAAS,EAAE;oBACP,MAAM,EACF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ;iBACpD;aACJ,CAAA;SACJ;QAED,MAAM;QACN,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAA;QACnD,IAAI,SAAS,GAAG,YAAY,CAAA;QAC5B,eAAe,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE,GAAG;YACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC5B,SAAS,GAAG,KAAK,CAAA;aACpB;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,YAAY,CAAC,SAAS,IAAI,IAAI;YAAE,YAAY,CAAC,SAAS,GAAG,EAAE,CAAA;QAE/D,YAAY,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAA;QAC9C,YAAY,CAAC,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAA;QAC5D,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAA;QAE3D,YAAY,CAAC,SAAS,GAAG;YACrB,GAAG,YAAY,CAAC,SAAS;YACzB,GAAG,aAAa,CAAC,SAAS;SAC7B,CAAA;QAED,WAAW;QACX,MAAM,iBAAiB,GAAG,UAAU,IAAS;YACzC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;gBACrB,OAAO,YAAY,CAAA;aACtB;YACD,OAAO,IAAI,CAAC,KAAK,CAAA;QACrB,CAAC,CAAA;QACD,MAAM,gBAAgB,GAAG,UAAU,IAAS;YACxC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;QAC5B,CAAC,CAAA;QAED,IAAG,YAAY,CAAC,WAAW,KAAK,EAAE,EAAE;YAChC,YAAY,CAAC,QAAQ,GAAG;gBACpB,IAAI,EAAE;oBACF,SAAS,EAAE,gBAAgB;oBAC3B,SAAS,EAAE,iBAAiB;iBAC/B;gBACD,GAAG,EAAE;oBACD,SAAS,EAAE,gBAAgB;oBAC3B,SAAS,EAAE,iBAAiB;iBAC/B;aACJ,CAAA;SACJ;QAED,OAAO,YAAY,CAAA;IACvB,CAAC;IAED,OAAO,CAAE,KAAU;QACf,IAAG,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,OAAM;QAC9B,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IACzE,CAAC;IAED,UAAU;IACV,QAAQ,CAAE,CAAgB;QACtB,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAE3E,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,SAAS,CAAE,MAAc;QACrB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,OAAM;QAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,OAAM;QAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,SAAS,CAAE,OAAe;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE;YAChC,IAAI,CAAC,MAAM,EAAE,SAAS,CAClB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,CACpD,CAAA;SACJ;aAAM;YACH,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,CAAA;SAC5D;IACL,CAAC;IAED,WAAW,CAAE,OAAe;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE;YAChC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,CAAA;SAC/D;aAAM;YACH,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,CAAA;SAC5D;IACL,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,OAAM;QAC/B,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IACrF,CAAC;IAED,4FAA4F;IAC5F,kBAAkB;QACd,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,kBAAkB;QACd,kBAAkB,EAAE,CAAA;IACxB,CAAC;IAED,UAAU;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACtD,CAAC;IAED,OAAO;QACH,IAAI;YACA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;gBACrB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;aAC/C;YACD,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA;YACzB,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;YAC3B,OAAO,IAAI,CAAA;SACd;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAA;YAC5C,OAAO,KAAK,CAAA;SACf;IACL,CAAC;IAED,MAAM;QACF,IAAI;YACA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;gBACrB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;aAC/C;YACD,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;YAC1B,OAAO,IAAI,CAAA;SACd;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAA;YAC3C,OAAO,KAAK,CAAA;SACf;IACL,CAAC;IAED,sBAAsB,CAAE,EAAQ;QAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACpD,IACI,OAAQ,MAAc,CAAC,eAAe,KAAK,UAAU;gBACrD,OAAO,CACF,MAAc,CAAC,eAAe,EAAE,eAAe,CAC5C,EAAE,EACF,WAAW,CACd,CACJ,EACH;gBACE,WAAW,GAAG,IAAI,CAAA;aACrB;QACL,CAAC,CAAC,CAAA;QACF,OAAO,WAAW,CAAA;IACtB,CAAC;CACJ;AAEA,MAAc,CAAC,QAAQ,CAAC,QAAQ,GAAG,cAAY,CAAC,CAAC;AAEjD,MAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG;IAC1C,yBAAyB,EAAE,UAAU,MAAiB,EAAE,SAAmB,EAAE;QACzE,MAAM,QAAQ,GAAa;YACvB,GAAG,MAAM;YACT,aAAa,EAAE,uCAAuC;YACtD,0BAA0B,EAAE,IAAI;SACnC,CAAA;QAED,SAAS,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;QAEnD,OAAO,IAAI,SAAS,CAChB,MAAM,EACN,uBAAuB,CAAC,MAAM,CAAC,EAC/B,QAAQ,CACX,CAAA;IACL,CAAC;CACJ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import NpoPlayer from "./npoplayer";
|
|
2
|
+
const div = document.createElement("div");
|
|
3
|
+
const testPlayerConfig = {
|
|
4
|
+
key: "D634EA2C-BFE7-4BB6-9EAA-CDCC7B1EDFFA",
|
|
5
|
+
};
|
|
6
|
+
let player;
|
|
7
|
+
test("player init", async () => {
|
|
8
|
+
player = new NpoPlayer(div, testPlayerConfig);
|
|
9
|
+
expect(player).toBeInstanceOf(NpoPlayer);
|
|
10
|
+
expect(player.playerConfig.key).toBe(testPlayerConfig.key);
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=npoplayer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npoplayer.test.js","sourceRoot":"","sources":["../../src/npoplayer.test.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,GAAG,GAAgB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAEvD,MAAM,gBAAgB,GAAiB;IACnC,GAAG,EAAE,sCAAsC;CAC9C,CAAC;AAEF,IAAI,MAAiB,CAAC;AAEtB,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;IAC3B,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
|
package/lib/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@npo/player",
|
|
3
|
+
"version": "1.9.0",
|
|
4
|
+
"description": "NPO Player",
|
|
5
|
+
"author": "Publieke Omroep <player@npo.nl>",
|
|
6
|
+
"contributors": [
|
|
7
|
+
"Tim Haerkens",
|
|
8
|
+
"Sven van der Leest",
|
|
9
|
+
"Arjan Kruithof"
|
|
10
|
+
],
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": "^18.16.0"
|
|
13
|
+
},
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"main": "npoplayer",
|
|
16
|
+
"types": "npoplayer.d.ts",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "webpack --hot",
|
|
19
|
+
"build:scss": "npm run build:web-styles && npm run build:web-styles && npm run build:mobile-styles-min && npm run build:mobile-styles && cp src/scss/*.css dist",
|
|
20
|
+
"build:web-styles": "sass --no-source-map src/scss/npoplayer.scss src/scss/npoplayer.css",
|
|
21
|
+
"build:web-styles-min": "sass --no-source-map --style=compressed src/scss/npoplayer.scss src/scss/npoplayer.min.css",
|
|
22
|
+
"build:mobile-styles": "node-sass --no-source-map src/scss/npoplayer-mobile.scss src/scss/npoplayer-mobile.css",
|
|
23
|
+
"build:mobile-styles-min": "sass --no-source-map --style=compressed src/scss/npoplayer-mobile.scss src/scss/npoplayer-mobile.min.css",
|
|
24
|
+
"lint": "eslint src --fix",
|
|
25
|
+
"bundle": "npm run lint && ts-node build.ts && webpack && npm run build:scss",
|
|
26
|
+
"build:ts": "ts-node build.ts",
|
|
27
|
+
"test": "jest",
|
|
28
|
+
"test:ci": "node_modules/.bin/jest",
|
|
29
|
+
"version:dev": "npm version prerelease --preid=dev --no-git-tag-version"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"README.md",
|
|
34
|
+
"CHANGELOG.md",
|
|
35
|
+
"lib",
|
|
36
|
+
"src/scss/components",
|
|
37
|
+
"src/scss/variants",
|
|
38
|
+
"src/scss/vars",
|
|
39
|
+
"src/scss/npoplayer.scss",
|
|
40
|
+
"src/scss/npoplayer.css"
|
|
41
|
+
],
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@babel/core": "^7.20.12",
|
|
44
|
+
"@babel/preset-env": "^7.20.2",
|
|
45
|
+
"@babel/preset-typescript": "^7.18.6",
|
|
46
|
+
"@types/fs-extra": "^11.0.1",
|
|
47
|
+
"@types/jest": "^29.4.0",
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^5.58.0",
|
|
49
|
+
"@typescript-eslint/parser": "^5.58.0",
|
|
50
|
+
"babel-jest": "^28.1.3",
|
|
51
|
+
"babel-loader": "^8.3.0",
|
|
52
|
+
"css-loader": "^6.7.3",
|
|
53
|
+
"eslint": "^8.38.0",
|
|
54
|
+
"eslint-config-standard-with-typescript": "^34.0.1",
|
|
55
|
+
"eslint-plugin-import": "^2.27.5",
|
|
56
|
+
"eslint-plugin-n": "^15.7.0",
|
|
57
|
+
"eslint-plugin-promise": "^6.1.1",
|
|
58
|
+
"eslint-plugin-sonarjs": "^0.19.0",
|
|
59
|
+
"fs-extra": "^11.1.1",
|
|
60
|
+
"jest": "^28.1.3",
|
|
61
|
+
"jest-environment-jsdom": "^29.4.1",
|
|
62
|
+
"jest-sonar-reporter": "2.0.0",
|
|
63
|
+
"jest-transform-css": "^6.0.1",
|
|
64
|
+
"mini-css-extract-plugin": "^2.7.2",
|
|
65
|
+
"node-fetch": "^3.3.0",
|
|
66
|
+
"node-sass": "^7.0.3",
|
|
67
|
+
"sass": "^1.58.0",
|
|
68
|
+
"sass-loader": "^12.6.0",
|
|
69
|
+
"style-loader": "^3.3.1",
|
|
70
|
+
"ts-jest": "^28.0.8",
|
|
71
|
+
"ts-loader": "^9.4.2",
|
|
72
|
+
"ts-node": "^10.9.1",
|
|
73
|
+
"typescript": "^4.9.5",
|
|
74
|
+
"webpack": "^5.75.0",
|
|
75
|
+
"webpack-cli": "^4.10.0",
|
|
76
|
+
"webpack-dev-server": "^4.11.1"
|
|
77
|
+
},
|
|
78
|
+
"dependencies": {
|
|
79
|
+
"@npotag/tag": "^2.0.0",
|
|
80
|
+
"bitmovin-player": "^8.125.0",
|
|
81
|
+
"bitmovin-player-ui": "^3.48.0"
|
|
82
|
+
},
|
|
83
|
+
"keywords": [
|
|
84
|
+
"video",
|
|
85
|
+
"player",
|
|
86
|
+
"stream"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|