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.
@@ -1,4 +1,4 @@
1
- import { S as StormcloudVideoPlayerConfig } from '../types-FjAlGhAL.cjs';
1
+ import { S as StormcloudVideoPlayerConfig } from '../types-DSKC4ySr.cjs';
2
2
 
3
3
  declare class StormcloudVideoPlayer {
4
4
  private readonly video;
@@ -2060,24 +2060,43 @@ function createVastAdLayer(contentVideo, options) {
2060
2060
  }
2061
2061
  };
2062
2062
  }
2063
+ // src/utils/mqttConfig.ts
2064
+ var DEFAULT_MQTT_CONFIG = {
2065
+ enabled: true,
2066
+ brokerAddress: "vecbae77.ala.us-east-1.emqxsl.com",
2067
+ brokerPort: 8883,
2068
+ wsPort: 8084,
2069
+ username: "for-sonifi",
2070
+ password: "sonifi-mqtt",
2071
+ topicPrefix: "adstorm/players",
2072
+ qos: 1
2073
+ };
2074
+ var mqttConfig = _object_spread({}, DEFAULT_MQTT_CONFIG);
2075
+ function isMQTTEnabled() {
2076
+ return mqttConfig.enabled;
2077
+ }
2078
+ function buildMQTTBrokerUrl() {
2079
+ if (mqttConfig.brokerUrl) return mqttConfig.brokerUrl;
2080
+ return "wss://".concat(mqttConfig.brokerAddress, ":").concat(mqttConfig.wsPort, "/mqtt");
2081
+ }
2082
+ function buildPlayerTopic(licenseKey, channel) {
2083
+ return "".concat(mqttConfig.topicPrefix, "/").concat(licenseKey, "/").concat(channel);
2084
+ }
2063
2085
  // src/utils/mqttClient.ts
2064
2086
  var import_mqtt = __toESM(require("mqtt"), 1);
2065
2087
  var LOG2 = "[StormcloudVideoPlayer][MQTT]";
2066
2088
  var client = null;
2067
2089
  var status = "disconnected";
2068
- var brokerUrl = "";
2069
- function isMQTTConfigured() {
2070
- return client !== null;
2071
- }
2072
- function initMQTTClient(url) {
2073
- var _topicPrefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "adstorm";
2074
- if (client) return;
2075
- brokerUrl = url;
2090
+ function initMQTTClient() {
2091
+ if (client || !isMQTTEnabled()) return;
2092
+ var url = buildMQTTBrokerUrl();
2076
2093
  status = "connecting";
2077
2094
  var clientId = "stormcloud-vp-".concat(Math.random().toString(36).slice(2, 9));
2078
2095
  try {
2079
2096
  client = import_mqtt.default.connect(url, {
2080
2097
  clientId: clientId,
2098
+ username: mqttConfig.username,
2099
+ password: mqttConfig.password,
2081
2100
  keepalive: 60,
2082
2101
  clean: true,
2083
2102
  reconnectPeriod: 5e3,
@@ -2111,13 +2130,22 @@ function initMQTTClient(url) {
2111
2130
  }
2112
2131
  });
2113
2132
  }
2133
+ function ensureMQTTClient() {
2134
+ if (isMQTTEnabled() && !client) {
2135
+ initMQTTClient();
2136
+ }
2137
+ }
2114
2138
  function publishMQTT(topic, payload) {
2139
+ if (!isMQTTEnabled()) {
2140
+ return false;
2141
+ }
2142
+ ensureMQTTClient();
2115
2143
  if (!client) {
2116
2144
  return false;
2117
2145
  }
2118
2146
  try {
2119
2147
  client.publish(topic, JSON.stringify(payload), {
2120
- qos: 1
2148
+ qos: mqttConfig.qos
2121
2149
  });
2122
2150
  return true;
2123
2151
  } catch (err) {
@@ -2130,7 +2158,6 @@ function disconnectMQTT() {
2130
2158
  client.end(true);
2131
2159
  client = null;
2132
2160
  status = "disconnected";
2133
- brokerUrl = "";
2134
2161
  }
2135
2162
  }
2136
2163
  // src/utils/tracking.ts
@@ -2352,171 +2379,91 @@ function getBrowserID(clientInfo) {
2352
2379
  });
2353
2380
  })();
2354
2381
  }
