@brndts/brndts-ads 1.14.1 → 1.14.3

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
@@ -49920,18 +49920,18 @@ var browserPerformanceTimeOrigin = function() {
49920
49920
  // node_modules/@sentry/core/build/esm/utils-hoist/misc.js
49921
49921
  function uuid4() {
49922
49922
  var gbl = GLOBAL_OBJ;
49923
- var crypto = gbl.crypto || gbl.msCrypto;
49923
+ var crypto2 = gbl.crypto || gbl.msCrypto;
49924
49924
  var getRandomByte = function() {
49925
49925
  return Math.random() * 16;
49926
49926
  };
49927
49927
  try {
49928
- if (crypto && crypto.randomUUID) {
49929
- return crypto.randomUUID().replace(/-/g, "");
49928
+ if (crypto2 && crypto2.randomUUID) {
49929
+ return crypto2.randomUUID().replace(/-/g, "");
49930
49930
  }
49931
- if (crypto && crypto.getRandomValues) {
49931
+ if (crypto2 && crypto2.getRandomValues) {
49932
49932
  getRandomByte = function() {
49933
49933
  var typedArray = new Uint8Array(1);
49934
- crypto.getRandomValues(typedArray);
49934
+ crypto2.getRandomValues(typedArray);
49935
49935
  return typedArray[0];
49936
49936
  };
49937
49937
  }
@@ -75398,7 +75398,9 @@ var DailymotionMediaElement = /*#__PURE__*/ function(GenericMediaElement) {
75398
75398
  this.context.elements.original = target;
75399
75399
  var _ref = _sliced_to_array(target.src.match(URLMatch) || [], 2), _ = _ref[0], videoId = _ref[1];
75400
75400
  var container = document.createElement("div");
75401
+ this.rootNode = target;
75401
75402
  container.id = "BRNDTS";
75403
+ container.dataset.__brndts_k = target.dataset.__brndts_k;
75402
75404
  elements_default.wrap(target, container);
75403
75405
  window.dailymotion.createPlayer(target.id, {
75404
75406
  video: videoId
@@ -76484,6 +76486,48 @@ var MediaElementFactory = /*#__PURE__*/ function() {
76484
76486
  return null;
76485
76487
  }
76486
76488
  },
76489
+ {
76490
+ key: "isElement",
76491
+ value: function isElement(element) {
76492
+ switch(element.tagName){
76493
+ case "DIV":
76494
+ var hasSrc = _MediaElementFactory.getElementAttribute(element, "src");
76495
+ if (hasSrc) {
76496
+ var _hasSrc = _sliced_to_array(hasSrc, 2), el = _hasSrc[0], value2 = _hasSrc[1];
76497
+ var provider2 = getProviderByUrl(value2);
76498
+ if (provider2) {
76499
+ return el;
76500
+ }
76501
+ }
76502
+ var hasBradMaxPID = _MediaElementFactory.getElementAttribute(element, "data-bradmax-player-pid");
76503
+ if (hasBradMaxPID) {
76504
+ var _hasBradMaxPID = _sliced_to_array(hasBradMaxPID, 2), el1 = _hasBradMaxPID[0], value21 = _hasBradMaxPID[1];
76505
+ return el1;
76506
+ }
76507
+ var isVideoJS = element.querySelector("video-js");
76508
+ if (isVideoJS) {
76509
+ return isVideoJS;
76510
+ }
76511
+ return null;
76512
+ case "IFRAME":
76513
+ var url2 = element.getAttribute("src");
76514
+ if (!url2) {
76515
+ return null;
76516
+ }
76517
+ var provider = getProviderByUrl(url2);
76518
+ if (!provider || provider !== "YOUTUBE" && provider !== "DAILYMOTION") {
76519
+ return null;
76520
+ }
76521
+ case "VIDEO-JS":
76522
+ return element;
76523
+ case "AUDIO":
76524
+ case "VIDEO":
76525
+ return element;
76526
+ default:
76527
+ return null;
76528
+ }
76529
+ }
76530
+ },
76487
76531
  {
76488
76532
  key: "getElements",
76489
76533
  value: function getElements(targets) {
@@ -84032,12 +84076,15 @@ var VideoAd = /*#__PURE__*/ function() {
84032
84076
  logger: context.logger,
84033
84077
  service: context.service
84034
84078
  };
84079
+ videoAdContext.elements.original = target.cloneNode(true);
84035
84080
  var media = MediaElementFactory.get(videoAdContext, target);
84036
84081
  if (!media) {
84037
84082
  throw new Error("No media element found!");
84038
84083
  }
84084
+ if (media.view) {
84085
+ media.view.brndts_VE = this;
84086
+ }
84039
84087
  videoAdContext.media = media;
84040
- videoAdContext.elements.original = target.cloneNode(true);
84041
84088
  this.recorderFactory = new RecorderFactory(this.context);
84042
84089
  this.videoAdContext = videoAdContext;
84043
84090
  this.presentationFactory = new PresentationModeFactory(this.videoAdContext);
@@ -84250,37 +84297,118 @@ var VideoAd = /*#__PURE__*/ function() {
84250
84297
  return VideoAd;
84251
84298
  }();
84252
84299
  // src/Ads/VideoAds/VideoAds.ts
84300
+ function makeKey() {
84301
+ var _crypto;
84302
+ if ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.getRandomValues) {
84303
+ var a = new Uint32Array(2);
84304
+ crypto.getRandomValues(a);
84305
+ return a[0].toString(36) + a[1].toString(36);
84306
+ }
84307
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
84308
+ }
84309
+ function ensureKey(el) {
84310
+ if (!el.dataset.__brndts_k) {
84311
+ var key;
84312
+ if (el.closest("[data-__brndts_k]")) {
84313
+ var _el_closest;
84314
+ key = (_el_closest = el.closest("[data-__brndts_k]")) === null || _el_closest === void 0 ? void 0 : _el_closest.dataset.__brndts_k;
84315
+ }
84316
+ el.dataset.__brndts_k = key || makeKey();
84317
+ }
84318
+ return el.dataset.__brndts_k;
84319
+ }
84253
84320
  var VideoAds = /*#__PURE__*/ function() {
84254
84321
  function VideoAds(context) {
84255
84322
  _class_call_check(this, VideoAds);
84256
- this.videoAdElements = [];
84323
+ this.byEl = /* @__PURE__ */ new WeakMap();
84324
+ // Element -> VideoAd
84325
+ this.byKey = /* @__PURE__ */ new Map();
84326
+ // key -> { inst: VideoAd, el: Element }
84327
+ this.pendingCleanup = /* @__PURE__ */ new Map();
84257
84328
  this.handlePageMutation = this.handlePageMutation.bind(this);
84329
+ this.attachOrTransfer = this.attachOrTransfer.bind(this);
84330
+ this.scheduleCleanupIfGone = this.scheduleCleanupIfGone.bind(this);
84331
+ this.scanAndAttach = functions_default.debounce(this.scanAndAttach.bind(this), 50);
84258
84332
  this.context = context;
84259
84333
  }
84260
84334
  _create_class(VideoAds, [
84261
84335
  {
84262
- key: "handleMedias",
84263
- value: function handleMedias() {
84264
- try {
84265
- var elements2 = [];
84266
- for(var index = 0; index < this.videoAdElements.length; index++){
84267
- var element = this.videoAdElements[index];
84268
- if (element.isBroken()) {
84269
- element.destroy();
84270
- } else {
84271
- elements2.push(element);
84336
+ key: "attachOrTransfer",
84337
+ value: function attachOrTransfer(el) {
84338
+ if (!_instanceof(el, Element)) {
84339
+ return;
84340
+ }
84341
+ ;
84342
+ var key = ensureKey(el);
84343
+ var known = this.byKey.get(key);
84344
+ if (known) {
84345
+ if (known.el !== el) {
84346
+ var tid = this.pendingCleanup.get(key);
84347
+ if (tid) {
84348
+ clearTimeout(tid);
84349
+ this.pendingCleanup.delete(key);
84272
84350
  }
84351
+ var inst2 = known.inst;
84352
+ this.byEl.delete(known.el);
84353
+ this.byEl.set(el, inst2);
84354
+ known.el = el;
84355
+ this.byKey.set(key, known);
84273
84356
  }
84274
- this.videoAdElements = elements2;
84275
- var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84276
- for(var index1 = 0; index1 < medias.length; index1++){
84277
- if (!medias[index1] || medias[index1].closest("#BRNDTS_R") || medias[index1].querySelector("#BRNDTS_R")) {
84278
- continue;
84279
- }
84280
- var videoAd = new VideoAd(this.context, medias[index1]);
84281
- this.videoAdElements.push(videoAd);
84282
- videoAd.start();
84357
+ return;
84358
+ }
84359
+ var inst = new VideoAd(this.context, el);
84360
+ this.byEl.set(el, inst);
84361
+ this.byKey.set(key, {
84362
+ inst: inst,
84363
+ el: el
84364
+ });
84365
+ inst.start();
84366
+ }
84367
+ },
84368
+ {
84369
+ // --- cleanup when nodes are actually gone (with a grace period) ---
84370
+ key: "scheduleCleanupIfGone",
84371
+ value: function scheduleCleanupIfGone(el) {
84372
+ var _this = this;
84373
+ var delayMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 800;
84374
+ var _el_dataset;
84375
+ var key = (_el_dataset = el.dataset) === null || _el_dataset === void 0 ? void 0 : _el_dataset.__brndts_k;
84376
+ if (!key) {
84377
+ return;
84378
+ }
84379
+ if (!this.byKey.has(key) || this.pendingCleanup.has(key)) {
84380
+ return;
84381
+ }
84382
+ var tid = setTimeout(function() {
84383
+ var entry = _this.byKey.get(key);
84384
+ if (entry && !entry.el.isConnected) {
84385
+ var _entry_inst_destroy, _entry_inst;
84386
+ (_entry_inst_destroy = (_entry_inst = entry.inst).destroy) === null || _entry_inst_destroy === void 0 ? void 0 : _entry_inst_destroy.call(_entry_inst);
84387
+ _this.byEl.delete(entry.el);
84388
+ _this.byKey.delete(key);
84283
84389
  }
84390
+ _this.pendingCleanup.delete(key);
84391
+ }, delayMs);
84392
+ this.pendingCleanup.set(key, tid);
84393
+ }
84394
+ },
84395
+ {
84396
+ // --- DOM wiring: scan + observer ---
84397
+ key: "scanAndAttach",
84398
+ value: function scanAndAttach() {
84399
+ var _this = this;
84400
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84401
+ medias.forEach(function(el) {
84402
+ return _this.attachOrTransfer(el);
84403
+ });
84404
+ }
84405
+ },
84406
+ {
84407
+ // small debounce
84408
+ key: "handleMedias",
84409
+ value: function handleMedias() {
84410
+ try {
84411
+ this.scanAndAttach();
84284
84412
  } catch (error) {
84285
84413
  if (_instanceof(error, Error)) {
84286
84414
  ErrorHandler.handle(error);
@@ -84291,25 +84419,41 @@ var VideoAds = /*#__PURE__*/ function() {
84291
84419
  {
84292
84420
  key: "start",
84293
84421
  value: function start() {
84422
+ var _this = this;
84294
84423
  if (!this.context.supports.api) {
84295
84424
  this.context.logger.error("Setup failed: no support");
84296
84425
  return;
84297
84426
  }
84298
- this.handleMedias();
84427
+ var medias = MediaElementFactory.getElements(this.context.selectors.targets);
84428
+ medias.forEach(function(el) {
84429
+ return _this.attachOrTransfer(el);
84430
+ });
84299
84431
  }
84300
84432
  },
84301
84433
  {
84302
84434
  key: "handlePageMutation",
84303
- value: function handlePageMutation() {}
84304
- },
84305
- {
84306
- key: "updateSize",
84307
- value: function updateSize() {
84435
+ value: function handlePageMutation(mutations) {
84308
84436
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
84309
84437
  try {
84310
- for(var _iterator = this.videoAdElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84311
- var videoAd = _step.value;
84312
- videoAd.updateSize();
84438
+ for(var _iterator = mutations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84439
+ var rec = _step.value;
84440
+ rec.removedNodes.forEach(function(n) {
84441
+ if (n.nodeType === 1) {
84442
+ var stack = [
84443
+ n
84444
+ ];
84445
+ while(stack.length){
84446
+ var _node_dataset;
84447
+ var node = stack.pop();
84448
+ if ((_node_dataset = node.dataset) === null || _node_dataset === void 0 ? void 0 : _node_dataset.__brndts_k) {}
84449
+ ;
84450
+ for(var c = node.firstElementChild; c; c = c.nextElementSibling){
84451
+ stack.push(c);
84452
+ }
84453
+ ;
84454
+ }
84455
+ }
84456
+ });
84313
84457
  }
84314
84458
  } catch (err) {
84315
84459
  _didIteratorError = true;
@@ -84325,25 +84469,64 @@ var VideoAds = /*#__PURE__*/ function() {
84325
84469
  }
84326
84470
  }
84327
84471
  }
84472
+ this.scanAndAttach();
84473
+ }
84474
+ },
84475
+ {
84476
+ key: "updateSize",
84477
+ value: function updateSize() {
84478
+ var _this = this;
84479
+ this.byKey.forEach(function(value2, key) {
84480
+ var tid = _this.pendingCleanup.get(key);
84481
+ if (!tid) {
84482
+ var _value2_inst_updateSize, _value2_inst;
84483
+ (_value2_inst_updateSize = (_value2_inst = value2.inst).updateSize) === null || _value2_inst_updateSize === void 0 ? void 0 : _value2_inst_updateSize.call(_value2_inst);
84484
+ }
84485
+ });
84328
84486
  }
84329
84487
  },
84330
84488
  {
84331
84489
  key: "getVideoAd",
84332
84490
  value: function getVideoAd(index) {
84491
+ if (this.byKey.size === 0) {
84492
+ return void 0;
84493
+ }
84333
84494
  if (index === void 0) {
84334
- return this.videoAdElements[0];
84495
+ return this.byKey.values().next().value.inst;
84335
84496
  }
84336
- return this.videoAdElements[index];
84497
+ if (index < 0 || index >= this.byKey.size) {
84498
+ return void 0;
84499
+ }
84500
+ var keys = Array.from(this.byKey.keys());
84501
+ var key = keys[index];
84502
+ if (!key) {
84503
+ return void 0;
84504
+ }
84505
+ var entry = this.byKey.get(key);
84506
+ if (!entry) {
84507
+ return void 0;
84508
+ }
84509
+ return entry.inst;
84337
84510
  }
84338
84511
  },
84339
84512
  {
84340
84513
  key: "destroy",
84341
84514
  value: function destroy() {
84515
+ var _this = this;
84342
84516
  this.context.logger.log("destroying video ads");
84343
- this.videoAdElements.forEach(function(videoAd) {
84344
- videoAd.destroy();
84517
+ this.byKey.forEach(function(value2, key) {
84518
+ var _value2_inst_destroy, _value2_inst;
84519
+ var tid = _this.pendingCleanup.get(key);
84520
+ if (tid) {
84521
+ clearTimeout(tid);
84522
+ _this.pendingCleanup.delete(key);
84523
+ }
84524
+ (_value2_inst_destroy = (_value2_inst = value2.inst).destroy) === null || _value2_inst_destroy === void 0 ? void 0 : _value2_inst_destroy.call(_value2_inst);
84525
+ _this.byEl.delete(value2.el);
84526
+ _this.byKey.delete(key);
84345
84527
  });
84346
- this.videoAdElements = [];
84528
+ this.pendingCleanup.clear();
84529
+ this.byEl = /* @__PURE__ */ new WeakMap();
84347
84530
  this.context.logger.log("destroyed video ads");
84348
84531
  }
84349
84532
  }
@@ -84363,8 +84546,8 @@ var Ads = /*#__PURE__*/ function() {
84363
84546
  _create_class(Ads, [
84364
84547
  {
84365
84548
  key: "handlePageMutation",
84366
- value: function handlePageMutation() {
84367
- this.videoAds.handlePageMutation();
84549
+ value: function handlePageMutation(mutations) {
84550
+ this.videoAds.handlePageMutation(mutations);
84368
84551
  this.staticAds.handlePageMutation();
84369
84552
  }
84370
84553
  },