@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.js CHANGED
@@ -1201,7 +1201,6 @@ var isPlayReadySupported = () => {
1201
1201
  return isXbox || (isEdge || isIE) && isWindows;
1202
1202
  };
1203
1203
  var supportsWidevinePersistentLicenses = () => {
1204
- return false;
1205
1204
  if (typeof navigator === "undefined") {
1206
1205
  return false;
1207
1206
  }
@@ -1226,7 +1225,7 @@ var supportsWidevinePersistentLicenses = () => {
1226
1225
  var import_mux_data_shakaplayer = __toESM(require("@mux/mux-data-shakaplayer"));
1227
1226
 
1228
1227
  // package.json
1229
- var version = "1.0.1-rc.60";
1228
+ var version = "1.0.1-rc.62";
1230
1229
 
1231
1230
  // src/utils/licenseCache.ts
1232
1231
  var PERSISTENT_LICENSE_PREFIX = "motto_lic_";
@@ -1396,6 +1395,8 @@ var useShakaPlayer = ({
1396
1395
  const waitingForKeyHandlerRef = (0, import_react.useRef)(null);
1397
1396
  const playbackResumedHandlerRef = (0, import_react.useRef)(null);
1398
1397
  const usingPersistentLicenseRef = (0, import_react.useRef)(false);
1398
+ const storedPersistentThisLoadRef = (0, import_react.useRef)(false);
1399
+ const drmExpirationHandlerRef = (0, import_react.useRef)(null);
1399
1400
  const getManifestUrl = (0, import_react.useCallback)(() => {
1400
1401
  let manifestUrl = src.url;
1401
1402
  const isDRM = Boolean(src.drm);
@@ -1427,6 +1428,7 @@ var useShakaPlayer = ({
1427
1428
  const manifestUrl = getManifestUrl();
1428
1429
  let playlistId = src.id;
1429
1430
  const isDRM = Boolean(src.drm);
1431
+ storedPersistentThisLoadRef.current = false;
1430
1432
  let storedSessionsMetadata = [];
1431
1433
  if (isDRM && playlistId) {
1432
1434
  storedSessionsMetadata = retrievePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "");
@@ -1539,6 +1541,36 @@ var useShakaPlayer = ({
1539
1541
  });
1540
1542
  }
1541
1543
  }
1544
+ if (isDRM && playlistId) {
1545
+ const onDRMSessionUpdate = () => {
1546
+ try {
1547
+ if (storedPersistentThisLoadRef.current) return;
1548
+ const activeDrmSessions = player.getActiveSessionsMetadata?.();
1549
+ if (!activeDrmSessions) return;
1550
+ const persistentSessions = activeDrmSessions.filter(
1551
+ (session) => session.sessionType === "persistent-license"
1552
+ );
1553
+ if (persistentSessions.length > 0) {
1554
+ const sessionsToStore = persistentSessions.map((session) => ({
1555
+ sessionId: session.sessionId,
1556
+ initData: session.initData,
1557
+ initDataType: session.initDataType,
1558
+ keySystem: session.keySystem || "com.widevine.alpha"
1559
+ }));
1560
+ storePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "", sessionsToStore);
1561
+ storedPersistentThisLoadRef.current = true;
1562
+ }
1563
+ } catch (e) {
1564
+ console.warn("Failed to persist licenses on expiration update:", e);
1565
+ }
1566
+ };
1567
+ try {
1568
+ player.addEventListener("drmsessionupdate", onDRMSessionUpdate);
1569
+ drmExpirationHandlerRef.current = onDRMSessionUpdate;
1570
+ } catch (e) {
1571
+ console.warn("Failed to attach drmsessionupdate listener:", e);
1572
+ }
1573
+ }
1542
1574
  player?.addEventListener("error", (event) => {
1543
1575
  const error = event.detail;
1544
1576
  if (error?.code === 7e3) {
@@ -1602,30 +1634,6 @@ var useShakaPlayer = ({
1602
1634
  }
1603
1635
  }
1604
1636
  await player.load(manifestUrl);
1605
- if (isDRM && playlistId) {
1606
- try {
1607
- setTimeout(() => {
1608
- const activeDrmSessions = player.getActiveSessionsMetadata?.();
1609
- if (activeDrmSessions) {
1610
- const persistentSessions = activeDrmSessions.filter(
1611
- (session) => session.sessionType === "persistent-license"
1612
- );
1613
- if (persistentSessions.length > 0) {
1614
- const sessionsToStore = persistentSessions.map((session) => ({
1615
- sessionId: session.sessionId,
1616
- initData: session.initData,
1617
- initDataType: session.initDataType,
1618
- keySystem: session.keySystem || "com.widevine.alpha"
1619
- // fallback
1620
- }));
1621
- storePersistentLicense(playlistId, src.drm.licenseCacheKey ?? "", sessionsToStore);
1622
- }
1623
- }
1624
- }, 2e3);
1625
- } catch (error) {
1626
- console.warn("Failed to store persistent license sessions:", error);
1627
- }
1628
- }
1629
1637
  onPlayerReady?.(player);
1630
1638
  return player;
1631
1639
  } catch (error) {
@@ -1661,11 +1669,21 @@ var useShakaPlayer = ({
1661
1669
  window.clearTimeout(waitingForKeyTimerRef.current);
1662
1670
  waitingForKeyTimerRef.current = null;
1663
1671
  }
1672
+ try {
1673
+ if (drmExpirationHandlerRef.current && playerRef.current?.removeEventListener) {
1674
+ playerRef.current.removeEventListener("drmsessionupdate", drmExpirationHandlerRef.current);
1675
+ }
1676
+ } catch (e) {
1677
+ console.warn("Error removing DRM expiration listener:", e);
1678
+ } finally {
1679
+ drmExpirationHandlerRef.current = null;
1680
+ }
1664
1681
  await playerRef.current.destroy();
1665
1682
  } catch (error) {
1666
1683
  console.warn("Error destroying Shaka Player:", error);
1667
1684
  } finally {
1668
1685
  playerRef.current = null;
1686
+ storedPersistentThisLoadRef.current = false;
1669
1687
  }
1670
1688
  }
1671
1689
  }, [playerRef]);
@@ -3810,6 +3828,7 @@ var Player = (0, import_react12.forwardRef)(
3810
3828
  const containerRef = (0, import_react12.useRef)(null);
3811
3829
  const [isScriptsLoaded, setIsScriptsLoaded] = (0, import_react12.useState)(false);
3812
3830
  const [isInitialLoading, setIsInitialLoading] = (0, import_react12.useState)(true);
3831
+ const [bfResetKey, setBfResetKey] = (0, import_react12.useState)(0);
3813
3832
  (0, import_react12.useImperativeHandle)(ref, () => videoRef.current, []);
3814
3833
  const { playerRef, initializePlayer, destroyPlayer, isRetrying } = useShakaPlayer({
3815
3834
  src,
@@ -3957,6 +3976,15 @@ var Player = (0, import_react12.forwardRef)(
3957
3976
  };
3958
3977
  loadRequiredScripts();
3959
3978
  }, [imaConfig?.adTagUrl, system73Config?.apiKey]);
3979
+ (0, import_react12.useEffect)(() => {
3980
+ const onPageShow = (e) => {
3981
+ if (e && e.persisted) {
3982
+ setBfResetKey((k) => k + 1);
3983
+ }
3984
+ };
3985
+ window.addEventListener("pageshow", onPageShow);
3986
+ return () => window.removeEventListener("pageshow", onPageShow);
3987
+ }, []);
3960
3988
  (0, import_react12.useEffect)(() => {
3961
3989
  const video = videoRef.current;
3962
3990
  if (!video || !isScriptsLoaded) return;
@@ -3996,7 +4024,7 @@ var Player = (0, import_react12.forwardRef)(
3996
4024
  destroyMux();
3997
4025
  destroyPlayer();
3998
4026
  };
3999
- }, [src, isScriptsLoaded]);
4027
+ }, [src, isScriptsLoaded, bfResetKey]);
4000
4028
  (0, import_react12.useEffect)(() => {
4001
4029
  const video = videoRef.current;
4002
4030
  if (!video) return;