stormcloud-video-player 0.8.24 → 0.8.25

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 (37) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/index.cjs +38 -11
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.cts +3 -1
  5. package/lib/index.d.ts +3 -1
  6. package/lib/index.js +35 -12
  7. package/lib/index.js.map +1 -1
  8. package/lib/player/AdBreakOrchestrator.cjs +30 -7
  9. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  10. package/lib/player/AdBreakOrchestrator.d.cts +2 -1
  11. package/lib/player/AdConfigManager.cjs +20 -3
  12. package/lib/player/AdConfigManager.cjs.map +1 -1
  13. package/lib/player/AdConfigManager.d.cts +1 -1
  14. package/lib/player/AdPreloadPool.d.cts +1 -1
  15. package/lib/player/AdTimingService.d.cts +1 -1
  16. package/lib/player/HlsEngine.d.cts +1 -1
  17. package/lib/player/PlayerControls.d.cts +1 -1
  18. package/lib/player/Scte35CueManager.d.cts +1 -1
  19. package/lib/player/Scte35Parser.d.cts +1 -1
  20. package/lib/player/StormcloudVideoPlayer.cjs +34 -11
  21. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  22. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  23. package/lib/player/playerTypes.d.cts +1 -1
  24. package/lib/players/HlsPlayer.cjs +34 -11
  25. package/lib/players/HlsPlayer.cjs.map +1 -1
  26. package/lib/players/HlsPlayer.d.cts +1 -1
  27. package/lib/players/index.cjs +34 -11
  28. package/lib/players/index.cjs.map +1 -1
  29. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  30. package/lib/{types-DNiBmPKK.d.cts → types-Bz4aRmzc.d.cts} +1 -0
  31. package/lib/ui/StormcloudVideoPlayer.cjs +34 -11
  32. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  33. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  34. package/lib/utils/tracking.cjs +22 -1
  35. package/lib/utils/tracking.cjs.map +1 -1
  36. package/lib/utils/tracking.d.cts +3 -2
  37. package/package.json +1 -1
package/lib/index.d.cts CHANGED
@@ -108,6 +108,7 @@ interface TrackingData extends ClientInfo {
108
108
  }
109
109
  interface PlayerAnalyticsContext {
110
110
  inputStreamType?: string;
111
+ debugAdTiming?: boolean;
111
112
  }
