stormcloud-video-player 0.6.12 → 0.6.13

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/lib/index.d.cts CHANGED
@@ -36,7 +36,6 @@ interface StormcloudVideoPlayerConfig {
36
36
  disableFiller?: boolean;
37
37
  adTransitionGapMs?: number;
38
38
  singlePipelineMode?: boolean;
39
- mqttBrokerUrl?: string;
40
39
  }
41
40
  interface ClientInfo {
42
41
  brand: string;
@@ -3984,11 +3983,31 @@ type PlayerMetricFlags = {
3984
3983
  declare function sendInitialTracking(licenseKey?: string, context?: PlayerAnalyticsContext): Promise<void>;
3985
3984
  declare function sendHeartbeat(licenseKey?: string, context?: PlayerAnalyticsContext, flags?: PlayerMetricFlags): Promise<void>;
3986
3985
 
3986
+ type MQTTConfig = {
3987
+ enabled: boolean;
3988
+ brokerAddress: string;
3989
+ brokerPort: number;
3990
+ wsPort: number;
3991
+ username: string;
3992
+ password: string;
3993
+ topicPrefix: string;
3994
+ qos: 0 | 1 | 2;
3995
+ brokerUrl?: string;
3996
+ };
3997
+ declare const DEFAULT_MQTT_CONFIG: MQTTConfig;
3998
+ declare const mqttConfig: MQTTConfig;
3999
+ declare function applyMQTTConfig(overrides: Partial<MQTTConfig>): void;
4000
+ declare function isMQTTEnabled(): boolean;
4001
+ declare function buildMQTTBrokerUrl(): string;
4002
+ declare function buildPlayerTopic(licenseKey: string, channel: "metrics" | "impressions" | "heartbeat"): string;
4003
+
3987
4004
  type MQTTStatus = "disconnected" | "connecting" | "connected" | "error";
3988
4005
  declare function getMQTTStatus(): MQTTStatus;
3989
4006
  declare function isMQTTConnected(): boolean;
3990
4007
  declare function isMQTTConfigured(): boolean;
3991
- declare function initMQTTClient(url: string, _topicPrefix?: string): void;
4008
+ declare function configureMQTT(overrides: Partial<MQTTConfig>): void;
4009
+ declare function initMQTTClient(): void;
4010
+ declare function ensureMQTTClient(): void;
3992
4011
  declare function publishMQTT(topic: string, payload: Record<string, unknown>): boolean;
3993
4012
  declare function disconnectMQTT(): void;
3994
4013
 
@@ -4074,4 +4093,4 @@ interface VastAdLayer {
4074
4093
  }
4075
4094
  declare function createVastAdLayer(contentVideo: HTMLVideoElement, options?: VastAdLayerOptions): VastAdLayer;
4076
4095
 
4077
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type MQTTStatus, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type VastAdLayer, type VastAdLayerOptions, type VastAdLayerOptionsUpdate, type VastBidResponse, type VastManager, type VastManagerOptions, canPlay, createStormcloudPlayer, createVastAdLayer, createVastManager, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, publishMQTT, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4096
+ export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type VastAdLayer, type VastAdLayerOptions, type VastAdLayerOptionsUpdate, type VastBidResponse, type VastManager, type VastManagerOptions, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createStormcloudPlayer, createVastAdLayer, createVastManager, 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, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.d.ts CHANGED
@@ -36,7 +36,6 @@ interface StormcloudVideoPlayerConfig {
36
36
  disableFiller?: boolean;
37
37
  adTransitionGapMs?: number;
38
38
  singlePipelineMode?: boolean;
39
- mqttBrokerUrl?: string;
40
39
  }
41
40
  interface ClientInfo {
42
41
  brand: string;
@@ -3984,11 +3983,31 @@ type PlayerMetricFlags = {
3984
3983
  declare function sendInitialTracking(licenseKey?: string, context?: PlayerAnalyticsContext): Promise<void>;
3985
3984
  declare function sendHeartbeat(licenseKey?: string, context?: PlayerAnalyticsContext, flags?: PlayerMetricFlags): Promise<void>;
3986
3985
 
3986
+ type MQTTConfig = {
3987
+ enabled: boolean;
3988
+ brokerAddress: string;
3989
+ brokerPort: number;
3990
+ wsPort: number;
3991
+ username: string;
3992
+ password: string;
3993
+ topicPrefix: string;
3994
+ qos: 0 | 1 | 2;
3995
+ brokerUrl?: string;
3996
+ };
3997
+ declare const DEFAULT_MQTT_CONFIG: MQTTConfig;
3998
+ declare const mqttConfig: MQTTConfig;
3999
+ declare function applyMQTTConfig(overrides: Partial<MQTTConfig>): void;
4000
+ declare function isMQTTEnabled(): boolean;
4001
+ declare function buildMQTTBrokerUrl(): string;
4002
+ declare function buildPlayerTopic(licenseKey: string, channel: "metrics" | "impressions" | "heartbeat"): string;
4003
+
3987
4004
  type MQTTStatus = "disconnected" | "connecting" | "connected" | "error";
3988
4005
  declare function getMQTTStatus(): MQTTStatus;
3989
4006
  declare function isMQTTConnected(): boolean;
3990
4007
  declare function isMQTTConfigured(): boolean;
3991
- declare function initMQTTClient(url: string, _topicPrefix?: string): void;
4008
+ declare function configureMQTT(overrides: Partial<MQTTConfig>): void;
4009
+ declare function initMQTTClient(): void;
4010
+ declare function ensureMQTTClient(): void;
3992
4011
  declare function publishMQTT(topic: string, payload: Record<string, unknown>): boolean;
3993
4012
  declare function disconnectMQTT(): void;
3994
4013
 
@@ -4074,4 +4093,4 @@ interface VastAdLayer {
4074
4093
  }
4075
4094
  declare function createVastAdLayer(contentVideo: HTMLVideoElement, options?: VastAdLayerOptions): VastAdLayer;
4076
4095
 
4077
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type MQTTStatus, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type VastAdLayer, type VastAdLayerOptions, type VastAdLayerOptionsUpdate, type VastBidResponse, type VastManager, type VastManagerOptions, canPlay, createStormcloudPlayer, createVastAdLayer, createVastManager, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, publishMQTT, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4096
+ export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type VastAdLayer, type VastAdLayerOptions, type VastAdLayerOptionsUpdate, type VastBidResponse, type VastManager, type VastManagerOptions, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createStormcloudPlayer, createVastAdLayer, createVastManager, 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, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.js CHANGED
@@ -2030,12 +2030,36 @@ function createVastAdLayer(contentVideo, options) {
2030
2030
  }
2031
2031
  };
2032
2032
  }
2033
+ // src/utils/mqttConfig.ts
2034
+ var DEFAULT_MQTT_CONFIG = {
2035
+ enabled: true,
2036
+ brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
2037
+ brokerPort: 8883,
2038
+ wsPort: 8084,
2039
+ username: "for-sonifi",
2040
+ password: "sonifi-mqtt",
2041
+ topicPrefix: "adstorm/players",
2042
+ qos: 1
2043
+ };
2044
+ var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
2045
+ function applyMQTTConfig(overrides) {
2046
+ Object.assign(mqttConfig, overrides);
2047
+ }
2048
+ function isMQTTEnabled() {
2049
+ return mqttConfig.enabled;
2050
+ }
2051
+ function buildMQTTBrokerUrl() {
2052
+ if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
2053
+ return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
2054
+ }
2055
+ function buildPlayerTopic(licenseKey, channel) {
2056
+ return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
2057
+ }
2033
2058
  // src/utils/mqttClient.ts
2034
2059
  import mqtt from "mqtt";
2035
2060
  var LOG2 = "[StormcloudVideoPlayer][MQTT]";
2036
2061
  var client = null;
2037
2062
  var status = "disconnected";
2038
- var brokerUrl = "";
2039
2063
  function getMQTTStatus() {
2040
2064
  return status;
2041
2065
  }
@@ -2043,17 +2067,22 @@ function isMQTTConnected() {
2043
2067
  return status === "connected" && client !== null && client.connected;
2044
2068
  }
2045
2069
  function isMQTTConfigured() {
2046
- return client !== null;
2070
+ return isMQTTEnabled();
2071
+ }
2072
+ function configureMQTT(overrides) {
2073
+ applyMQTTConfig(overrides);
2074
+ disconnectMQTT();
2047
2075
  }
2048
- function initMQTTClient(url) {
2049
- var _topicPrefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "adstorm";
2050
- if (client) return;
2051
- brokerUrl = url;
2076
+ function initMQTTClient() {
2077
+ if (client || !isMQTTEnabled()) return;
2078
+ var url = buildMQTTBrokerUrl();
2052
2079
  status = "connecting";
2053
2080
  var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
2054
2081
  try {
2055
2082
  client = mqtt.connect(url, {
2056
2083
  clientId: clientId,
2084
+ username: mqttConfig.username,
2085
+ password: mqttConfig.password,
2057
2086
  keepalive: 60,
2058
2087
  clean: true,
2059
2088
  reconnectPeriod: 5e3,
@@ -2087,13 +2116,22 @@ function initMQTTClient(url) {
2087
2116
  }
2088
2117
  });
2089
2118
  }
2119
+ function ensureMQTTClient() {
2120
+ if (isMQTTEnabled() && !client) {
2121
+ initMQTTClient();
2122
+ }
2123
+ }
2090
2124
  function publishMQTT(topic, payload) {
2125
+ if (!isMQTTEnabled()) {
2126
+ return false;
2127
+ }
2128
+ ensureMQTTClient();
2091
2129
  if (!client) {
2092
2130
  return false;
2093
2131
  }
2094
2132
  try {
2095
2133
  client.publish(topic, JSON.stringify(payload), {
2096
- qos: 1
2134
+ qos: mqttConfig.qos
2097
2135
  });
2098
2136
  return true;
2099
2137
  } catch (err) {
@@ -2106,7 +2144,6 @@ function disconnectMQTT() {
2106
2144
  client.end(true);
2107
2145
  client = null;
2108
2146
  status = "disconnected";
2109
- brokerUrl = "";
2110
2147
  }
2111
2148
  }
2112
2149
  // src/utils/tracking.ts
@@ -2328,171 +2365,91 @@ function getBrowserID(clientInfo) {
2328
2365
  });
2329
2366
  })();
2330
2367
  }
2331
- var mqttTopicPrefix = "adstorm";
2332
- function setMQTTTopicPrefix(prefix) {
2333
- mqttTopicPrefix = prefix || "adstorm";
2334
- }
2335
- var PLAYER_TRACKING_BASE_URL = "https://adstorm.co/api-adstorm-dev/adstorm/player-tracking";
2336
- var TRACK_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/metrics/ingest");
2337
- var HEARTBEAT_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/heartbeat");
2338
- var IMPRESSIONS_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/impressions/ingest");
2339
- function buildHeaders(licenseKey) {
2340
- var headers = {
2341
- "Content-Type": "application/json"
2342
- };
2343
- if (licenseKey) headers["Authorization"] = "Bearer ".concat(licenseKey);
2344
- return headers;
2368
+ function canPublish(licenseKey) {
2369
+ return Boolean(isMQTTEnabled() && licenseKey);
2345
2370
  }
2346
- function postJson(url, licenseKey, body) {
2371
+ function buildPlayerMetricEvent() {
2347
2372
  return _async_to_generator(function() {
2348
- var response;
2349
- return _ts_generator(this, function(_state) {
2350
- switch(_state.label){
2351
- case 0:
2352
- return [
2353
- 4,
2354
- fetch(url, {
2355
- method: "POST",
2356
- headers: buildHeaders(licenseKey),
2357
- body: JSON.stringify(body)
2358
- })
2359
- ];
2360
- case 1:
2361
- response = _state.sent();
2362
- if (!response.ok) throw new Error("HTTP error! status: ".concat(response.status));
2363
- return [
2364
- 4,
2365
- response.json()
2366
- ];
2367
- case 2:
2368
- _state.sent();
2369
- return [
2370
- 2
2371
- ];
2372
- }
2373
- });
2374
- })();
2375
- }
2376
- function buildPlayerMetricEvent(_0) {
2377
- return _async_to_generator(function(licenseKey) {
2378
- var context, flags, _flags_captureAt, clientInfo, browserId, captureAt;
2373
+ var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
2379
2374
  var _arguments = arguments;
2380
2375
  return _ts_generator(this, function(_state) {
2381
2376
  switch(_state.label){
2382
2377
  case 0:
2383
- context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2378
+ context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
2384
2379
  clientInfo = getClientInfo();
2385
2380
  return [
2386
2381
  4,
2387
2382
  getBrowserID(clientInfo)
2388
2383
  ];
2389
2384
  case 1:
2390
- browserId = _state.sent();
2385
+ playerId = _state.sent();
2391
2386
  captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
2392
2387
  return [
2393
2388
  2,
2394
- {
2395
- player_id: browserId,
2396
- browserId: browserId,
2389
+ _object_spread({
2390
+ player_id: playerId,
2397
2391
  device_type: clientInfo.deviceType,
2398
- deviceType: clientInfo.deviceType,
2399
- input_stream_type: context.inputStreamType,
2400
- os: clientInfo.os,
2401
- ad_loaded: flags.adLoaded,
2402
- ad_detect: flags.adDetect,
2403
- license_key: licenseKey,
2404
- capture_at: captureAt,
2405
- timestamp: captureAt
2406
- }
2392
+ os: clientInfo.os.toLowerCase(),
2393
+ ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
2394
+ ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
2395
+ capture_at: captureAt
2396
+ }, context.inputStreamType ? {
2397
+ input_stream_type: context.inputStreamType
2398
+ } : {})
2407
2399
  ];
2408
2400
  }
2409
2401
  });
2410
2402
  }).apply(this, arguments);
2411
2403
  }
2412
- function publishOrPost(mqttTopic, httpUrl, licenseKey, body) {
2413
- return _async_to_generator(function() {
2414
- return _ts_generator(this, function(_state) {
2415
- switch(_state.label){
2416
- case 0:
2417
- if (isMQTTConfigured()) {
2418
- publishMQTT(mqttTopic, body);
2419
- return [
2420
- 2
2421
- ];
2422
- }
2423
- return [
2424
- 4,
2425
- postJson(httpUrl, licenseKey, body)
2426
- ];
2427
- case 1:
2428
- _state.sent();
2429
- return [
2430
- 2
2431
- ];
2432
- }
2433
- });
2434
- })();
2404
+ function publishTracking(licenseKey, channel, body) {
2405
+ ensureMQTTClient();
2406
+ publishMQTT(buildPlayerTopic(licenseKey, channel), body);
2435
2407
  }
2436
2408
  function sendInitialTracking(_0) {
2437
2409
  return _async_to_generator(function(licenseKey) {
2438
- var context, clientInfo, browserId, captureAt, trackingData, metricsBody, error;
2410
+ var context, metricEvent, error;
2439
2411
  var _arguments = arguments;
2440
2412
  return _ts_generator(this, function(_state) {
2441
2413
  switch(_state.label){
2442
2414
  case 0:
2443
2415
  context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
2416
+ if (!canPublish(licenseKey)) return [
2417
+ 2
2418
+ ];
2444
2419
  _state.label = 1;
2445
2420
  case 1:
2446
2421
  _state.trys.push([
2447
2422
  1,
2448
- 4,
2423
+ 3,
2449
2424
  ,
2450
- 5
2425
+ 4
2451
2426
  ]);
2452
- clientInfo = getClientInfo();
2453
2427
  return [
2454
2428
  4,
2455
- getBrowserID(clientInfo)
2429
+ buildPlayerMetricEvent(context, {
2430
+ adLoaded: false,
2431
+ adDetect: false
2432
+ })
2456
2433
  ];
2457
2434
  case 2:
2458
- browserId = _state.sent();
2459
- captureAt = /* @__PURE__ */ new Date().toISOString();
2460
- trackingData = _object_spread({
2461
- browserId: browserId
2462
- }, clientInfo);
2463
- metricsBody = {
2435
+ metricEvent = _state.sent();
2436
+ publishTracking(licenseKey, "metrics", {
2464
2437
  events: [
2465
- {
2466
- player_id: browserId,
2467
- device_type: clientInfo.deviceType,
2468
- input_stream_type: context.inputStreamType,
2469
- os: clientInfo.os,
2470
- ad_loaded: false,
2471
- ad_detect: false,
2472
- license_key: licenseKey,
2473
- capture_at: captureAt
2474
- }
2475
- ],
2476
- trackingData: trackingData
2477
- };
2478
- return [
2479
- 4,
2480
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/metrics"), TRACK_URL, licenseKey, metricsBody)
2481
- ];
2482
- case 3:
2483
- _state.sent();
2438
+ metricEvent
2439
+ ]
2440
+ });
2484
2441
  return [
2485
2442
  3,
2486
- 5
2443
+ 4
2487
2444
  ];
2488
- case 4:
2445
+ case 3:
2489
2446
  error = _state.sent();
2490
2447
  console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
2491
2448
  return [
2492
2449
  3,
2493
- 5
2450
+ 4
2494
2451
  ];
2495
- case 5:
2452
+ case 4:
2496
2453
  return [
2497
2454
  2
2498
2455
  ];
@@ -2590,61 +2547,54 @@ function sendAdLoadedTracking(_0, _1) {
2590
2547
  }
2591
2548
  function sendAdImpressionTracking(_0, _1) {
2592
2549
  return _async_to_generator(function(licenseKey, adImpressionInfo) {
2593
- var context, metricEvent, heartbeatBody, impressionsBody, error;
2550
+ var context, metricEvent, error;
2594
2551
  var _arguments = arguments;
2595
2552
  return _ts_generator(this, function(_state) {
2596
2553
  switch(_state.label){
2597
2554
  case 0:
2598
2555
  context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2556
+ if (!canPublish(licenseKey)) return [
2557
+ 2
2558
+ ];
2599
2559
  _state.label = 1;
2600
2560
  case 1:
2601
2561
  _state.trys.push([
2602
2562
  1,
2603
- 4,
2563
+ 3,
2604
2564
  ,
2605
- 5
2565
+ 4
2606
2566
  ]);
2607
2567
  return [
2608
2568
  4,
2609
- buildPlayerMetricEvent(licenseKey, context, {
2569
+ buildPlayerMetricEvent(context, {
2610
2570
  captureAt: adImpressionInfo.timestamp
2611
2571
  })
2612
2572
  ];
2613
2573
  case 2:
2614
2574
  metricEvent = _state.sent();
2615
- heartbeatBody = metricEvent;
2616
- impressionsBody = {
2575
+ publishTracking(licenseKey, "heartbeat", metricEvent);
2576
+ publishTracking(licenseKey, "impressions", {
2617
2577
  events: [
2618
2578
  {
2619
2579
  player_id: metricEvent.player_id,
2620
2580
  ad_played_count: 1,
2621
2581
  ad_url: adImpressionInfo.adUrl,
2622
- license_key: licenseKey,
2623
2582
  capture_at: adImpressionInfo.timestamp
2624
2583
  }
2625
2584
  ]
2626
- };
2627
- return [
2628
- 4,
2629
- Promise.all([
2630
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/heartbeat"), HEARTBEAT_URL, licenseKey, heartbeatBody),
2631
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/impressions"), IMPRESSIONS_URL, licenseKey, impressionsBody)
2632
- ])
2633
- ];
2634
- case 3:
2635
- _state.sent();
2585
+ });
2636
2586
  return [
2637
2587
  3,
2638
- 5
2588
+ 4
2639
2589
  ];
2640
- case 4:
2590
+ case 3:
2641
2591
  error = _state.sent();
2642
2592
  console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
2643
2593
  return [
2644
2594
  3,
2645
- 5
2595
+ 4
2646
2596
  ];
2647
- case 5:
2597
+ case 4:
2648
2598
  return [
2649
2599
  2
2650
2600
  ];
@@ -2660,38 +2610,36 @@ function sendHeartbeat(_0) {
2660
2610
  switch(_state.label){
2661
2611
  case 0:
2662
2612
  context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2613
+ if (!canPublish(licenseKey)) return [
2614
+ 2
2615
+ ];
2663
2616
  _state.label = 1;
2664
2617
  case 1:
2665
2618
  _state.trys.push([
2666
2619
  1,
2667
- 4,
2620
+ 3,
2668
2621
  ,
2669
- 5
2622
+ 4
2670
2623
  ]);
2671
2624
  return [
2672
2625
  4,
2673
- buildPlayerMetricEvent(licenseKey, context, flags)
2626
+ buildPlayerMetricEvent(context, flags)
2674
2627
  ];
2675
2628
  case 2:
2676
2629
  heartbeatData = _state.sent();
2677
- return [
2678
- 4,
2679
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/heartbeat"), HEARTBEAT_URL, licenseKey, heartbeatData)
2680
- ];
2681
- case 3:
2682
- _state.sent();
2630
+ publishTracking(licenseKey, "heartbeat", heartbeatData);
2683
2631
  return [
2684
2632
  3,
2685
- 5
2633
+ 4
2686
2634
  ];
2687
- case 4:
2635
+ case 3:
2688
2636
  error = _state.sent();
2689
2637
  console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
2690
2638
  return [
2691
2639
  3,
2692
- 5
2640
+ 4
2693
2641
  ];
2694
- case 5:
2642
+ case 4:
2695
2643
  return [
2696
2644
  2
2697
2645
  ];
@@ -4633,10 +4581,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
4633
4581
  key: "initializeTracking",
4634
4582
  value: function initializeTracking() {
4635
4583
  var _this = this;
4636
- if (this.config.mqttBrokerUrl) {
4637
- var topicPrefix = "adstorm";
4638
- setMQTTTopicPrefix(topicPrefix);
4639
- initMQTTClient(this.config.mqttBrokerUrl, topicPrefix);
4584
+ if (isMQTTEnabled()) {
4585
+ initMQTTClient();
4640
4586
  }
4641
4587
  sendInitialTracking(this.config.licenseKey, this.getAnalyticsContext()).then(function() {
4642
4588
  _this.heartbeatInterval = window.setInterval(function() {
@@ -6317,7 +6263,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
6317
6263
  clearInterval(this.heartbeatInterval);
6318
6264
  this.heartbeatInterval = void 0;
6319
6265
  }
6320
- if (this.config.mqttBrokerUrl) {
6266
+ if (isMQTTEnabled()) {
6321
6267
  disconnectMQTT();
6322
6268
  }
6323
6269
  (_this_hls = this.hls) === null || _this_hls === void 0 ? void 0 : _this_hls.destroy();
@@ -6341,7 +6287,7 @@ var CRITICAL_PROPS = [
6341
6287
  var CONTROLS_HIDE_DELAY = 3e3;
6342
6288
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
6343
6289
  var StormcloudVideoPlayerComponent = React.memo(function(props) {
6344
- var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, mqttBrokerUrl = props.mqttBrokerUrl, restVideoAttrs = _object_without_properties(props, [
6290
+ var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, restVideoAttrs = _object_without_properties(props, [
6345
6291
  "src",
6346
6292
  "autoplay",
6347
6293
  "muted",
@@ -6368,8 +6314,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
6368
6314
  "licenseKey",
6369
6315
  "minSegmentsBeforePlay",
6370
6316
  "disableAds",
6371
- "disableFiller",
6372
- "mqttBrokerUrl"
6317
+ "disableFiller"
6373
6318
  ]);
6374
6319
  var videoRef = useRef(null);
6375
6320
  var playerRef = useRef(null);
@@ -6529,7 +6474,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
6529
6474
  if (minSegmentsBeforePlay !== void 0) cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;
6530
6475
  if (disableAds !== void 0) cfg.disableAds = disableAds;
6531
6476
  cfg.disableFiller = disableFiller !== null && disableFiller !== void 0 ? disableFiller : true;
6532
- if (mqttBrokerUrl !== void 0) cfg.mqttBrokerUrl = mqttBrokerUrl;
6533
6477
  var player = new StormcloudVideoPlayer(cfg);
6534
6478
  playerRef.current = player;
6535
6479
  player.load().then(function() {
@@ -8764,5 +8708,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
8764
8708
  };
8765
8709
  var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
8766
8710
  var StormcloudPlayer_default = StormcloudPlayer;
8767
- export { IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, canPlay, createStormcloudPlayer, createVastAdLayer, createVastManager, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players_default as players, publishMQTT, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
8711
+ export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createStormcloudPlayer, createVastAdLayer, createVastManager, 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, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
8768
8712
  //# sourceMappingURL=index.js.map