stormcloud-video-player 0.8.73 → 0.8.75

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 (61) hide show
  1. package/README.md +10 -70
  2. package/dist/stormcloud-vp.min.js +1 -1
  3. package/lib/Player.d.cts +2 -1
  4. package/lib/StormcloudPlayer.cjs +988 -273
  5. package/lib/StormcloudPlayer.cjs.map +1 -1
  6. package/lib/StormcloudPlayer.d.cts +1 -0
  7. package/lib/index.cjs +999 -278
  8. package/lib/index.cjs.map +1 -1
  9. package/lib/index.d.cts +1 -0
  10. package/lib/index.d.ts +40 -3
  11. package/lib/index.js +992 -279
  12. package/lib/index.js.map +1 -1
  13. package/lib/player/AdBreakOrchestrator.cjs +767 -67
  14. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  15. package/lib/player/AdBreakOrchestrator.d.cts +7 -9
  16. package/lib/player/AdConfigManager.cjs +315 -62
  17. package/lib/player/AdConfigManager.cjs.map +1 -1
  18. package/lib/player/AdConfigManager.d.cts +7 -12
  19. package/lib/player/AdTimingService.cjs +37 -1
  20. package/lib/player/AdTimingService.cjs.map +1 -1
  21. package/lib/player/AdTimingService.d.cts +8 -1
  22. package/lib/player/EdgePodRequest.d.cts +1 -0
  23. package/lib/player/FloorLadder.d.cts +1 -0
  24. package/lib/player/HlsEngine.d.cts +1 -0
  25. package/lib/player/OptimizedPodRequest.cjs +719 -0
  26. package/lib/player/OptimizedPodRequest.cjs.map +1 -0
  27. package/lib/player/OptimizedPodRequest.d.cts +101 -0
  28. package/lib/player/PlayerControls.d.cts +1 -0
  29. package/lib/player/Scte35CueManager.d.cts +1 -0
  30. package/lib/player/Scte35Parser.d.cts +1 -0
  31. package/lib/player/StormcloudVideoPlayer.cjs +988 -273
  32. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  33. package/lib/player/StormcloudVideoPlayer.d.cts +1 -0
  34. package/lib/player/playerTypes.d.cts +1 -0
  35. package/lib/players/HlsPlayer.cjs +988 -273
  36. package/lib/players/HlsPlayer.cjs.map +1 -1
  37. package/lib/players/HlsPlayer.d.cts +1 -0
  38. package/lib/players/index.cjs +988 -273
  39. package/lib/players/index.cjs.map +1 -1
  40. package/lib/props.d.cts +1 -0
  41. package/lib/sdk/hlsAdPlayer.cjs +316 -51
  42. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  43. package/lib/sdk/hlsAdPlayer.d.cts +3 -1
  44. package/lib/sdk/pal.cjs +108 -83
  45. package/lib/sdk/pal.cjs.map +1 -1
  46. package/lib/sdk/pal.d.cts +1 -0
  47. package/lib/types.d.cts +9 -2
  48. package/lib/ui/StormcloudVideoPlayer.cjs +991 -278
  49. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  50. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
  51. package/lib/utils/ctvVastSignals.cjs +9 -7
  52. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  53. package/lib/utils/tracking.cjs +17 -3
  54. package/lib/utils/tracking.cjs.map +1 -1
  55. package/lib/utils/tracking.d.cts +2 -1
  56. package/lib/utils/vastEnvironmentSignals.cjs +9 -7
  57. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  58. package/lib/utils/vastMacros.cjs +251 -10
  59. package/lib/utils/vastMacros.cjs.map +1 -1
  60. package/lib/utils/vastMacros.d.cts +13 -4
  61. package/package.json +5 -3
@@ -1,6 +1,8 @@
1
1
  import { AdController } from '../types.cjs';
2
2
  import Hls from 'hls.js';
3
+ import '../player/OptimizedPodRequest.cjs';
3
4
 
5
+ declare function resetGamCredentialsMode(): void;
4
6
  declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
5
7
  continueLiveStreamDuringAds?: boolean;
6
8
  licenseKey?: string;
@@ -8,4 +10,4 @@ declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
8
10
  mediaStartTimeoutMs?: number;
9
11
  }): AdController;
10
12
 
