stormcloud-video-player 0.7.2 → 0.7.4

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,627 +0,0 @@
1
- "use strict";
2
- function _array_like_to_array(arr, len) {
3
- if (len == null || len > arr.length) len = arr.length;
4
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
- return arr2;
6
- }
7
- function _array_without_holes(arr) {
8
- if (Array.isArray(arr)) return _array_like_to_array(arr);
9
- }
10
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
11
- try {
12
- var info = gen[key](arg);
13
- var value = info.value;
14
- } catch (error) {
15
- reject(error);
16
- return;
17
- }
18
- if (info.done) {
19
- resolve(value);
20
- } else {
21
- Promise.resolve(value).then(_next, _throw);
22
- }
23
- }
24
- function _async_to_generator(fn) {
25
- return function() {
26
- var self = this, args = arguments;
27
- return new Promise(function(resolve, reject) {
28
- var gen = fn.apply(self, args);
29
- function _next(value) {
30
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
31
- }
32
- function _throw(err) {
33
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
34
- }
35
- _next(undefined);
36
- });
37
- };
38
- }
39
- function _instanceof(left, right) {
40
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
41
- return !!right[Symbol.hasInstance](left);
42
- } else {
43
- return left instanceof right;
44
- }
45
- }
46
- function _iterable_to_array(iter) {
47
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
48
- }
49
- function _non_iterable_spread() {
50
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
51
- }
52
- function _to_consumable_array(arr) {
53
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
54
- }
55
- function _type_of(obj) {
56
- "@swc/helpers - typeof";
57
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
58
- }
59
- function _unsupported_iterable_to_array(o, minLen) {
60
- if (!o) return;
61
- if (typeof o === "string") return _array_like_to_array(o, minLen);
62
- var n = Object.prototype.toString.call(o).slice(8, -1);
63
- if (n === "Object" && o.constructor) n = o.constructor.name;
64
- if (n === "Map" || n === "Set") return Array.from(n);
65
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
66
- }
67
- function _ts_generator(thisArg, body) {
68
- var f, y, t, _ = {
69
- label: 0,
70
- sent: function() {
71
- if (t[0] & 1) throw t[1];
72
- return t[1];
73
- },
74
- trys: [],
75
- ops: []
76
- }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
77
- return d(g, "next", {
78
- value: verb(0)
79
- }), d(g, "throw", {
80
- value: verb(1)
81
- }), d(g, "return", {
82
- value: verb(2)
83
- }), typeof Symbol === "function" && d(g, Symbol.iterator, {
84
- value: function() {
85
- return this;
86
- }
87
- }), g;
88
- function verb(n) {
89
- return function(v) {
90
- return step([
91
- n,
92
- v
93
- ]);
94
- };
95
- }
96
- function step(op) {
97
- if (f) throw new TypeError("Generator is already executing.");
98
- while(g && (g = 0, op[0] && (_ = 0)), _)try {
99
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
100
- if (y = 0, t) op = [
101
- op[0] & 2,
102
- t.value
103
- ];
104
- switch(op[0]){
105
- case 0:
106
- case 1:
107
- t = op;
108
- break;
109
- case 4:
110
- _.label++;
111
- return {
112
- value: op[1],
113
- done: false
114
- };
115
- case 5:
116
- _.label++;
117
- y = op[1];
118
- op = [
119
- 0
120
- ];
121
- continue;
122
- case 7:
123
- op = _.ops.pop();
124
- _.trys.pop();
125
- continue;
126
- default:
127
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
128
- _ = 0;
129
- continue;
130
- }
131
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
132
- _.label = op[1];
133
- break;
134
- }
135
- if (op[0] === 6 && _.label < t[1]) {
136
- _.label = t[1];
137
- t = op;
138
- break;
139
- }
140
- if (t && _.label < t[2]) {
141
- _.label = t[2];
142
- _.ops.push(op);
143
- break;
144
- }
145
- if (t[2]) _.ops.pop();
146
- _.trys.pop();
147
- continue;
148
- }
149
- op = body.call(thisArg, _);
150
- } catch (e) {
151
- op = [
152
- 6,
153
- e
154
- ];
155
- y = 0;
156
- } finally{
157
- f = t = 0;
158
- }
159
- if (op[0] & 5) throw op[1];
160
- return {
161
- value: op[0] ? op[1] : void 0,
162
- done: true
163
- };
164
- }
165
- }
166
- function _ts_values(o) {
167
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
168
- if (m) return m.call(o);
169
- if (o && typeof o.length === "number") return {
170
- next: function() {
171
- if (o && i >= o.length) o = void 0;
172
- return {
173
- value: o && o[i++],
174
- done: !o
175
- };
176
- }
177
- };
178
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
179
- }
180
- var __defProp = Object.defineProperty;
181
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
182
- var __getOwnPropNames = Object.getOwnPropertyNames;
183
- var __hasOwnProp = Object.prototype.hasOwnProperty;
184
- var __export = function __export(target, all) {
185
- for(var name in all)__defProp(target, name, {
186
- get: all[name],
187
- enumerable: true
188
- });
189
- };
190
- var __copyProps = function __copyProps(to, from, except, desc) {
191
- if (from && (typeof from === "undefined" ? "undefined" : _type_of(from)) === "object" || typeof from === "function") {
192
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
193
- try {
194
- var _loop = function() {
195
- var key = _step.value;
196
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
197
- get: function get() {
198
- return from[key];
199
- },
200
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
201
- });
202
- };
203
- for(var _iterator = __getOwnPropNames(from)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
204
- } catch (err) {
205
- _didIteratorError = true;
206
- _iteratorError = err;
207
- } finally{
208
- try {
209
- if (!_iteratorNormalCompletion && _iterator.return != null) {
210
- _iterator.return();
211
- }
212
- } finally{
213
- if (_didIteratorError) {
214
- throw _iteratorError;
215
- }
216
- }
217
- }
218
- }
219
- return to;
220
- };
221
- var __toCommonJS = function __toCommonJS(mod) {
222
- return __copyProps(__defProp({}, "__esModule", {
223
- value: true
224
- }), mod);
225
- };
226
- // src/sdk/vastManager.ts
227
- var vastManager_exports = {};
228
- __export(vastManager_exports, {
229
- createVastManager: function createVastManager1() {
230
- return createVastManager;
231
- }
232
- });
233
- module.exports = __toCommonJS(vastManager_exports);
234
- // src/sdk/vastParser.ts
235
- function isHlsType(type) {
236
- return type === "application/x-mpegURL" || type.includes("m3u8");
237
- }
238
- function isMp4Type(type) {
239
- return type === "video/mp4" || type.includes("mp4");
240
- }
241
- function parseVastXml(xmlString) {
242
- var filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "all", logPrefix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "[VastParser]";
243
- try {
244
- var _xmlDoc_querySelector, _xmlDoc_querySelector1, _xmlDoc_querySelector_textContent, _xmlDoc_querySelector2;
245
- var parser = new DOMParser();
246
- var xmlDoc = parser.parseFromString(xmlString, "text/xml");
247
- var parserError = xmlDoc.querySelector("parsererror");
248
- if (parserError) {
249
- console.error("".concat(logPrefix, " XML parsing error (malformed VAST XML):"), parserError.textContent);
250
- return null;
251
- }
252
- var adElement = xmlDoc.querySelector("Ad");
253
- if (!adElement) {
254
- console.warn("".concat(logPrefix, " No Ad element found in VAST XML"));
255
- return null;
256
- }
257
- var adId = adElement.getAttribute("id") || "unknown";
258
- var title = ((_xmlDoc_querySelector = xmlDoc.querySelector("AdTitle")) === null || _xmlDoc_querySelector === void 0 ? void 0 : _xmlDoc_querySelector.textContent) || "Ad";
259
- var isNoAdAvailable = adId === "empty" || title.toLowerCase().includes("no ad available") || title.toLowerCase() === "no ad available";
260
- var durationText = ((_xmlDoc_querySelector1 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector1 === void 0 ? void 0 : _xmlDoc_querySelector1.textContent) || "00:00:30";
261
- var durationParts = durationText.split(":");
262
- var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + Math.round(parseFloat(durationParts[2] || "0"));
263
- var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
264
- var mediaFiles = [];
265
- console.log("".concat(logPrefix, " Found ").concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
266
- mediaFileElements.forEach(function(mf, index) {
267
- var _mf_textContent;
268
- var type = mf.getAttribute("type") || "";
269
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
270
- var width = mf.getAttribute("width") || "";
271
- var height = mf.getAttribute("height") || "";
272
- console.log("".concat(logPrefix, " MediaFile ").concat(index, ': type="').concat(type, '", url="').concat(url.substring(0, 80), '...", width="').concat(width, '", height="').concat(height, '"'));
273
- if (!url) {
274
- console.warn("".concat(logPrefix, " MediaFile ").concat(index, " has empty URL"));
275
- return;
276
- }
277
- var isHls = isHlsType(type);
278
- var isMp4 = isMp4Type(type);
279
- var accepted = false;
280
- if (filter === "hls-only") {
281
- accepted = isHls;
282
- } else if (filter === "mp4-first") {
283
- accepted = isMp4 || isHls;
284
- } else {
285
- accepted = true;
286
- }
287
- if (!accepted) {
288
- console.log("".concat(logPrefix, " MediaFile ").concat(index, ' ignored (type="').concat(type, '" not accepted by filter "').concat(filter, '")'));
289
- return;
290
- }
291
- var bitrateAttr = mf.getAttribute("bitrate");
292
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
293
- mediaFiles.push({
294
- url: url,
295
- type: type,
296
- width: parseInt(width || "1920", 10),
297
- height: parseInt(height || "1080", 10),
298
- bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
299
- });
300
- console.log("".concat(logPrefix, ' Added MediaFile: type="').concat(type, '" url="').concat(url.substring(0, 80), '..."'));
301
- });
302
- if (filter === "mp4-first" && mediaFiles.length > 1) {
303
- mediaFiles.sort(function(a, b) {
304
- var aIsMp4 = isMp4Type(a.type) ? 0 : 1;
305
- var bIsMp4 = isMp4Type(b.type) ? 0 : 1;
306
- return aIsMp4 - bIsMp4;
307
- });
308
- }
309
- if (mediaFiles.length === 0) {
310
- if (isNoAdAvailable) {
311
- console.warn("".concat(logPrefix, " No ads available (VAST response indicates no ads)"));
312
- } else {
313
- console.warn("".concat(logPrefix, " No compatible media files found in VAST XML"));
314
- }
315
- return null;
316
- }
317
- var trackingUrls = {
318
- impression: [],
319
- start: [],
320
- firstQuartile: [],
321
- midpoint: [],
322
- thirdQuartile: [],
323
- complete: [],
324
- mute: [],
325
- unmute: [],
326
- pause: [],
327
- resume: [],
328
- fullscreen: [],
329
- exitFullscreen: [],
330
- skip: [],
331
- error: []
332
- };
333
- xmlDoc.querySelectorAll("Impression").forEach(function(el) {
334
- var _el_textContent;
335
- var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
336
- if (url) trackingUrls.impression.push(url);
337
- });
338
- xmlDoc.querySelectorAll("Tracking").forEach(function(el) {
339
- var _el_textContent;
340
- var event = el.getAttribute("event");
341
- var url = (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
342
- if (event && url) {
343
- var eventKey = event;
344
- if (trackingUrls[eventKey]) {
345
- trackingUrls[eventKey].push(url);
346
- }
347
- }
348
- });
349
- var clickThrough = (_xmlDoc_querySelector2 = xmlDoc.querySelector("ClickThrough")) === null || _xmlDoc_querySelector2 === void 0 ? void 0 : (_xmlDoc_querySelector_textContent = _xmlDoc_querySelector2.textContent) === null || _xmlDoc_querySelector_textContent === void 0 ? void 0 : _xmlDoc_querySelector_textContent.trim();
350
- return {
351
- id: adId,
352
- title: title,
353
- duration: duration,
354
- mediaFiles: mediaFiles,
355
- trackingUrls: trackingUrls,
356
- clickThrough: clickThrough
357
- };
358
- } catch (error) {
359
- console.error("".concat(logPrefix, " Error parsing VAST XML:"), error);
360
- return null;
361
- }
362
- }
363
- // src/sdk/vastManager.ts
364
- var VAST_TAG_URL = "https://pubads.g.doubleclick.net/gampad/ads?iu=/21821455290/Airy-Android&description_url=http%3A%2F%2Fairy.tv&tfcd=0&npa=0&sz=1x1%7C300x250%7C400x300%7C640x480&gdfp_req=1&unviewed_position_start=1&correlator=[placeholder]&vpos=preroll&output=vast&env=vp&vpmute=0&vpa=click";
365
- var DEFAULT_TIMEOUT_MS = 5e3;
366
- var MAX_RETRIES = 3;
367
- var RETRY_BACKOFF_MS = 1500;
368
- function createVastManager() {
369
- var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
370
- var _options_debug;
371
- var initialized = false;
372
- var debug = (_options_debug = options.debug) !== null && _options_debug !== void 0 ? _options_debug : false;
373
- function log() {
374
- for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
375
- args[_key] = arguments[_key];
376
- }
377
- if (debug) {
378
- var _console;
379
- (_console = console).log.apply(_console, [
380
- "[VastManager]"
381
- ].concat(_to_consumable_array(args)));
382
- }
383
- }
384
- function warn() {
385
- for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
386
- args[_key] = arguments[_key];
387
- }
388
- var _console;
389
- (_console = console).warn.apply(_console, [
390
- "[VastManager]"
391
- ].concat(_to_consumable_array(args)));
392
- }
393
- function initialize() {
394
- return _async_to_generator(function() {
395
- return _ts_generator(this, function(_state) {
396
- if (initialized) return [
397
- 2
398
- ];
399
- initialized = true;
400
- log("Initialized, VAST tag URL:", VAST_TAG_URL.split("?")[0]);
401
- return [
402
- 2
403
- ];
404
- });
405
- })();
406
- }
407
- function requestBids(_context) {
408
- return _async_to_generator(function() {
409
- var correlator, url, controller, timeoutId, _ref, _ref1, _vastAd_mediaFiles_, _vastAd_mediaFiles_1, fetchOptions, response, vastXml, vastAd, bid, error;
410
- return _ts_generator(this, function(_state) {
411
- switch(_state.label){
412
- case 0:
413
- if (!initialized) {
414
- throw new Error("VastManager not initialized. Call initialize() first.");
415
- }
416
- correlator = Math.floor(Math.random() * 1e12).toString();
417
- url = VAST_TAG_URL.replace("[placeholder]", correlator);
418
- log("Fetching VAST tag, correlator:", correlator);
419
- controller = typeof AbortController !== "undefined" ? new AbortController() : null;
420
- timeoutId = setTimeout(function() {
421
- return controller === null || controller === void 0 ? void 0 : controller.abort();
422
- }, DEFAULT_TIMEOUT_MS);
423
- _state.label = 1;
424
- case 1:
425
- _state.trys.push([
426
- 1,
427
- 4,
428
- ,
429
- 5
430
- ]);
431
- fetchOptions = {
432
- method: "GET",
433
- mode: "cors",
434
- credentials: "omit",
435
- headers: {
436
- Accept: "application/xml, text/xml, */*"
437
- },
438
- referrerPolicy: "no-referrer-when-downgrade"
439
- };
440
- if (controller) fetchOptions.signal = controller.signal;
441
- return [
442
- 4,
443
- fetch(url, fetchOptions)
444
- ];
445
- case 2:
446
- response = _state.sent();
447
- clearTimeout(timeoutId);
448
- if (!response.ok) {
449
- throw new Error("VAST request returned HTTP ".concat(response.status));
450
- }
451
- return [
452
- 4,
453
- response.text()
454
- ];
455
- case 3:
456
- vastXml = _state.sent();
457
- log("VAST XML received, length:", vastXml.length);
458
- vastAd = parseVastXml(vastXml, "mp4-first", "[VastManager]");
459
- if (!vastAd) {
460
- log("VAST parsed but no usable ad found");
461
- return [
462
- 2,
463
- []
464
- ];
465
- }
466
- log("Ad parsed: id=".concat(vastAd.id, ", duration=").concat(vastAd.duration, "s, mediaFiles=").concat(vastAd.mediaFiles.length));
467
- bid = {
468
- bidder: "vast-direct",
469
- cpm: 0,
470
- vastXml: vastXml,
471
- width: (_ref = (_vastAd_mediaFiles_ = vastAd.mediaFiles[0]) === null || _vastAd_mediaFiles_ === void 0 ? void 0 : _vastAd_mediaFiles_.width) !== null && _ref !== void 0 ? _ref : 0,
472
- height: (_ref1 = (_vastAd_mediaFiles_1 = vastAd.mediaFiles[0]) === null || _vastAd_mediaFiles_1 === void 0 ? void 0 : _vastAd_mediaFiles_1.height) !== null && _ref1 !== void 0 ? _ref1 : 0,
473
- adId: vastAd.id,
474
- impId: correlator,
475
- creativeId: vastAd.id,
476
- currency: "USD",
477
- durationSec: vastAd.duration
478
- };
479
- return [
480
- 2,
481
- [
482
- bid
483
- ]
484
- ];
485
- case 4:
486
- error = _state.sent();
487
- clearTimeout(timeoutId);
488
- if ((error === null || error === void 0 ? void 0 : error.name) === "AbortError") {
489
- warn("VAST request timed out after ".concat(DEFAULT_TIMEOUT_MS, "ms"));
490
- return [
491
- 2,
492
- []
493
- ];
494
- }
495
- throw error;
496
- case 5:
497
- return [
498
- 2
499
- ];
500
- }
501
- });
502
- })();
503
- }
504
- function requestBidsUntilResponse(context) {
505
- return _async_to_generator(function() {
506
- var _loop, lastError, attempt, _ret;
507
- return _ts_generator(this, function(_state) {
508
- switch(_state.label){
509
- case 0:
510
- _loop = function(attempt) {
511
- var bids, err, delay;
512
- return _ts_generator(this, function(_state) {
513
- switch(_state.label){
514
- case 0:
515
- _state.trys.push([
516
- 0,
517
- 2,
518
- ,
519
- 3
520
- ]);
521
- return [
522
- 4,
523
- requestBids(context)
524
- ];
525
- case 1:
526
- bids = _state.sent();
527
- if (bids.length > 0) {
528
- log("requestBidsUntilResponse: got ".concat(bids.length, " ad(s) on attempt ").concat(attempt));
529
- return [
530
- 2,
531
- {
532
- v: bids
533
- }
534
- ];
535
- }
536
- log("requestBidsUntilResponse: no ads on attempt ".concat(attempt, "/").concat(MAX_RETRIES));
537
- return [
538
- 3,
539
- 3
540
- ];
541
- case 2:
542
- err = _state.sent();
543
- lastError = err;
544
- warn("requestBidsUntilResponse: attempt ".concat(attempt, "/").concat(MAX_RETRIES, " failed:"), err);
545
- return [
546
- 3,
547
- 3
548
- ];
549
- case 3:
550
- if (!(attempt < MAX_RETRIES)) return [
551
- 3,
552
- 5
553
- ];
554
- delay = RETRY_BACKOFF_MS * attempt;
555
- log("requestBidsUntilResponse: waiting ".concat(delay, "ms before retry"));
556
- return [
557
- 4,
558
- new Promise(function(resolve) {
559
- return setTimeout(resolve, delay);
560
- })
561
- ];
562
- case 4:
563
- _state.sent();
564
- _state.label = 5;
565
- case 5:
566
- return [
567
- 2
568
- ];
569
- }
570
- });
571
- };
572
- if (!initialized) {
573
- throw new Error("VastManager not initialized. Call initialize() first.");
574
- }
575
- attempt = 1;
576
- _state.label = 1;
577
- case 1:
578
- if (!(attempt <= MAX_RETRIES)) return [
579
- 3,
580
- 4
581
- ];
582
- return [
583
- 5,
584
- _ts_values(_loop(attempt))
585
- ];
586
- case 2:
587
- _ret = _state.sent();
588
- if (_type_of(_ret) === "object") return [
589
- 2,
590
- _ret.v
591
- ];
592
- _state.label = 3;
593
- case 3:
594
- attempt++;
595
- return [
596
- 3,
597
- 1
598
- ];
599
- case 4:
600
- if (_instanceof(lastError, Error)) throw lastError;
601
- return [
602
- 2,
603
- []
604
- ];
605
- }
606
- });
607
- })();
608
- }
609
- function destroy() {
610
- initialized = false;
611
- log("Destroyed");
612
- }
613
- return {
614
- initialize: initialize,
615
- requestBids: requestBids,
616
- requestBidsUntilResponse: requestBidsUntilResponse,
617
- destroy: destroy,
618
- get isInitialized () {
619
- return initialized;
620
- }
621
- };
622
- }
623
- // Annotate the CommonJS export names for ESM import in node:
624
- 0 && (module.exports = {
625
- createVastManager: createVastManager
626
- });
627
- //# sourceMappingURL=vastManager.cjs.map