2355
- var mqttTopicPrefix = "adstorm";
2356
- function setMQTTTopicPrefix(prefix) {
2357
- mqttTopicPrefix = prefix || "adstorm";
2358
- }
2359
- var PLAYER_TRACKING_BASE_URL = "https://adstorm.co/api-adstorm-dev/adstorm/player-tracking";
2360
- var TRACK_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/metrics/ingest");
2361
- var HEARTBEAT_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/heartbeat");
2362
- var IMPRESSIONS_URL = "".concat(PLAYER_TRACKING_BASE_URL, "/impressions/ingest");
2363
- function buildHeaders(licenseKey) {
2364
- var headers = {
2365
- "Content-Type": "application/json"
2366
- };
2367
- if (licenseKey) headers["Authorization"] = "Bearer ".concat(licenseKey);
2368
- return headers;
2382
+ function canPublish(licenseKey) {
2383
+ return Boolean(isMQTTEnabled() && licenseKey);
2369
2384
  }
2370
- function postJson(url, licenseKey, body) {
2385
+ function buildPlayerMetricEvent() {
2371
2386
  return _async_to_generator(function() {
2372
- var response;
2373
- return _ts_generator(this, function(_state) {
2374
- switch(_state.label){
2375
- case 0:
2376
- return [
2377
- 4,
2378
- fetch(url, {
2379
- method: "POST",
2380
- headers: buildHeaders(licenseKey),
2381
- body: JSON.stringify(body)
2382
- })
2383
- ];
2384
- case 1:
2385
- response = _state.sent();
2386
- if (!response.ok) throw new Error("HTTP error! status: ".concat(response.status));
2387
- return [
2388
- 4,
2389
- response.json()
2390
- ];
2391
- case 2:
2392
- _state.sent();
2393
- return [
2394
- 2
2395
- ];
2396
- }
2397
- });
2398
- })();
2399
- }
2400
- function buildPlayerMetricEvent(_0) {
2401
- return _async_to_generator(function(licenseKey) {
2402
- var context, flags, _flags_captureAt, clientInfo, browserId, captureAt;
2387
+ var context, flags, _flags_captureAt, _flags_adLoaded, _flags_adDetect, clientInfo, playerId, captureAt;
2403
2388
  var _arguments = arguments;
2404
2389
  return _ts_generator(this, function(_state) {
2405
2390
  switch(_state.label){
2406
2391
  case 0:
2407
- context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2392
+ context = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, flags = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
2408
2393
  clientInfo = getClientInfo();
2409
2394
  return [
2410
2395
  4,
2411
2396
  getBrowserID(clientInfo)
2412
2397
  ];
2413
2398
  case 1:
2414
- browserId = _state.sent();
2399
+ playerId = _state.sent();
2415
2400
  captureAt = (_flags_captureAt = flags.captureAt) !== null && _flags_captureAt !== void 0 ? _flags_captureAt : /* @__PURE__ */ new Date().toISOString();
2416
2401
  return [
2417
2402
  2,
2418
- {
2419
- player_id: browserId,
2420
- browserId: browserId,
2403
+ _object_spread({
2404
+ player_id: playerId,
2421
2405
  device_type: clientInfo.deviceType,
2422
- deviceType: clientInfo.deviceType,
2423
- input_stream_type: context.inputStreamType,
2424
- os: clientInfo.os,
2425
- ad_loaded: flags.adLoaded,
2426
- ad_detect: flags.adDetect,
2427
- license_key: licenseKey,
2428
- capture_at: captureAt,
2429
- timestamp: captureAt
2430
- }
2406
+ os: clientInfo.os.toLowerCase(),
2407
+ ad_loaded: (_flags_adLoaded = flags.adLoaded) !== null && _flags_adLoaded !== void 0 ? _flags_adLoaded : false,
2408
+ ad_detect: (_flags_adDetect = flags.adDetect) !== null && _flags_adDetect !== void 0 ? _flags_adDetect : false,
2409
+ capture_at: captureAt
2410
+ }, context.inputStreamType ? {
2411
+ input_stream_type: context.inputStreamType
2412
+ } : {})
2431
2413
  ];
2432
2414
  }
2433
2415
  });
2434
2416
  }).apply(this, arguments);
2435
2417
  }
2436
- function publishOrPost(mqttTopic, httpUrl, licenseKey, body) {
2437
- return _async_to_generator(function() {
2438
- return _ts_generator(this, function(_state) {
2439
- switch(_state.label){
2440
- case 0:
2441
- if (isMQTTConfigured()) {
2442
- publishMQTT(mqttTopic, body);
2443
- return [
2444
- 2
2445
- ];
2446
- }
2447
- return [
2448
- 4,
2449
- postJson(httpUrl, licenseKey, body)
2450
- ];
2451
- case 1:
2452
- _state.sent();
2453
- return [
2454
- 2
2455
- ];
2456
- }
2457
- });
2458
- })();
2418
+ function publishTracking(licenseKey, channel, body) {
2419
+ ensureMQTTClient();
2420
+ publishMQTT(buildPlayerTopic(licenseKey, channel), body);
2459
2421
  }
2460
2422
  function sendInitialTracking(_0) {
2461
2423
  return _async_to_generator(function(licenseKey) {
2462
- var context, clientInfo, browserId, captureAt, trackingData, metricsBody, error;
2424
+ var context, metricEvent, error;
2463
2425
  var _arguments = arguments;
2464
2426
  return _ts_generator(this, function(_state) {
2465
2427
  switch(_state.label){
2466
2428
  case 0:
2467
2429
  context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
2430
+ if (!canPublish(licenseKey)) return [
2431
+ 2
2432
+ ];
2468
2433
  _state.label = 1;
2469
2434
  case 1:
2470
2435
  _state.trys.push([
2471
2436
  1,
2472
- 4,
2437
+ 3,
2473
2438
  ,
2474
- 5
2439
+ 4
2475
2440
  ]);
2476
- clientInfo = getClientInfo();
2477
2441
  return [
2478
2442
  4,
2479
- getBrowserID(clientInfo)
2443
+ buildPlayerMetricEvent(context, {
2444
+ adLoaded: false,
2445
+ adDetect: false
2446
+ })
2480
2447
  ];
2481
2448
  case 2:
2482
- browserId = _state.sent();
2483
- captureAt = /* @__PURE__ */ new Date().toISOString();
2484
- trackingData = _object_spread({
2485
- browserId: browserId
2486
- }, clientInfo);
2487
- metricsBody = {
2449
+ metricEvent = _state.sent();
2450
+ publishTracking(licenseKey, "metrics", {
2488
2451
  events: [
2489
- {
2490
- player_id: browserId,
2491
- device_type: clientInfo.deviceType,
2492
- input_stream_type: context.inputStreamType,
2493
- os: clientInfo.os,
2494
- ad_loaded: false,
2495
- ad_detect: false,
2496
- license_key: licenseKey,
2497
- capture_at: captureAt
2498
- }
2499
- ],
2500
- trackingData: trackingData
2501
- };
2502
- return [
2503
- 4,
2504
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/metrics"), TRACK_URL, licenseKey, metricsBody)
2505
- ];
2506
- case 3:
2507
- _state.sent();
2452
+ metricEvent
2453
+ ]
2454
+ });
2508
2455
  return [
2509
2456
  3,
2510
- 5
2457
+ 4
2511
2458
  ];
2512
- case 4:
2459
+ case 3:
2513
2460
  error = _state.sent();
2514
2461
  console.error("[StormcloudVideoPlayer] Error sending initial tracking data:", error);
2515
2462
  return [
2516
2463
  3,
2517
- 5
2464
+ 4
2518
2465
  ];
2519
- case 5:
2466
+ case 4:
2520
2467
  return [
2521
2468
  2
2522
2469
  ];
@@ -2614,61 +2561,54 @@ function sendAdLoadedTracking(_0, _1) {
2614
2561
  }
2615
2562
  function sendAdImpressionTracking(_0, _1) {
2616
2563
  return _async_to_generator(function(licenseKey, adImpressionInfo) {
2617
- var context, metricEvent, heartbeatBody, impressionsBody, error;
2564
+ var context, metricEvent, error;
2618
2565
  var _arguments = arguments;
2619
2566
  return _ts_generator(this, function(_state) {
2620
2567
  switch(_state.label){
2621
2568
  case 0:
2622
2569
  context = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2570
+ if (!canPublish(licenseKey)) return [
2571
+ 2
2572
+ ];
2623
2573
  _state.label = 1;
2624
2574
  case 1:
2625
2575
  _state.trys.push([
2626
2576
  1,
2627
- 4,
2577
+ 3,
2628
2578
  ,
2629
- 5
2579
+ 4
2630
2580
  ]);
2631
2581
  return [
2632
2582
  4,
2633
- buildPlayerMetricEvent(licenseKey, context, {
2583
+ buildPlayerMetricEvent(context, {
2634
2584
  captureAt: adImpressionInfo.timestamp
2635
2585
  })
2636
2586
  ];
2637
2587
  case 2:
2638
2588
  metricEvent = _state.sent();
2639
- heartbeatBody = metricEvent;
2640
- impressionsBody = {
2589
+ publishTracking(licenseKey, "heartbeat", metricEvent);
2590
+ publishTracking(licenseKey, "impressions", {
2641
2591
  events: [
2642
2592
  {
2643
2593
  player_id: metricEvent.player_id,
2644
2594
  ad_played_count: 1,
2645
2595
  ad_url: adImpressionInfo.adUrl,
2646
- license_key: licenseKey,
2647
2596
  capture_at: adImpressionInfo.timestamp
2648
2597
  }
2649
2598
  ]
2650
- };
2651
- return [
2652
- 4,
2653
- Promise.all([
2654
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/heartbeat"), HEARTBEAT_URL, licenseKey, heartbeatBody),
2655
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/impressions"), IMPRESSIONS_URL, licenseKey, impressionsBody)
2656
- ])
2657
- ];
2658
- case 3:
2659
- _state.sent();
2599
+ });
2660
2600
  return [
2661
2601
  3,
2662
- 5
2602
+ 4
2663
2603
  ];
2664
- case 4:
2604
+ case 3:
2665
2605
  error = _state.sent();
2666
2606
  console.error("[StormcloudVideoPlayer] Error sending ad impression tracking:", error);
2667
2607
  return [
2668
2608
  3,
2669
- 5
2609
+ 4
2670
2610
  ];
2671
- case 5:
2611
+ case 4:
2672
2612
  return [
2673
2613
  2
2674
2614
  ];
@@ -2684,38 +2624,36 @@ function sendHeartbeat(_0) {
2684
2624
  switch(_state.label){
2685
2625
  case 0:
2686
2626
  context = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, flags = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {};
2627
+ if (!canPublish(licenseKey)) return [
2628
+ 2
2629
+ ];
2687
2630
  _state.label = 1;
2688
2631
  case 1:
2689
2632
  _state.trys.push([
2690
2633
  1,
2691
- 4,
2634
+ 3,
2692
2635
  ,
2693
- 5
2636
+ 4
2694
2637
  ]);
2695
2638
  return [
2696
2639
  4,
2697
- buildPlayerMetricEvent(licenseKey, context, flags)
2640
+ buildPlayerMetricEvent(context, flags)
2698
2641
  ];
2699
2642
  case 2:
2700
2643
  heartbeatData = _state.sent();
2701
- return [
2702
- 4,
2703
- publishOrPost("".concat(mqttTopicPrefix, "/tracking/heartbeat"), HEARTBEAT_URL, licenseKey, heartbeatData)
2704
- ];
2705
- case 3:
2706
- _state.sent();
2644
+ publishTracking(licenseKey, "heartbeat", heartbeatData);
2707
2645
  return [
2708
2646
  3,
2709
- 5
2647
+ 4
2710
2648
  ];
2711
- case 4:
2649
+ case 3:
2712
2650
  error = _state.sent();
2713
2651
  console.error("[StormcloudVideoPlayer] Error sending heartbeat:", error);
2714
2652
  return [
2715
2653
  3,
2716
- 5
2654
+ 4
2717
2655
  ];
2718
- case 5:
2656
+ case 4:
2719
2657
  return [
2720
2658
  2
2721
2659
  ];
@@ -4629,10 +4567,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
4629
4567
  key: "initializeTracking",
4630
4568
  value: function initializeTracking() {
4631
4569
  var _this = this;
4632
- if (this.config.mqttBrokerUrl) {
4633
- var topicPrefix = "adstorm";
4634
- setMQTTTopicPrefix(topicPrefix);
4635
- initMQTTClient(this.config.mqttBrokerUrl, topicPrefix);
4570
+ if (isMQTTEnabled()) {
4571
+ initMQTTClient();
4636
4572
  }
4637
4573
  sendInitialTracking(this.config.licenseKey, this.getAnalyticsContext()).then(function() {
4638
4574
  _this.heartbeatInterval = window.setInterval(function() {
@@ -6313,7 +6249,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
6313
6249
  clearInterval(this.heartbeatInterval);
6314
6250
  this.heartbeatInterval = void 0;
6315
6251
  }
6316
- if (this.config.mqttBrokerUrl) {
6252
+ if (isMQTTEnabled()) {
6317
6253
  disconnectMQTT();
6318
6254
  }
6319
6255
  (_this_hls = this.hls) === null || _this_hls === void 0 ? void 0 : _this_hls.destroy();