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

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.62";
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 ?? "");
@@ -1498,6 +1500,36 @@ var useShakaPlayer = ({
1498
1500
  });
1499
1501
  }
1500
1502
  }
1503
+ if (isDRM && playlistId) {
1504
+ const onDRMSessionUpdate = () => {
1505
+ try {
1506
+ if (storedPersistentThisLoadRef.current) return;
1507
+ const activeDrmSessions = player.getActiveSessionsMetadata?.();
1508
+ if (!activeDrmSessions) return;
1509
+ const persistentSessions = activeDrmSessions.filter(
1510
+ (session) => session.sessionType === "persistent-license"
1511
+ );
1512
+ if (persistentSessions.length > 0) {
1513
+ const sessionsToStore = persistentSessions.map((session) => ({
1514
+ sessionId: session.sessionId,
1515
+ initData: session.initData,
1516
+ initDataType: session.initDataType,
1517
+ keySystem: session.keySystem || "com.widevine.alpha"
1518
+ }));
1519
+ storePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "", sessionsToStore);
1520
+ storedPersistentThisLoadRef.current = true;
1521
+ }
1522
+ } catch (e) {
1523
+ console.warn("Failed to persist licenses on expiration update:", e);
1524
+ }
1525
+ };
1526
+ try {
1527
+ player.addEventListener("drmsessionupdate", onDRMSessionUpdate);
1528
+ drmExpirationHandlerRef.current = onDRMSessionUpdate;
1529
+ } catch (e) {
1530
+ console.warn("Failed to attach drmsessionupdate listener:", e);
1531
+ }
1532
+ }
1501
1533
  player?.addEventListener("error", (event) => {
1502
1534
  const error = event.detail;
1503
1535
  if (error?.code === 7e3) {
@@ -1561,30 +1593,6 @@ var useShakaPlayer = ({
1561
1593
  }
1562
1594
  }
1563
1595
  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
1596
  onPlayerReady?.(player);
1589
1597
  return player;
1590
1598
  } catch (error) {
@@ -1620,11 +1628,21 @@ var useShakaPlayer = ({
1620
1628
  window.clearTimeout(waitingForKeyTimerRef.current);
1621
1629
  waitingForKeyTimerRef.current = null;
1622
1630
  }
1631
+ try {
1632
+ if (drmExpirationHandlerRef.current && playerRef.current?.removeEventListener) {
1633
+ playerRef.current.removeEventListener("drmsessionupdate", drmExpirationHandlerRef.current);
1634
+ }
1635
+ } catch (e) {
1636
+ console.warn("Error removing DRM expiration listener:", e);
1637
+ } finally {
1638
+ drmExpirationHandlerRef.current = null;
1639
+ }
1623
1640
  await playerRef.current.destroy();
1624
1641
  } catch (error) {
1625
1642
  console.warn("Error destroying Shaka Player:", error);
1626
1643
  } finally {
1627
1644
  playerRef.current = null;
1645
+ storedPersistentThisLoadRef.current = false;
1628
1646
  }
1629
1647
  }
1630
1648
  }, [playerRef]);
@@ -3769,6 +3787,7 @@ var Player = forwardRef(
3769
3787
  const containerRef = useRef8(null);
3770
3788
  const [isScriptsLoaded, setIsScriptsLoaded] = useState4(false);
3771
3789
  const [isInitialLoading, setIsInitialLoading] = useState4(true);
3790
+ const [bfResetKey, setBfResetKey] = useState4(0);
3772
3791
  useImperativeHandle(ref, () => videoRef.current, []);
3773
3792
  const { playerRef, initializePlayer, destroyPlayer, isRetrying } = useShakaPlayer({
3774
3793
  src,
@@ -3916,6 +3935,15 @@ var Player = forwardRef(
3916
3935
  };
3917
3936
  loadRequiredScripts();
3918
3937
  }, [imaConfig?.adTagUrl, system73Config?.apiKey]);
3938
+ useEffect5(() => {
3939
+ const onPageShow = (e) => {
3940
+ if (e && e.persisted) {
3941
+ setBfResetKey((k) => k + 1);
3942
+ }
3943
+ };
3944
+ window.addEventListener("pageshow", onPageShow);
3945
+ return () => window.removeEventListener("pageshow", onPageShow);
3946
+ }, []);
3919
3947
  useEffect5(() => {
3920
3948
  const video = videoRef.current;
3921
3949
  if (!video || !isScriptsLoaded) return;
@@ -3955,7 +3983,7 @@ var Player = forwardRef(
3955
3983
  destroyMux();
3956
3984
  destroyPlayer();
3957
3985
  };
3958
- }, [src, isScriptsLoaded]);
3986
+ }, [src, isScriptsLoaded, bfResetKey]);
3959
3987
  useEffect5(() => {
3960
3988
  const video = videoRef.current;
3961
3989
  if (!video) return;