unified-video-framework 1.4.412 → 1.4.414

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 (147) hide show
  1. package/package.json +6 -1
  2. package/packages/core/dist/interfaces/IVideoPlayer.d.ts +0 -22
  3. package/packages/core/dist/interfaces/IVideoPlayer.d.ts.map +1 -1
  4. package/packages/core/src/BasePlayer.d.ts +61 -0
  5. package/packages/core/src/BasePlayer.d.ts.map +1 -0
  6. package/packages/core/src/BasePlayer.js +175 -0
  7. package/packages/core/src/BasePlayer.js.map +1 -0
  8. package/packages/core/src/VideoPlayerFactory.d.ts +8 -0
  9. package/packages/core/src/VideoPlayerFactory.d.ts.map +1 -0
  10. package/packages/core/src/VideoPlayerFactory.js +95 -0
  11. package/packages/core/src/VideoPlayerFactory.js.map +1 -0
  12. package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.d.ts +18 -0
  13. package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.d.ts.map +1 -0
  14. package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.js +117 -0
  15. package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.js.map +1 -0
  16. package/packages/core/src/analytics/core/AnalyticsProvider.d.ts +18 -0
  17. package/packages/core/src/analytics/core/AnalyticsProvider.d.ts.map +1 -0
  18. package/packages/core/src/analytics/core/AnalyticsProvider.js +99 -0
  19. package/packages/core/src/analytics/core/AnalyticsProvider.js.map +1 -0
  20. package/packages/core/src/analytics/core/DynamicAnalyticsManager.d.ts +20 -0
  21. package/packages/core/src/analytics/core/DynamicAnalyticsManager.d.ts.map +1 -0
  22. package/packages/core/src/analytics/core/DynamicAnalyticsManager.js +161 -0
  23. package/packages/core/src/analytics/core/DynamicAnalyticsManager.js.map +1 -0
  24. package/packages/core/src/analytics/core/EventBatcher.d.ts +32 -0
  25. package/packages/core/src/analytics/core/EventBatcher.d.ts.map +1 -0
  26. package/packages/core/src/analytics/core/EventBatcher.js +98 -0
  27. package/packages/core/src/analytics/core/EventBatcher.js.map +1 -0
  28. package/packages/core/src/analytics/core/PlayerAnalytics.d.ts +19 -0
  29. package/packages/core/src/analytics/core/PlayerAnalytics.d.ts.map +1 -0
  30. package/packages/core/src/analytics/core/PlayerAnalytics.js +80 -0
  31. package/packages/core/src/analytics/core/PlayerAnalytics.js.map +1 -0
  32. package/packages/core/src/analytics/index.d.ts +13 -0
  33. package/packages/core/src/analytics/index.d.ts.map +1 -0
  34. package/packages/core/src/analytics/index.js +13 -0
  35. package/packages/core/src/analytics/index.js.map +1 -0
  36. package/packages/core/src/analytics/types/AnalyticsTypes.d.ts +239 -0
  37. package/packages/core/src/analytics/types/AnalyticsTypes.d.ts.map +1 -0
  38. package/packages/core/src/analytics/types/AnalyticsTypes.js +8 -0
  39. package/packages/core/src/analytics/types/AnalyticsTypes.js.map +1 -0
  40. package/packages/core/src/analytics/utils/DeviceDetection.d.ts +27 -0
  41. package/packages/core/src/analytics/utils/DeviceDetection.d.ts.map +1 -0
  42. package/packages/core/src/analytics/utils/DeviceDetection.js +184 -0
  43. package/packages/core/src/analytics/utils/DeviceDetection.js.map +1 -0
  44. package/packages/core/src/chapter-manager.d.ts +39 -0
  45. package/packages/core/src/chapter-manager.d.ts.map +1 -0
  46. package/packages/core/src/chapter-manager.js +173 -0
  47. package/packages/core/src/chapter-manager.js.map +1 -0
  48. package/packages/core/src/index.d.ts +10 -0
  49. package/packages/core/src/index.d.ts.map +1 -0
  50. package/packages/core/src/index.js +8 -0
  51. package/packages/core/src/index.js.map +1 -0
  52. package/packages/core/src/interfaces/IVideoPlayer.d.ts +229 -0
  53. package/packages/core/src/interfaces/IVideoPlayer.d.ts.map +1 -0
  54. package/packages/core/src/interfaces/IVideoPlayer.js +2 -0
  55. package/packages/core/src/interfaces/IVideoPlayer.js.map +1 -0
  56. package/packages/core/src/interfaces/IVideoPlayer.ts +0 -27
  57. package/packages/core/src/interfaces.d.ts +455 -0
  58. package/packages/core/src/interfaces.d.ts.map +1 -0
  59. package/packages/core/src/interfaces.js +32 -0
  60. package/packages/core/src/interfaces.js.map +1 -0
  61. package/packages/core/src/utils/EventEmitter.d.ts +14 -0
  62. package/packages/core/src/utils/EventEmitter.d.ts.map +1 -0
  63. package/packages/core/src/utils/EventEmitter.js +55 -0
  64. package/packages/core/src/utils/EventEmitter.js.map +1 -0
  65. package/packages/web/dist/WebPlayer.d.ts +0 -4
  66. package/packages/web/dist/WebPlayer.d.ts.map +1 -1
  67. package/packages/web/dist/WebPlayer.js +62 -73
  68. package/packages/web/dist/WebPlayer.js.map +1 -1
  69. package/packages/web/dist/drm/DRMManager.d.ts +16 -9
  70. package/packages/web/dist/drm/DRMManager.d.ts.map +1 -1
  71. package/packages/web/dist/drm/DRMManager.js +109 -42
  72. package/packages/web/dist/drm/DRMManager.js.map +1 -1
  73. package/packages/web/dist/drm/index.d.ts +15 -0
  74. package/packages/web/dist/drm/index.d.ts.map +1 -0
  75. package/packages/web/dist/drm/index.js +13 -0
  76. package/packages/web/dist/drm/index.js.map +1 -0
  77. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +19 -0
  78. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +1 -0
  79. package/packages/web/dist/drm/providers/BunnyNetProvider.js +112 -0
  80. package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +1 -0
  81. package/packages/web/dist/drm/providers/GenericProvider.d.ts +30 -0
  82. package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +1 -0
  83. package/packages/web/dist/drm/providers/GenericProvider.js +104 -0
  84. package/packages/web/dist/drm/providers/GenericProvider.js.map +1 -0
  85. package/packages/web/dist/drm/systems/BaseDRM.d.ts +18 -0
  86. package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +1 -0
  87. package/packages/web/dist/drm/systems/BaseDRM.js +29 -0
  88. package/packages/web/dist/drm/systems/BaseDRM.js.map +1 -0
  89. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +32 -0
  90. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +1 -0
  91. package/packages/web/dist/drm/systems/FairPlayDRM.js +198 -0
  92. package/packages/web/dist/drm/systems/FairPlayDRM.js.map +1 -0
  93. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +9 -0
  94. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +1 -0
  95. package/packages/web/dist/drm/systems/PlayReadyDRM.js +92 -0
  96. package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +1 -0
  97. package/packages/web/dist/drm/systems/WidevineDRM.d.ts +9 -0
  98. package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +1 -0
  99. package/packages/web/dist/drm/systems/WidevineDRM.js +73 -0
  100. package/packages/web/dist/drm/systems/WidevineDRM.js.map +1 -0
  101. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +20 -0
  102. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +1 -0
  103. package/packages/web/dist/drm/types/BunnyNetTypes.js +8 -0
  104. package/packages/web/dist/drm/types/BunnyNetTypes.js.map +1 -0
  105. package/packages/web/dist/drm/types/DRMTypes.d.ts +56 -49
  106. package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -1
  107. package/packages/web/dist/drm/types/DRMTypes.js +19 -13
  108. package/packages/web/dist/drm/types/DRMTypes.js.map +1 -1
  109. package/packages/web/dist/drm/utils/BrowserDetector.d.ts +20 -0
  110. package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -0
  111. package/packages/web/dist/drm/utils/BrowserDetector.js +168 -0
  112. package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -0
  113. package/packages/web/dist/drm/utils/CertificateManager.d.ts +15 -0
  114. package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +1 -0
  115. package/packages/web/dist/drm/utils/CertificateManager.js +46 -0
  116. package/packages/web/dist/drm/utils/CertificateManager.js.map +1 -0
  117. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +7 -0
  118. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +1 -0
  119. package/packages/web/dist/drm/utils/DRMErrorHandler.js +49 -0
  120. package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +1 -0
  121. package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts +15 -0
  122. package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts.map +1 -0
  123. package/packages/web/dist/drm/utils/LicenseRequestHandler.js +110 -0
  124. package/packages/web/dist/drm/utils/LicenseRequestHandler.js.map +1 -0
  125. package/packages/web/dist/react/WebPlayerView.d.ts +1 -18
  126. package/packages/web/dist/react/WebPlayerView.d.ts.map +1 -1
  127. package/packages/web/dist/react/WebPlayerView.js +0 -5
  128. package/packages/web/dist/react/WebPlayerView.js.map +1 -1
  129. package/packages/web/src/WebPlayer.ts +79 -106
  130. package/packages/web/src/drm/DRMManager.ts +214 -99
  131. package/packages/web/src/drm/index.ts +37 -0
  132. package/packages/web/src/drm/providers/BunnyNetProvider.ts +171 -0
  133. package/packages/web/src/drm/providers/GenericProvider.ts +151 -0
  134. package/packages/web/src/drm/systems/BaseDRM.ts +68 -0
  135. package/packages/web/src/drm/systems/FairPlayDRM.ts +306 -0
  136. package/packages/web/src/drm/systems/PlayReadyDRM.ts +132 -0
  137. package/packages/web/src/drm/systems/WidevineDRM.ts +106 -0
  138. package/packages/web/src/drm/types/BunnyNetTypes.ts +35 -0
  139. package/packages/web/src/drm/types/DRMTypes.ts +92 -97
  140. package/packages/web/src/drm/utils/BrowserDetector.ts +233 -0
  141. package/packages/web/src/drm/utils/CertificateManager.ts +86 -0
  142. package/packages/web/src/drm/utils/DRMErrorHandler.ts +84 -0
  143. package/packages/web/src/drm/utils/LicenseRequestHandler.ts +180 -0
  144. package/packages/web/src/react/WebPlayerView.tsx +1 -28
  145. package/packages/web/src/drm/BunnyCDNDRMProvider.ts +0 -104
  146. package/packages/web/src/drm/FairPlayDRMHandler.ts +0 -322
  147. package/packages/web/src/drm/WidevineDRMHandler.ts +0 -246