112
113
  interface HeartbeatData {
113
114
  browserId: string;
@@ -3924,6 +3925,7 @@ declare const IS_SAFARI: boolean;
3924
3925
  declare const SUPPORTS_HLS: () => boolean;
3925
3926
  declare const SUPPORTS_DASH: () => boolean;
3926
3927
 
3928
+ declare function buildAnalyticsContext(config: Pick<StormcloudVideoPlayerConfig, "debugAdTiming" | "isLiveStream">): PlayerAnalyticsContext;
3927
3929
  declare function getClientInfo(): ClientInfo;
3928
3930
  declare function getBrowserID(clientInfo: ClientInfo): Promise<string>;
3929
3931
  type PlayerMetricFlags = {
@@ -4035,4 +4037,4 @@ interface PalNonceManager {
4035
4037
  }
4036
4038
  declare function createPalNonceManager(): PalNonceManager;
4037
4039
 
4038
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4040
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.d.ts CHANGED
@@ -108,6 +108,7 @@ interface TrackingData extends ClientInfo {
108
108
  }
109
109
  interface PlayerAnalyticsContext {
110
110
  inputStreamType?: string;
111
+ debugAdTiming?: boolean;
111
112
  }
112
113
  interface HeartbeatData {
113
114
  browserId: string;
@@ -3924,6 +3925,7 @@ declare const IS_SAFARI: boolean;
3924
3925
  declare const SUPPORTS_HLS: () => boolean;
3925
3926
  declare const SUPPORTS_DASH: () => boolean;
3926
3927
 
3928
+ declare function buildAnalyticsContext(config: Pick<StormcloudVideoPlayerConfig, "debugAdTiming" | "isLiveStream">): PlayerAnalyticsContext;
3927
3929
  declare function getClientInfo(): ClientInfo;
3928
3930
  declare function getBrowserID(clientInfo: ClientInfo): Promise<string>;
3929
3931
  type PlayerMetricFlags = {
@@ -4035,4 +4037,4 @@ interface PalNonceManager {
4035
4037
  }
4036
4038
  declare function createPalNonceManager(): PalNonceManager;
4037
4039
 
4038
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4040
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.js CHANGED
@@ -1990,6 +1990,16 @@ function normalizeBoolean(value) {
1990
1990
  }
1991
1991
  // src/utils/tracking.ts
1992
1992
  var cachedBrowserId = null;
1993
+ function buildAnalyticsContext(config) {
1994
+ var context = {};
1995
+ if (config.debugAdTiming) {
1996
+ context.debugAdTiming = true;
1997
+ }
1998
+ if (config.isLiveStream !== void 0) {
1999
+ context.inputStreamType = config.isLiveStream ? "live" : "vod";
2000
+ }
2001
+ return context;
2002
+ }
1993
2003
  function getClientInfo() {
1994
2004
  var _screen, _screen1, _screen2, _screen3, _screen_orientation, _screen4, _screen5, _window, _window1, _window_screen_orientation, _window_screen, _navigator_languages;
1995
2005
  var ua = navigator.userAgent;
@@ -2248,19 +2258,26 @@ function canPublish(licenseKey) {
2248
2258
  }
2249
2259
  function buildPlayerMetricEvent() {
2250
2260
  return _async_to_generator(function() {
2251
- var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
2261
+ var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, debugAdTiming, playerId, captureAt;
2252
2262
  var _arguments = arguments;
2253
2263
  return _ts_generator(this, function(_state) {
2254
2264
  switch(_state.label){
2255
2265
  case 0:
2256
2266
  context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
2257
2267
  clientInfo = getClientInfo();
2268
+ debugAdTiming = !!context.debugAdTiming;
2269
+ if (debugAdTiming) {
2270
+ console.log("[StormcloudVideoPlayer] clientInfo: ", JSON.stringify(clientInfo, null, 2));
2271
+ }
2258
2272
  return [
2259
2273
  4,
2260
2274
  getBrowserID(clientInfo)
2261
2275
  ];
2262
2276
  case 1:
2263
2277
  playerId = _state.sent();
2278
+ if (debugAdTiming) {
2279
+ console.log("[StormcloudVideoPlayer] playerId: ", playerId);
2280
+ }
2264
2281
  captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
2265
2282
  return [
2266
2283
  2,
@@ -4932,7 +4949,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
4932
4949
  key: "initializeTracking",
4933
4950
  value: function initializeTracking() {
4934
4951
  var _this = this;
4935
- sendInitialTracking(this.config.licenseKey).then(function() {
4952
+ sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(function() {
4936
4953
  _this.heartbeatInterval = window.setInterval(function() {
4937
4954
  _this.sendHeartbeatIfNeeded();
4938
4955
  }, 5e3);
@@ -4953,7 +4970,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
4953
4970
  var now = Date.now();
4954
4971
  if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {
4955
4972
  this.lastHeartbeatTime = now;
4956
- sendHeartbeat(this.config.licenseKey).catch(function(error) {
4973
+ sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch(function(error) {
4957
4974
  if (_this.debug) {
4958
4975
  console.warn("[StormcloudVideoPlayer] Failed to send heartbeat:", error);
4959
4976
  }
@@ -6738,6 +6755,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
6738
6755
  return !!this.host.config.debugAdTiming;
6739
6756
  }
6740
6757
  },
6758
+ {
6759
+ key: "analyticsContext",
6760
+ get: function get() {
6761
+ return buildAnalyticsContext(this.host.config);
6762
+ }
6763
+ },
6741
6764
  {
6742
6765
  // ───────────────────────────────────────────────────────────────
6743
6766
  // IMA event listeners
@@ -6751,7 +6774,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
6751
6774
  source: "hls",
6752
6775
  adIndex: _this.timing.currentAdIndex,
6753
6776
  timestamp: /* @__PURE__ */ new Date().toISOString()
6754
- }).catch(function() {});
6777
+ }, _this.analyticsContext).catch(function() {});
6755
6778
  _this.timing.recordPlayedAdDuration(_this.host.getAdPlayer());
6756
6779
  var remaining = _this.timing.getRemainingAdMs();
6757
6780
  _this.timing.consecutiveFailures = 0;
@@ -6813,7 +6836,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
6813
6836
  source: "hls",
6814
6837
  adIndex: _this.timing.currentAdIndex,
6815
6838
  timestamp: /* @__PURE__ */ new Date().toISOString()
6816
- }).catch(function() {});
6839
+ }, _this.analyticsContext).catch(function() {});
6817
6840
  if (!_this.host.video.muted) {
6818
6841
  _this.host.video.muted = true;
6819
6842
  if (_this.debug) {
@@ -6960,7 +6983,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
6960
6983
  source: "hls",
6961
6984
  vastUrl: firstAdUrl,
6962
6985
  timestamp: /* @__PURE__ */ new Date().toISOString()
6963
- }).catch(function() {});
6986
+ }, this.analyticsContext).catch(function() {});
6964
6987
  if (this.debug) {
6965
6988
  console.log("[CONTINUOUS-FETCH] Using preloaded ad from pool (preloaded in advance, ready immediately!)");
6966
6989
  }
@@ -7074,7 +7097,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
7074
7097
  source: "hls",
7075
7098
  vastUrl: firstAdUrl,
7076
7099
  timestamp: /* @__PURE__ */ new Date().toISOString()
7077
- }).catch(function() {});
7100
+ }, this.analyticsContext).catch(function() {});
7078
7101
  if (this.debug) {
7079
7102
  console.log("[CONTINUOUS-FETCH] First ad request successful, starting playback");
7080
7103
  }
@@ -7538,7 +7561,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
7538
7561
  source: "hls",
7539
7562
  vastUrl: preloaded.vastUrl,
7540
7563
  timestamp: /* @__PURE__ */ new Date().toISOString()
7541
- }).catch(function() {});
7564
+ }, this.analyticsContext).catch(function() {});
7542
7565
  _state.label = 1;
7543
7566
  case 1:
7544
7567
  _state.trys.push([
@@ -7771,7 +7794,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
7771
7794
  source: "hls",
7772
7795
  vastUrl: vastTagUrl,
7773
7796
  timestamp: /* @__PURE__ */ new Date().toISOString()
7774
- }).catch(function() {});
7797
+ }, this.analyticsContext).catch(function() {});
7775
7798
  this.timing.clearAdRequestWatchdog();
7776
7799
  if (this.timing.activeAdRequestToken !== requestToken) return [
7777
7800
  2
@@ -8564,7 +8587,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8564
8587
  sendAdDetectTracking(this.config.licenseKey, _object_spread({
8565
8588
  source: "scte35",
8566
8589
  timestamp: /* @__PURE__ */ new Date().toISOString()
8567
- }, detectPayload)).catch(function() {});
8590
+ }, detectPayload), buildAnalyticsContext(this.config)).catch(function() {});
8568
8591
  }
8569
8592
  var hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;
8570
8593
  var durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : ((_this_adBreak_pendingAdBreak = this.adBreak.pendingAdBreak) === null || _this_adBreak_pendingAdBreak === void 0 ? void 0 : _this_adBreak_pendingAdBreak.marker.durationSeconds) != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;
@@ -8737,7 +8760,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8737
8760
  sendAdDetectTracking(this.config.licenseKey, _object_spread({
8738
8761
  source: "scte35",
8739
8762
  timestamp: /* @__PURE__ */ new Date().toISOString()
8740
- }, detectPayload)).catch(function() {});
8763
+ }, detectPayload), buildAnalyticsContext(this.config)).catch(function() {});
8741
8764
  if (this.debug) {
8742
8765
  console.log("[PREFETCH] Starting ad prefetch for upcoming ad break");
8743
8766
  console.log("[PREFETCH] Pre-generated ".concat(generatedUrls.length, " VAST URLs"));
@@ -11539,5 +11562,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
11539
11562
  };
11540
11563
  var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
11541
11564
  var StormcloudPlayer_default = StormcloudPlayer;
11542
- export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players_default as players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
11565
+ export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players_default as players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
11543
11566
  //# sourceMappingURL=index.js.map