11
- export { createHlsAdPlayer };
13
+ export { createHlsAdPlayer, resetGamCredentialsMode };
package/lib/sdk/pal.cjs CHANGED
@@ -277,95 +277,38 @@ function getOrCreateNonceLoader(allowStorage) {
277
277
  function createPalNonceManager() {
278
278
  var currentNonce = "";
279
279
  var currentNonceManager;
280
+ var pendingNonce;
280
281
  return {
281
282
  generateNonce: function generateNonce() {
282
- return _async_to_generator(function() {
283
- var options, _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
284
- var _arguments = arguments;
285
- return _ts_generator(this, function(_state) {
286
- switch(_state.label){
287
- case 0:
288
- options = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {};
289
- _state.label = 1;
290
- case 1:
291
- _state.trys.push([
292
- 1,
293
- 4,
294
- ,
295
- 5
296
- ]);
297
- return [
298
- 4,
299
- loadPalSdk()
300
- ];
301
- case 2:
302
- _state.sent();
303
- loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
304
- goog = window.goog;
305
- request = new goog.pal.NonceRequest();
306
- request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
307
- request.adWillPlayMuted = (_options_adWillPlayMuted = options.adWillPlayMuted) !== null && _options_adWillPlayMuted !== void 0 ? _options_adWillPlayMuted : false;
308
- request.playerVolume = (_options_playerVolume = options.playerVolume) !== null && _options_playerVolume !== void 0 ? _options_playerVolume : request.adWillPlayMuted ? 0 : 1;
309
- request.continuousPlayback = (_options_continuousPlayback = options.continuousPlayback) !== null && _options_continuousPlayback !== void 0 ? _options_continuousPlayback : true;
310
- request.descriptionUrl = toDevSafeUrl(options.descriptionUrl || (typeof window !== "undefined" ? window.location.href : ""));
311
- request.iconsSupported = true;
312
- request.playerType = "StormcloudVideoPlayer";
313
- request.playerVersion = "1.0";
314
- request.supportedApiFrameworks = "2,7,9";
315
- request.url = toDevSafeUrl(options.descriptionUrl || (typeof window !== "undefined" ? window.location.href : ""));
316
- request.videoWidth = options.videoWidth || 640;
317
- request.videoHeight = options.videoHeight || 480;
318
- if (options.ppid) request.ppid = options.ppid;
319
- if (options.sessionId) request.sessionId = options.sessionId;
320
- console.log("[PAL] NonceRequest before generateNonce:", JSON.stringify({
321
- adWillAutoPlay: request.adWillAutoPlay,
322
- adWillPlayMuted: request.adWillPlayMuted,
323
- playerVolume: request.playerVolume,
324
- continuousPlayback: request.continuousPlayback,
325
- descriptionUrl: request.descriptionUrl,
326
- iconsSupported: request.iconsSupported,
327
- playerType: request.playerType,
328
- playerVersion: request.playerVersion,
329
- supportedApiFrameworks: request.supportedApiFrameworks,
330
- url: request.url,
331
- videoWidth: request.videoWidth,
332
- videoHeight: request.videoHeight,
333
- ppid: request.ppid,
334
- sessionId: request.sessionId
335
- }, null, 2));
336
- return [
337
- 4,
338
- loader.loadNonceManager(request)
339
- ];
340
- case 3:
341
- manager = _state.sent();
342
- currentNonceManager = manager;
343
- currentNonce = manager.getNonce();
344
- console.log("[PAL] Nonce generated successfully");
345
- return [
346
- 2,
347
- currentNonce
348
- ];
349
- case 4:
350
- error = _state.sent();
351
- console.warn("[PAL] Failed to generate nonce:", error);
352
- currentNonce = "";
353
- currentNonceManager = void 0;
354
- return [
355
- 2,
356
- ""
357
- ];
358
- case 5:
359
- return [
360
- 2
361
- ];
362
- }
363
- });
364
- }).apply(this, arguments);
283
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
284
+ var run = generate(options);
285
+ pendingNonce = run;
286
+ var settle = function settle() {
287
+ if (pendingNonce === run) pendingNonce = void 0;
288
+ };
289
+ run.then(settle, settle);
290
+ return run;
365
291
  },
366
292
  getCurrentNonce: function getCurrentNonce() {
367
293
  return currentNonce;
368
294
  },
295
+ waitForNonce: function waitForNonce(maxWaitMs) {
296
+ if (currentNonce) return Promise.resolve(currentNonce);
297
+ var pending = pendingNonce;
298
+ if (!pending || !(maxWaitMs > 0)) return Promise.resolve("");
299
+ return new Promise(function(resolve) {
300
+ var timer = setTimeout(function() {
301
+ return resolve(currentNonce);
302
+ }, maxWaitMs);
303
+ pending.then(function(nonce) {
304
+ clearTimeout(timer);
305
+ resolve(nonce);
306
+ }, function() {
307
+ clearTimeout(timer);
308
+ resolve("");
309
+ });
310
+ });
311
+ },
369
312
  injectNonce: function injectNonce(vastTagUrl) {
370
313
  if (!currentNonce || !vastTagUrl) return vastTagUrl;
371
314
  try {
@@ -402,8 +345,90 @@ function createPalNonceManager() {
402
345
  reset: function reset() {
403
346
  currentNonce = "";
404
347
  currentNonceManager = void 0;
348
+ pendingNonce = void 0;
405
349
  }
406
350
  };
351
+ function generate(options) {
352
+ return _async_to_generator(function() {
353
+ var _options_allowStorage, _options_adWillAutoPlay, _options_adWillPlayMuted, _options_playerVolume, _options_continuousPlayback, loader, goog, request, manager, error;
354
+ return _ts_generator(this, function(_state) {
355
+ switch(_state.label){
356
+ case 0:
357
+ _state.trys.push([
358
+ 0,
359
+ 3,
360
+ ,
361
+ 4
362
+ ]);
363
+ return [
364
+ 4,
365
+ loadPalSdk()
366
+ ];
367
+ case 1:
368
+ _state.sent();
369
+ loader = getOrCreateNonceLoader((_options_allowStorage = options.allowStorage) !== null && _options_allowStorage !== void 0 ? _options_allowStorage : true);
370
+ goog = window.goog;
371
+ request = new goog.pal.NonceRequest();
372
+ request.adWillAutoPlay = (_options_adWillAutoPlay = options.adWillAutoPlay) !== null && _options_adWillAutoPlay !== void 0 ? _options_adWillAutoPlay : true;
373
+ request.adWillPlayMuted = (_options_adWillPlayMuted = options.adWillPlayMuted) !== null && _options_adWillPlayMuted !== void 0 ? _options_adWillPlayMuted : false;
374
+ request.playerVolume = (_options_playerVolume = options.playerVolume) !== null && _options_playerVolume !== void 0 ? _options_playerVolume : request.adWillPlayMuted ? 0 : 1;
375
+ request.continuousPlayback = (_options_continuousPlayback = options.continuousPlayback) !== null && _options_continuousPlayback !== void 0 ? _options_continuousPlayback : true;
376
+ request.descriptionUrl = toDevSafeUrl(options.descriptionUrl || (typeof window !== "undefined" ? window.location.href : ""));
377
+ request.iconsSupported = true;
378
+ request.playerType = "StormcloudVideoPlayer";
379
+ request.playerVersion = "1.0";
380
+ request.supportedApiFrameworks = "2,7,9";
381
+ request.url = toDevSafeUrl(options.descriptionUrl || (typeof window !== "undefined" ? window.location.href : ""));
382
+ request.videoWidth = options.videoWidth || 640;
383
+ request.videoHeight = options.videoHeight || 480;
384
+ if (options.ppid) request.ppid = options.ppid;
385
+ if (options.sessionId) request.sessionId = options.sessionId;
386
+ console.log("[PAL] NonceRequest before generateNonce:", JSON.stringify({
387
+ adWillAutoPlay: request.adWillAutoPlay,
388
+ adWillPlayMuted: request.adWillPlayMuted,
389
+ playerVolume: request.playerVolume,
390
+ continuousPlayback: request.continuousPlayback,
391
+ descriptionUrl: request.descriptionUrl,
392
+ iconsSupported: request.iconsSupported,
393
+ playerType: request.playerType,
394
+ playerVersion: request.playerVersion,
395
+ supportedApiFrameworks: request.supportedApiFrameworks,
396
+ url: request.url,
397
+ videoWidth: request.videoWidth,
398
+ videoHeight: request.videoHeight,
399
+ ppid: request.ppid,
400
+ sessionId: request.sessionId
401
+ }, null, 2));
402
+ return [
403
+ 4,
404
+ loader.loadNonceManager(request)
405
+ ];
406
+ case 2:
407
+ manager = _state.sent();
408
+ currentNonceManager = manager;
409
+ currentNonce = manager.getNonce();
410
+ console.log("[PAL] Nonce generated successfully");
411
+ return [
412
+ 2,
413
+ currentNonce
414
+ ];
415
+ case 3:
416
+ error = _state.sent();
417
+ console.warn("[PAL] Failed to generate nonce:", error);
418
+ currentNonce = "";
419
+ currentNonceManager = void 0;
420
+ return [
421
+ 2,
422
+ ""
423
+ ];
424
+ case 4:
425
+ return [
426
+ 2
427
+ ];
428
+ }
429
+ });
430
+ })();
431
+ }
407
432
  }
408
433
  // Annotate the CommonJS export names for ESM import in node:
409
434
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\pal.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","pal_exports","createPalNonceManager","module","exports","PRIVATE_HOST_PATTERNS","isLocalDevHost","hostname","host","replace","toLowerCase","endsWith","some","pattern","test","toDevSafeUrl","rawUrl","url","URL","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_nonceLoaderAllowStorage","_palLoadPromise","loadPalSdk","window","goog","pal","Promise","resolve","reject","existing","document","querySelector","timeout","setTimeout","Error","addEventListener","clearTimeout","script","createElement","src","async","setAttribute","onload","onerror","head","appendChild","getOrCreateNonceLoader","allowStorage","consentSettings","ConsentSettings","NonceLoader","currentNonce","currentNonceManager","generateNonce","options","loader","request","manager","error","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","location","href","iconsSupported","playerType","playerVersion","supportedApiFrameworks","videoWidth","videoHeight","ppid","sessionId","console","log","JSON","stringify","loadNonceManager","getNonce","warn","getCurrentNonce","injectNonce","vastTagUrl","searchParams","delete","set","toString","base","sep","includes","encodeURIComponent","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","event","reset"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/sdk/pal.ts\nvar pal_exports = {};\n__export(pal_exports, {\n createPalNonceManager: () => createPalNonceManager\n});\nmodule.exports = __toCommonJS(pal_exports);\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _nonceLoaderAllowStorage;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader(allowStorage) {\n if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {\n return _nonceLoader;\n }\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = allowStorage;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n _nonceLoaderAllowStorage = allowStorage;\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader(options.allowStorage ?? true);\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createPalNonceManager\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\pal.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","pal_exports","createPalNonceManager","module","exports","PRIVATE_HOST_PATTERNS","isLocalDevHost","hostname","host","replace","toLowerCase","endsWith","some","pattern","test","toDevSafeUrl","rawUrl","url","URL","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_nonceLoaderAllowStorage","_palLoadPromise","loadPalSdk","window","goog","pal","Promise","resolve","reject","existing","document","querySelector","timeout","setTimeout","Error","addEventListener","clearTimeout","script","createElement","src","async","setAttribute","onload","onerror","head","appendChild","getOrCreateNonceLoader","allowStorage","consentSettings","ConsentSettings","NonceLoader","currentNonce","currentNonceManager","pendingNonce","generateNonce","options","run","generate","settle","then","getCurrentNonce","waitForNonce","maxWaitMs","pending","timer","nonce","injectNonce","vastTagUrl","searchParams","delete","set","toString","base","sep","includes","encodeURIComponent","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","event","reset","loader","request","manager","error","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","location","href","iconsSupported","playerType","playerVersion","supportedApiFrameworks","videoWidth","videoHeight","ppid","sessionId","console","log","JSON","stringify","loadNonceManager","getNonce","warn"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/sdk/pal.ts\nvar pal_exports = {};\n__export(pal_exports, {\n createPalNonceManager: () => createPalNonceManager\n});\nmodule.exports = __toCommonJS(pal_exports);\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _nonceLoaderAllowStorage;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader(allowStorage) {\n if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {\n return _nonceLoader;\n }\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = allowStorage;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n _nonceLoaderAllowStorage = allowStorage;\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n let pendingNonce;\n return {\n generateNonce(options = {}) {\n const run = generate(options);\n pendingNonce = run;\n const settle = () => {\n if (pendingNonce === run) pendingNonce = void 0;\n };\n run.then(settle, settle);\n return run;\n },\n getCurrentNonce() {\n return currentNonce;\n },\n waitForNonce(maxWaitMs) {\n if (currentNonce) return Promise.resolve(currentNonce);\n const pending = pendingNonce;\n if (!pending || !(maxWaitMs > 0)) return Promise.resolve(\"\");\n return new Promise((resolve) => {\n const timer = setTimeout(() => resolve(currentNonce), maxWaitMs);\n pending.then(\n (nonce) => {\n clearTimeout(timer);\n resolve(nonce);\n },\n () => {\n clearTimeout(timer);\n resolve(\"\");\n }\n );\n });\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n pendingNonce = void 0;\n }\n };\n async function generate(options) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader(options.allowStorage ?? true);\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createPalNonceManager\n});\n"]}
package/lib/sdk/pal.d.cts CHANGED
@@ -18,6 +18,7 @@ interface PalNonceOptions {
18
18
  interface PalNonceManager {
19
19
  generateNonce(options?: PalNonceOptions): Promise<string>;
20
20
  getCurrentNonce(): string;
21
+ waitForNonce(maxWaitMs: number): Promise<string>;
21
22
  injectNonce(vastTagUrl: string): string;
22
23
  sendPlaybackStart(): void;
23
24
  sendPlaybackEnd(): void;
package/lib/types.d.cts CHANGED
@@ -1,3 +1,5 @@
1
+ import { AdPodConfig } from './player/OptimizedPodRequest.cjs';
2
+
1
3
  type LateJoinPolicy = "play_remaining" | "skip_to_content";
2
4
  interface AdBreak {
3
5
  id?: string;
@@ -37,12 +39,13 @@ interface StormcloudVideoPlayerConfig {
37
39
  vastTagUrl?: string;
38
40
  isVmap?: boolean;
39
41
  vmapUrl?: string;
40
- vastMode?: 'adstorm' | 'default';
41
42
  minSegmentsBeforePlay?: number;
42
43
  ctvAdRequest?: boolean;
43
44
  adTest?: boolean;
44
45
  programTitle?: string;
45
46
  channelName?: string;
47
+ contentNetwork?: string;
48
+ adPodConfig?: AdPodConfig;
46
49
  podMaxAds?: number;
47
50
  podMaxDurationMs?: number;
48
51
  podExactDuration?: boolean;
@@ -84,6 +87,7 @@ interface Id3TagInfo {
84
87
  type AdRequestSource = "gam" | "edge";
85
88
  interface AdRequestOptions {
86
89
  source?: AdRequestSource;
90
+ finalizeRequestUrl?: (vastTagUrl: string, attempt: number) => string;
87
91
  }
88
92
  interface AdController {
89
93
  initialize: () => void;
@@ -181,6 +185,9 @@ interface TrackingData extends ClientInfo {
181
185
  interface PlayerAnalyticsContext {
182
186
  inputStreamType?: string;
183
187
  debugAdTiming?: boolean;
188
+ contentNetwork?: string;
189
+ contentChannel?: string;
190
+ contentTitle?: string;
184
191
  }
185
192
  interface HeartbeatData {
186
193
  browserId: string;
@@ -215,4 +222,4 @@ interface AdImpressionInfo {
215
222
  timestamp: string;
216
223
  }
217
224
 
218
- export type { AdBreak, AdController, AdControllerOptions, AdDetectInfo, AdFloorLadderConfig, AdImpressionInfo, AdLoadedInfo, AdPosition, AdRequestOptions, AdRequestSource, AdSchedule, ClientInfo, FloorLadderMode, HeartbeatData, Id3TagInfo, ImaController, ImaControllerOptions, LateJoinPolicy, PlayerAnalyticsContext, Scte35Marker, StormcloudApiResponse, StormcloudVideoPlayerConfig, TrackingData };
225
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdFloorLadderConfig, type AdImpressionInfo, type AdLoadedInfo, AdPodConfig, type AdPosition, type AdRequestOptions, type AdRequestSource, type AdSchedule, type ClientInfo, type FloorLadderMode, type HeartbeatData, type Id3TagInfo, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type PlayerAnalyticsContext, type Scte35Marker, type StormcloudApiResponse, type StormcloudVideoPlayerConfig, type TrackingData };