@@ -2,7 +2,6 @@ import { BasePlayer } from "../../core/dist/BasePlayer.js";
2
2
  import { ChapterManager as CoreChapterManager } from "../../core/dist/index.js";
3
3
  import { ChapterManager } from "./chapters/ChapterManager.js";
4
4
  import YouTubeExtractor from "./utils/YouTubeExtractor.js";
5
- import { DRMManager } from "./drm/DRMManager.js";
6
5
  export class WebPlayer extends BasePlayer {
7
6
  constructor() {
8
7
  super(...arguments);
@@ -50,8 +49,6 @@ export class WebPlayer extends BasePlayer {
50
49
  this.selectedSubtitleKey = 'off';
51
50
  this._kiTo = null;
52
51
  this.paywallController = null;
53
- this.drmManager = null;
54
- this.drmConfig = null;
55
52
  this._playPromise = null;
56
53
  this._deferredPause = false;
57
54
  this._lastToggleAt = 0;
@@ -533,10 +530,6 @@ export class WebPlayer extends BasePlayer {
533
530
  if (!this.video) {
534
531
  throw new Error('Video element not initialized');
535
532
  }
536
- if (source.drm) {
537
- this.debugLog('[WebPlayer] DRM configuration detected, initializing...');
538
- await this.initializeDRM(source);
539
- }
540
533
  const sourceType = this.detectSourceType(source);
541
534
  try {
542
535
  await this.loadVideoSource(source.url, sourceType, source);
@@ -555,45 +548,6 @@ export class WebPlayer extends BasePlayer {
555
548
  }
556
549
  }
557
550
  }
558
- async initializeDRM(source) {
559
- if (!source.drm)
560
- return;
561
- try {
562
- const webDRMConfig = this.convertDRMConfig(source.drm);
563
- this.drmManager = new DRMManager(webDRMConfig);
564
- await this.drmManager.initialize();
565
- this.debugLog('[WebPlayer] DRM initialized successfully');
566
- this.drmConfig = webDRMConfig;
567
- }
568
- catch (error) {
569
- console.error('[WebPlayer] Failed to initialize DRM:', error);
570
- this.handleError({
571
- code: 'DRM_INIT_ERROR',
572
- message: 'Failed to initialize DRM protection',
573
- type: 'drm',
574
- fatal: true,
575
- details: error
576
- });
577
- throw error;
578
- }
579
- }
580
- convertDRMConfig(drmConfig) {
581
- if (drmConfig.bunny) {
582
- return {
583
- provider: 'bunny',
584
- bunny: drmConfig.bunny
585
- };
586
- }
587
- return {
588
- provider: 'generic',
589
- generic: {
590
- type: drmConfig.type === 'fairplay' ? 'fairplay' : 'widevine',
591
- licenseUrl: drmConfig.licenseUrl,
592
- certificateUrl: drmConfig.certificateUrl,
593
- headers: drmConfig.headers
594
- }
595
- };
596
- }
597
551
  async loadVideoSource(url, sourceType, source) {
598
552
  switch (sourceType) {
599
553
  case 'hls':
@@ -797,12 +751,32 @@ export class WebPlayer extends BasePlayer {
797
751
  hlsConfig.startPosition = this.config.startTime;
798
752
  this.debugLog(`⏩ HLS startPosition set to: ${this.config.startTime}s (continue watching)`);
799
753
  }
800
- this.hls = new window.Hls(hlsConfig);
801
- if (this.drmManager && this.drmConfig) {
802
- this.debugLog('[WebPlayer] Setting up DRM for HLS playback...');
803
- await this.drmManager.setupDRM(this.video, url);
804
- this.debugLog('[WebPlayer] DRM setup complete');
754
+ if (this.source?.drm) {
755
+ try {
756
+ const { DRMManager } = await import('./drm/DRMManager');
757
+ const drmManager = new DRMManager(this.video, this.source.drm, this.config.debug);
758
+ this.debugLog('Initializing DRM for HLS...');
759
+ const initResult = await drmManager.initialize();
760
+ if (!initResult.success) {
761
+ throw initResult.error || new Error('DRM initialization failed');
762
+ }
763
+ const drmConfig = drmManager.getHLSConfig();
764
+ Object.assign(hlsConfig, drmConfig);
765
+ this.debugLog(`✅ HLS DRM configured: ${initResult.drmType} (${initResult.keySystem})`);
766
+ this._drmManager = drmManager;
767
+ }
768
+ catch (error) {
769
+ this.handleError({
770
+ code: 'DRM_ERROR',
771
+ message: `Failed to initialize DRM: ${error.message || error}`,
772
+ type: 'drm',
773
+ fatal: true,
774
+ details: error
775
+ });
776
+ throw error;
777
+ }
805
778
  }
779
+ this.hls = new window.Hls(hlsConfig);
806
780
  this.hls.loadSource(url);
807
781
  this.hls.attachMedia(this.video);
808
782
  this.hls.on(window.Hls.Events.MANIFEST_PARSED, (event, data) => {
@@ -833,11 +807,6 @@ export class WebPlayer extends BasePlayer {
833
807
  });
834
808
  }
835
809
  else if (this.video.canPlayType('application/vnd.apple.mpegurl')) {
836
- if (this.drmManager && this.drmConfig) {
837
- this.debugLog('[WebPlayer] Setting up DRM for native Safari HLS playback...');
838
- await this.drmManager.setupDRM(this.video, url);
839
- this.debugLog('[WebPlayer] DRM setup complete');
840
- }
841
810
  this.video.src = url;
842
811
  }
843
812
  else {
@@ -873,14 +842,34 @@ export class WebPlayer extends BasePlayer {
873
842
  await this.loadScript('https://cdn.dashjs.org/latest/dash.all.min.js');
874
843
  }
875
844
  this.dash = window.dashjs.MediaPlayer().create();
876
- if (this.drmManager && this.drmConfig) {
877
- this.debugLog('[WebPlayer] Setting up DRM for DASH playback...');
878
- await this.drmManager.setupDRM(this.video, url);
879
- this.debugLog('[WebPlayer] DRM setup complete');
880
- }
881
845
  if (this.config.startTime !== undefined && this.config.startTime > 0) {
882
846
  this.debugLog(`⏩ DASH will seek to: ${this.config.startTime}s on ready (continue watching)`);
883
847
  }
848
+ if (this.source?.drm) {
849
+ try {
850
+ const { DRMManager } = await import('./drm/DRMManager');
851
+ const drmManager = new DRMManager(this.video, this.source.drm, this.config.debug);
852
+ this.debugLog('Initializing DRM for DASH...');
853
+ const initResult = await drmManager.initialize();
854
+ if (!initResult.success) {
855
+ throw initResult.error || new Error('DRM initialization failed');
856
+ }
857
+ const protectionData = drmManager.getDashProtectionData();
858
+ this.dash.setProtectionData(protectionData);
859
+ this.debugLog(`✅ DASH DRM configured: ${initResult.drmType} (${initResult.keySystem})`);
860
+ this._drmManager = drmManager;
861
+ }
862
+ catch (error) {
863
+ this.handleError({
864
+ code: 'DRM_ERROR',
865
+ message: `Failed to initialize DRM: ${error.message || error}`,
866
+ type: 'drm',
867
+ fatal: true,
868
+ details: error
869
+ });
870
+ throw error;
871
+ }
872
+ }
884
873
  this.dash.initialize(this.video, url, this.config.autoPlay);
885
874
  this.dash.updateSettings({
886
875
  streaming: {
@@ -7524,14 +7513,10 @@ export class WebPlayer extends BasePlayer {
7524
7513
  this.isDetectedAsLive = true;
7525
7514
  }
7526
7515
  this.lastDuration = duration;
7527
- const isLiveStream = this.config.isLive === true ||
7528
- !isFinite(duration) ||
7529
- this.isDetectedAsLive ||
7530
- (duration > 0 && (duration - current) < 15);
7531
- if (isLiveStream) {
7516
+ if (this.config.isLive === true) {
7532
7517
  timeDisplay.innerHTML = '<span class="uvf-live-dot"></span><span class="uvf-live-text">LIVE</span>';
7533
7518
  timeDisplay.classList.add('uvf-is-live');
7534
- this.debugLog('Time display: LIVE stream detected (isLive=' + this.config.isLive + ', wasDetected=' + this.isDetectedAsLive + ', duration=' + duration + ')');
7519
+ this.debugLog('Time display: LIVE stream (isLive=true)');
7535
7520
  }
7536
7521
  else {
7537
7522
  const currentFormatted = this.formatTime(current);
@@ -9715,6 +9700,16 @@ export class WebPlayer extends BasePlayer {
9715
9700
  return epgBtn ? epgBtn.style.display !== 'none' : false;
9716
9701
  }
9717
9702
  async cleanup() {
9703
+ if (this._drmManager) {
9704
+ try {
9705
+ this.debugLog('Cleaning up DRM resources');
9706
+ await this._drmManager.destroy();
9707
+ this._drmManager = null;
9708
+ }
9709
+ catch (error) {
9710
+ this.debugLog('Error cleaning up DRM:', error);
9711
+ }
9712
+ }
9718
9713
  if (this.hls) {
9719
9714
  this.hls.destroy();
9720
9715
  this.hls = null;
@@ -9729,12 +9724,6 @@ export class WebPlayer extends BasePlayer {
9729
9724
  }
9730
9725
  async destroy() {
9731
9726
  await this.cleanup();
9732
- if (this.drmManager) {
9733
- this.debugLog('[WebPlayer] Cleaning up DRM resources...');
9734
- this.drmManager.destroy();
9735
- this.drmManager = null;
9736
- this.drmConfig = null;
9737
- }
9738
9727
  if (this.hideControlsTimeout) {
9739
9728
  clearTimeout(this.hideControlsTimeout);
9740
9729
  this.hideControlsTimeout = null;