@mottosports/motto-video-player 1.0.1-rc.60 → 1.0.1-rc.61

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/dist/index.mjs CHANGED
@@ -1160,7 +1160,6 @@ var isPlayReadySupported = () => {
1160
1160
  return isXbox || (isEdge || isIE) && isWindows;
1161
1161
  };
1162
1162
  var supportsWidevinePersistentLicenses = () => {
1163
- return false;
1164
1163
  if (typeof navigator === "undefined") {
1165
1164
  return false;
1166
1165
  }
@@ -1185,7 +1184,7 @@ var supportsWidevinePersistentLicenses = () => {
1185
1184
  import initShakaPlayerMux from "@mux/mux-data-shakaplayer";
1186
1185
 
1187
1186
  // package.json
1188
- var version = "1.0.1-rc.60";
1187
+ var version = "1.0.1-rc.61";
1189
1188
 
1190
1189
  // src/utils/licenseCache.ts
1191
1190
  var PERSISTENT_LICENSE_PREFIX = "motto_lic_";
@@ -1355,6 +1354,8 @@ var useShakaPlayer = ({
1355
1354
  const waitingForKeyHandlerRef = useRef(null);
1356
1355
  const playbackResumedHandlerRef = useRef(null);
1357
1356
  const usingPersistentLicenseRef = useRef(false);
1357
+ const storedPersistentThisLoadRef = useRef(false);
1358
+ const drmExpirationHandlerRef = useRef(null);
1358
1359
  const getManifestUrl = useCallback(() => {
1359
1360
  let manifestUrl = src.url;
1360
1361
  const isDRM = Boolean(src.drm);
@@ -1386,6 +1387,7 @@ var useShakaPlayer = ({
1386
1387
  const manifestUrl = getManifestUrl();
1387
1388
  let playlistId = src.id;
1388
1389
  const isDRM = Boolean(src.drm);
1390
+ storedPersistentThisLoadRef.current = false;
1389
1391
  let storedSessionsMetadata = [];
1390
1392
  if (isDRM && playlistId) {
1391
1393
  storedSessionsMetadata = retrievePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "");
@@ -1393,7 +1395,8 @@ var useShakaPlayer = ({
1393
1395
  if (isDRM) {
1394
1396
  const drmConfig2 = {
1395
1397
  servers: {
1396
- "com.widevine.alpha": src.drm.widevine?.licenseUrl,
1398
+ "com.widevine.alpha": "http://localhost:8787/drm/widevine",
1399
+ // src.drm.widevine?.licenseUrl,
1397
1400
  "com.microsoft.playready": src.drm.playready?.licenseUrl,
1398
1401
  "com.apple.fps": src.drm.fairplay?.licenseUrl
1399
1402
  },
@@ -1498,6 +1501,36 @@ var useShakaPlayer = ({
1498
1501
  });
1499
1502
  }
1500
1503
  }
1504
+ if (isDRM && playlistId) {
1505
+ const onDRMSessionUpdate = () => {
1506
+ try {
1507
+ if (storedPersistentThisLoadRef.current) return;
1508
+ const activeDrmSessions = player.getActiveSessionsMetadata?.();
1509
+ if (!activeDrmSessions) return;
1510
+ const persistentSessions = activeDrmSessions.filter(
1511
+ (session) => session.sessionType === "persistent-license"
1512
+ );
1513
+ if (persistentSessions.length > 0) {
1514
+ const sessionsToStore = persistentSessions.map((session) => ({
1515
+ sessionId: session.sessionId,
1516
+ initData: session.initData,
1517
+ initDataType: session.initDataType,
1518
+ keySystem: session.keySystem || "com.widevine.alpha"
1519
+ }));
1520
+ storePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "", sessionsToStore);
1521
+ storedPersistentThisLoadRef.current = true;
1522
+ }
1523
+ } catch (e) {
1524
+ console.warn("Failed to persist licenses on expiration update:", e);
1525
+ }
1526
+ };
1527
+ try {
1528
+ player.addEventListener("drmsessionupdate", onDRMSessionUpdate);
1529
+ drmExpirationHandlerRef.current = onDRMSessionUpdate;
1530
+ } catch (e) {
1531
+ console.warn("Failed to attach drmsessionupdate listener:", e);
1532
+ }
1533
+ }
1501
1534
  player?.addEventListener("error", (event) => {
1502
1535
  const error = event.detail;
1503
1536
  if (error?.code === 7e3) {
@@ -1561,30 +1594,6 @@ var useShakaPlayer = ({
1561
1594
  }
1562
1595
  }
1563
1596
  await player.load(manifestUrl);
1564
- if (isDRM && playlistId) {
1565
- try {
1566
- setTimeout(() => {
1567
- const activeDrmSessions = player.getActiveSessionsMetadata?.();
1568
- if (activeDrmSessions) {
1569
- const persistentSessions = activeDrmSessions.filter(
1570
- (session) => session.sessionType === "persistent-license"
1571
- );
1572
- if (persistentSessions.length > 0) {
1573
- const sessionsToStore = persistentSessions.map((session) => ({
1574
- sessionId: session.sessionId,
1575
- initData: session.initData,
1576
- initDataType: session.initDataType,
1577
- keySystem: session.keySystem || "com.widevine.alpha"
1578
- // fallback
1579
- }));
1580
- storePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "", sessionsToStore);
1581
- }
1582
- }
1583
- }, 2e3);
1584
- } catch (error) {
1585
- console.warn("Failed to store persistent license sessions:", error);
1586
- }
1587
- }
1588
1597
  onPlayerReady?.(player);
1589
1598
  return player;
1590
1599
  } catch (error) {
@@ -1620,11 +1629,21 @@ var useShakaPlayer = ({
1620
1629
  window.clearTimeout(waitingForKeyTimerRef.current);
1621
1630
  waitingForKeyTimerRef.current = null;
1622
1631
  }
1632
+ try {
1633
+ if (drmExpirationHandlerRef.current && playerRef.current?.removeEventListener) {
1634
+ playerRef.current.removeEventListener("drmsessionupdate", drmExpirationHandlerRef.current);
1635
+ }
1636
+ } catch (e) {
1637
+ console.warn("Error removing DRM expiration listener:", e);
1638
+ } finally {
1639
+ drmExpirationHandlerRef.current = null;
1640
+ }
1623
1641
  await playerRef.current.destroy();
1624
1642
  } catch (error) {
1625
1643
  console.warn("Error destroying Shaka Player:", error);
1626
1644
  } finally {
1627
1645
  playerRef.current = null;
1646
+ storedPersistentThisLoadRef.current = false;
1628
1647
  }
1629
1648
  }
1630
1649
  }, [playerRef]);
@@ -3769,6 +3788,7 @@ var Player = forwardRef(
3769
3788
  const containerRef = useRef8(null);
3770
3789
  const [isScriptsLoaded, setIsScriptsLoaded] = useState4(false);
3771
3790
  const [isInitialLoading, setIsInitialLoading] = useState4(true);
3791
+ const [bfResetKey, setBfResetKey] = useState4(0);
3772
3792
  useImperativeHandle(ref, () => videoRef.current, []);
3773
3793
  const { playerRef, initializePlayer, destroyPlayer, isRetrying } = useShakaPlayer({
3774
3794
  src,
@@ -3916,6 +3936,15 @@ var Player = forwardRef(
3916
3936
  };
3917
3937
  loadRequiredScripts();
3918
3938
  }, [imaConfig?.adTagUrl, system73Config?.apiKey]);
3939
+ useEffect5(() => {
3940
+ const onPageShow = (e) => {
3941
+ if (e && e.persisted) {
3942
+ setBfResetKey((k) => k + 1);
3943
+ }
3944
+ };
3945
+ window.addEventListener("pageshow", onPageShow);
3946
+ return () => window.removeEventListener("pageshow", onPageShow);
3947
+ }, []);
3919
3948
  useEffect5(() => {
3920
3949
  const video = videoRef.current;
3921
3950
  if (!video || !isScriptsLoaded) return;
@@ -3955,7 +3984,7 @@ var Player = forwardRef(
3955
3984
  destroyMux();
3956
3985
  destroyPlayer();
3957
3986
  };
3958
- }, [src, isScriptsLoaded]);
3987
+ }, [src, isScriptsLoaded, bfResetKey]);
3959
3988
  useEffect5(() => {
3960
3989
  const video = videoRef.current;
3961
3990
  if (!video) return;