@flowplayer/player 3.28.0-rc → 3.28.0-rc.1

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 (56) hide show
  1. package/core/events.d.ts +13 -0
  2. package/core/events.js +7 -1
  3. package/core.js +1 -1
  4. package/default.js +1 -1
  5. package/embed.js +2 -2
  6. package/flowplayer.css +1 -1
  7. package/index.d.ts +304 -8
  8. package/package.json +1 -1
  9. package/plugins/ads.d.ts +304 -17
  10. package/plugins/ads.js +1 -1
  11. package/plugins/airplay.d.ts +304 -17
  12. package/plugins/analytics.d.ts +304 -17
  13. package/plugins/analytics.js +1 -1
  14. package/plugins/asel.d.ts +304 -17
  15. package/plugins/audio.d.ts +304 -17
  16. package/plugins/chapters.d.ts +304 -17
  17. package/plugins/chromecast.d.ts +304 -17
  18. package/plugins/comscore.d.ts +304 -17
  19. package/plugins/consent.d.ts +304 -17
  20. package/plugins/context-menu.d.ts +304 -17
  21. package/plugins/cuepoints.d.ts +304 -17
  22. package/plugins/dash.d.ts +304 -17
  23. package/plugins/dash.js +3 -3
  24. package/plugins/drm.d.ts +304 -17
  25. package/plugins/endscreen.d.ts +304 -17
  26. package/plugins/fas.d.ts +304 -17
  27. package/plugins/float-on-scroll.d.ts +304 -17
  28. package/plugins/ga4.d.ts +304 -17
  29. package/plugins/gemius.d.ts +304 -17
  30. package/plugins/google-analytics.d.ts +304 -17
  31. package/plugins/hls.d.ts +304 -17
  32. package/plugins/hls.js +1 -1
  33. package/plugins/id3.d.ts +304 -17
  34. package/plugins/iframe.d.ts +304 -17
  35. package/plugins/keyboard.d.ts +304 -17
  36. package/plugins/media-session.d.ts +304 -17
  37. package/plugins/message.d.ts +304 -17
  38. package/plugins/ovp.d.ts +304 -17
  39. package/plugins/ovp.js +1 -1
  40. package/plugins/playlist.d.ts +304 -17
  41. package/plugins/preview.d.ts +304 -17
  42. package/plugins/qsel.d.ts +304 -17
  43. package/plugins/qul.d.ts +304 -17
  44. package/plugins/qul.js +1 -1
  45. package/plugins/rts.d.ts +304 -17
  46. package/plugins/rts.js +7 -7
  47. package/plugins/share.d.ts +304 -17
  48. package/plugins/speed.d.ts +304 -17
  49. package/plugins/ssai.d.ts +304 -17
  50. package/plugins/ssai.js +2 -2
  51. package/plugins/subtitles.d.ts +304 -17
  52. package/plugins/thumbnails.d.ts +304 -17
  53. package/plugins/tizen.d.ts +304 -17
  54. package/plugins/vtsel.d.ts +304 -17
  55. package/plugins/webos.d.ts +304 -17
  56. package/util/loader.d.ts +304 -17
@@ -326,17 +326,6 @@ ERROR = "error";
326
326
 
327
327
  declare const ERRORED = "is-error";
328
328
 
329
- /**
330
- * @public
331
- */
332
- declare type ErrorEventDetail = {
333
- src?: string;
334
- type?: string;
335
- code?: number | string;
336
- };
337
-
338
- /* Excluded from this release type: _ErrorEventDetail */
339
-
340
329
  declare namespace events {
341
330
  export {
342
331
  MOUNT,
@@ -394,7 +383,8 @@ declare namespace events {
394
383
  RECOVER,
395
384
  CUEPOINTS,
396
385
  CUEPOINT_START,
397
- CUEPOINT_END
386
+ CUEPOINT_END,
387
+ FLOWPLAYER_ERROR
398
388
  }
399
389
  }
400
390
 
@@ -412,11 +402,307 @@ declare type FilterNewSourceTypes<PluginSrcs extends unknown[]> = {
412
402
  } ? PluginSrcs[Index] : never;
413
403
  };
414
404
 
405
+ /**
406
+ * @public
407
+ * emitted to handle playback related errors
408
+ */
409
+ declare const /**
410
+ @public
411
+ * when a new player is inserted into the HTML
412
+ */ /**
413
+ * @public
414
+ * emitted to handle playback related errors
415
+ */
416
+ FLOWPLAYER_ERROR = "flowplayer:error";
417
+
415
418
  /**
416
419
  * @public
417
420
  */
418
421
  declare type FlowplayerCustomElementRegistry = Map<string, string>;
419
422
 
423
+ declare class FlowplayerError extends Error {
424
+ readonly message: string;
425
+ readonly flowplayerErrorCode: FlowplayerErrorCode;
426
+ readonly config: FlowplayerErrorConfig;
427
+ static getErrorKey(code: FlowplayerErrorCode): FlowplayerErrorCodeName;
428
+ readonly id: string;
429
+ readonly fatal: boolean;
430
+ readonly errorKey: string;
431
+ constructor(message: string, flowplayerErrorCode: FlowplayerErrorCode, config?: FlowplayerErrorConfig);
432
+ toJSON(): {
433
+ message: string;
434
+ flowplayer_error_code: FlowplayerErrorCode;
435
+ id: string;
436
+ root_error_id: string | undefined;
437
+ resource: string | undefined;
438
+ fatal: boolean;
439
+ };
440
+ }
441
+
442
+ declare type FlowplayerErrorCode = (typeof FlowplayerErrorCodeMap)[keyof typeof FlowplayerErrorCodeMap];
443
+
444
+ declare const FlowplayerErrorCodeMap: {
445
+ /** Unknown */
446
+ readonly Unknown: "00-00";
447
+ /** Media Section */
448
+ readonly MediaUnknown: "01-00";
449
+ readonly MediaUnavailable: "01-01";
450
+ readonly MediaUnsupportedVideoFormat: "01-02";
451
+ readonly MediaUnsupportedAudioFormat: "01-03";
452
+ readonly MediaBitrateExceeded: "01-04";
453
+ readonly MediaBufferOverread: "01-05";
454
+ readonly MediaIntegerOverflow: "01-06";
455
+ readonly MediaQuotaExceeded: "01-07";
456
+ readonly MediaInvalidCompositionDuration: "01-08";
457
+ readonly MediaInvalidCompositionSourceDuration: "01-09";
458
+ readonly MediaInvalidCompositionSourceStartTime: "01-10";
459
+ readonly MediaMalformedDepth: "01-11";
460
+ /** Playback Section */
461
+ readonly PlaybackUnknown: "02-00";
462
+ readonly PlaybackVideoBufferUnderRun: "02-01";
463
+ readonly PlaybackAudioBufferUnderRun: "02-02";
464
+ readonly PlaybackVideoBufferingTimeout: "02-03";
465
+ readonly PlaybackAudioBufferingTimeout: "02-04";
466
+ readonly PlaybackManifestParseError: "02-05";
467
+ readonly PlaybackVideoDecodeError: "02-06";
468
+ readonly PlaybackAudioDecodeError: "02-07";
469
+ readonly PlaybackDroppedFramesExceeded: "02-08";
470
+ readonly PlaybackPlayheadExceedsDuration: "02-09";
471
+ readonly PlaybackUnsupportedDevice: "02-10";
472
+ readonly PlaybackManifestLoadError: "02-11";
473
+ readonly PlaybackManifestLoadTimeout: "02-12";
474
+ readonly PlaybackManifestParsingError: "02-13";
475
+ readonly PlaybackManifestIncompatibleCodecs: "02-14";
476
+ readonly PlaybackLevelEmptyError: "02-15";
477
+ readonly PlaybackLevelLoadError: "02-16";
478
+ readonly PlaybackLevelLoadTimeout: "02-17";
479
+ readonly PlaybackLevelSwitchError: "02-18";
480
+ readonly PlaybackAudioTrackLoadError: "02-19";
481
+ readonly PlaybackAudioTrackLoadTimeout: "02-20";
482
+ readonly PlaybackFragLoadError: "02-21";
483
+ readonly PlaybackFragLoadTimeout: "02-22";
484
+ readonly PlaybackFragDecryptError: "02-23";
485
+ readonly PlaybackFragParsingError: "02-24";
486
+ readonly PlaybackFragGap: "02-25";
487
+ readonly PlaybackRemuxAllocError: "02-26";
488
+ readonly PlaybackBufferAddCodecError: "02-27";
489
+ readonly PlaybackBufferIncompatibleCodecs: "02-28";
490
+ readonly PlaybackBufferAppendError: "02-29";
491
+ readonly PlaybackBufferStalledError: "02-30";
492
+ readonly PlaybackBufferFullError: "02-31";
493
+ readonly PlaybackBufferSeekOverHole: "02-32";
494
+ readonly PlaybackBufferNudgeOnStall: "02-33";
495
+ readonly PlaybackInternalException: "02-34";
496
+ readonly PlaybackInternalAborted: "02-35";
497
+ readonly PlaybackManifestLoaderFailure: "02-36";
498
+ readonly PlaybackSegmentBaseLoaderError: "02-37";
499
+ readonly PlaybackTimeSyncFailed: "02-38";
500
+ readonly PlaybackFragmentLoaderFailure: "02-39";
501
+ readonly PlaybackAppendError: "02-40";
502
+ readonly PlaybackRemoveError: "02-41";
503
+ readonly PlaybackDataUpdateFailed: "02-42";
504
+ readonly PlaybackManifestNoStreams: "02-43";
505
+ readonly PlaybackUnknownManifestType: "02-44";
506
+ readonly PlaybackDashInsufficientSegmentInfo: "02-45";
507
+ readonly PlaybackDashNoRepresentations: "02-46";
508
+ readonly PlaybackDashNoAdaptationSets: "02-47";
509
+ readonly PlaybackDashNoInitSegment: "02-48";
510
+ readonly PlaybackDashUnsupportedContainerFormat: "02-49";
511
+ readonly PlaybackDashKeySystemMismatch: "02-50";
512
+ readonly PlaybackMultipleKeyIDs: "02-51";
513
+ readonly PlaybackDashConflictingKeyIDs: "02-52";
514
+ readonly PlaybackRestrictedStreams: "02-53";
515
+ readonly PlaybackHlsMasterAndMediaTags: "02-54";
516
+ readonly PlaybackRepresentationIdConflict: "02-55";
517
+ readonly PlaybackHlsUnsupportedKeyFormats: "02-56";
518
+ readonly PlaybackManifestNoVariants: "02-57";
519
+ readonly PlaybackHlsUndeclaredVariables: "02-58";
520
+ readonly PlaybackAes128InvalidKeyLength: "02-59";
521
+ readonly PlaybackDashConflictingAes128Keys: "02-60";
522
+ readonly PlaybackDashUnsupportedAes128Encryption: "02-61";
523
+ readonly PlaybackManifestPatchMismatch: "02-62";
524
+ readonly PlaybackEmptyMediaPlaylist: "02-63";
525
+ readonly PlaybackNonContiguousCompositionTrack: "02-64";
526
+ readonly PlaybackDecoderNotFound: "02-65";
527
+ readonly PlaybackDecoderTemporarilyUnavailable: "02-66";
528
+ readonly PlaybackIncompatibleAsset: "02-67";
529
+ readonly PlaybackNoCompatibleExternalDisplay: "02-69";
530
+ readonly PlaybackOutOfMemory: "02-70";
531
+ readonly PlaybackToneMappingFailed: "02-71";
532
+ readonly PlaybackVideoCompositorFailed: "02-72";
533
+ /** Network Section */
534
+ readonly NetworkUnknown: "03-00";
535
+ readonly NetworkNoInternet: "03-01";
536
+ readonly NetworkRequestTimeout: "03-02";
537
+ readonly NetworkUnableToResolveHost: "03-03";
538
+ readonly NetworkResourceNotFound: "03-04";
539
+ readonly NetworkExpiredUrl: "03-05";
540
+ readonly NetworkUrlResolutionFailed: "03-06";
541
+ readonly NetworkDownloadErrorIdManifest: "03-07";
542
+ readonly NetworkDownloadErrorIdSidx: "03-08";
543
+ readonly NetworkDownloadErrorIdContent: "03-09";
544
+ readonly NetworkDownloadErrorIdInitialization: "03-10";
545
+ readonly NetworkDownloadErrorIdXlink: "03-11";
546
+ readonly NetworkHttpRequestFailed: "03-12";
547
+ readonly NetworkMaxRetriesExceeded: "03-13";
548
+ readonly NetworkSegmentMissing: "03-14";
549
+ /** HTTP Error Codes */
550
+ readonly NetworkHttp400BadRequest: "03-400";
551
+ readonly NetworkHttp401Unauthorized: "03-401";
552
+ readonly NetworkHttp402PaymentRequired: "03-402";
553
+ readonly NetworkHttp403Forbidden: "03-403";
554
+ readonly NetworkHttp404NotFound: "03-404";
555
+ readonly NetworkHttp405MethodNotAllowed: "03-405";
556
+ readonly NetworkHttp406NotAcceptable: "03-406";
557
+ readonly NetworkHttp407ProxyAuthenticationRequired: "03-407";
558
+ readonly NetworkHttp408RequestTimeout: "03-408";
559
+ readonly NetworkHttp409Conflict: "03-409";
560
+ readonly NetworkHttp410Gone: "03-410";
561
+ readonly NetworkHttp411LengthRequired: "03-411";
562
+ readonly NetworkHttp412PreconditionFailed: "03-412";
563
+ readonly NetworkHttp413PayloadTooLarge: "03-413";
564
+ readonly NetworkHttp414URITooLong: "03-414";
565
+ readonly NetworkHttp415UnsupportedMediaType: "03-415";
566
+ readonly NetworkHttp416RangeNotSatisfiable: "03-416";
567
+ readonly NetworkHttp417ExpectationFailed: "03-417";
568
+ readonly NetworkHttp418ImATeapot: "03-418";
569
+ readonly NetworkHttp421MisdirectedRequest: "03-421";
570
+ readonly NetworkHttp422UnprocessableEntity: "03-422";
571
+ readonly NetworkHttp423Locked: "03-423";
572
+ readonly NetworkHttp424FailedDependency: "03-424";
573
+ readonly NetworkHttp425TooEarly: "03-425";
574
+ readonly NetworkHttp426UpgradeRequired: "03-426";
575
+ readonly NetworkHttp428PreconditionRequired: "03-428";
576
+ readonly NetworkHttp429TooManyRequests: "03-429";
577
+ readonly NetworkHttp431RequestHeaderFieldsTooLarge: "03-431";
578
+ readonly NetworkHttp451UnavailableForLegalReasons: "03-451";
579
+ readonly NetworkHttp500InternalServerError: "03-500";
580
+ readonly NetworkHttp501NotImplemented: "03-501";
581
+ readonly NetworkHttp502BadGateway: "03-502";
582
+ readonly NetworkHttp503ServiceUnavailable: "03-503";
583
+ readonly NetworkHttp504GatewayTimeout: "03-504";
584
+ readonly NetworkHttp505HTTPVersionNotSupported: "03-505";
585
+ readonly NetworkHttp506VariantAlsoNegotiates: "03-506";
586
+ readonly NetworkHttp507InsufficientStorage: "03-507";
587
+ readonly NetworkHttp508LoopDetected: "03-508";
588
+ readonly NetworkHttp510NotExtended: "03-510";
589
+ readonly NetworkHttp511NetworkAuthenticationRequired: "03-511";
590
+ /** Content Protection Section */
591
+ readonly ContentProtectionUnknown: "04-00";
592
+ readonly ContentProtectionConcurrentStreamLimitExceeded: "04-01";
593
+ readonly ContentProtectionEntitlementRefused: "04-02";
594
+ readonly ContentProtectionLicenseExpired: "04-03";
595
+ readonly ContentProtectionBadLicenseRequest: "04-04";
596
+ readonly ContentProtectionLicenseServerTimeout: "04-05";
597
+ readonly ContentProtectionInsufficientHDCPSupport: "04-06";
598
+ readonly ContentProtectionGeoRestricted: "04-07";
599
+ readonly ContentProtectionParentalControlRestricted: "04-08";
600
+ readonly ContentProtectionCDNUnauthorized: "04-09";
601
+ readonly ContentProtectionInvalidAccessToken: "04-10";
602
+ readonly ContentProtectionKeySystemNoKeys: "04-11";
603
+ readonly ContentProtectionKeySystemNoAccess: "04-12";
604
+ readonly ContentProtectionKeySystemNoSession: "04-13";
605
+ readonly ContentProtectionKeySystemNoConfiguredLicense: "04-14";
606
+ readonly ContentProtectionKeySystemCertificateRequestFailed: "04-15";
607
+ readonly ContentProtectionKeySystemCertificateUpdateFailed: "04-16";
608
+ /** Key System: Session update failed */
609
+ readonly ContentProtectionKeySystemSessionUpdateFailed: "04-17";
610
+ /** Key System: Status output restricted */
611
+ readonly ContentProtectionKeySystemStatusOutputRestricted: "04-18";
612
+ /** Key System: Status internal error */
613
+ readonly ContentProtectionKeySystemStatusInternalError: "04-19";
614
+ /** Key Load Error */
615
+ readonly ContentProtectionKeyLoadError: "04-20";
616
+ /** Key Load Timeout */
617
+ readonly ContentProtectionKeyLoadTimeout: "04-21";
618
+ /** Capability MediaKeys Error */
619
+ readonly ContentProtectionCapabilityMediaKeysError: "04-22";
620
+ /** Manifest indicated protected content, but unable to determine key systems */
621
+ readonly ContentProtectionManifestKeySystemUnknown: "04-23";
622
+ /**
623
+ * None of the requested key system configurations are available.
624
+ * Possible reasons:
625
+ * - Key system not supported
626
+ * - Requested features (e.g., persistent state) not supported
627
+ * - User denied access in prompt
628
+ * - Key system unavailable in insecure contexts (requires HTTPS)
629
+ */
630
+ readonly ContentProtectionKeySystemUnavailable: "04-24";
631
+ /** Browser found requested key system, but failed to create CDM instance */
632
+ readonly ContentProtectionCDMCreationFailed: "04-25";
633
+ /** Browser created CDM instance but failed to attach it to the video */
634
+ readonly ContentProtectionCDMAttachFailed: "04-26";
635
+ /** CDM rejected the server certificate (malformed or unsupported format) */
636
+ readonly ContentProtectionCDMServerCertificateRejected: "04-27";
637
+ /** CDM refused to create a session for unknown reasons */
638
+ readonly ContentProtectionCDMSessionCreationFailed: "04-28";
639
+ /** CDM unable to generate a license request due to malformed or unsupported init data */
640
+ readonly ContentProtectionCDMLicenseRequestFailed: "04-29";
641
+ /** License response rejected by the CDM (invalid/malformed response) */
642
+ readonly ContentProtectionCDMLicenseResponseRejected: "04-30";
643
+ /** Manifest does not specify DRM info, but content is encrypted */
644
+ readonly ContentProtectionManifestMissingDRMInfo: "04-31";
645
+ /** No license server was provided for the key system signaled by the manifest */
646
+ readonly ContentProtectionLicenseServerMissing: "04-32";
647
+ /** A required offline session was removed, affecting playback */
648
+ readonly ContentProtectionOfflineSessionRemoved: "04-33";
649
+ /** Error while executing init data transformation */
650
+ readonly ContentProtectionInitDataTransformationError: "04-34";
651
+ /** Server certificate request failed */
652
+ readonly ContentProtectionServerCertificateRequestFailed: "04-35";
653
+ /** HDCP version does not meet the requirements */
654
+ readonly ContentProtectionInsufficientHDCPVersion: "04-36";
655
+ /** Error when checking HDCP version */
656
+ readonly ContentProtectionHDCPVersionCheckFailed: "04-37";
657
+ /** Ads Section */
658
+ readonly AdsUnknown: "08-00";
659
+ readonly AdsVastParseError: "08-100";
660
+ readonly AdsInvalidVastSchema: "08-101";
661
+ readonly AdsVastVersionNotSupported: "08-102";
662
+ readonly AdsUnexpectedAdType: "08-200";
663
+ readonly AdsCreativeLinearityMismatch: "08-201";
664
+ readonly AdsCreativeDurationMismatch: "08-202";
665
+ readonly AdsCreativeSizeMismatch: "08-203";
666
+ readonly AdsWrapperVastError: "08-300";
667
+ readonly AdsVastResponseRedirectTimeout: "08-301";
668
+ readonly AdsWrapperLimitReached: "08-302";
669
+ readonly AdsVastResponseEmpty: "08-303";
670
+ readonly AdsLinearAdDisplayError: "08-400";
671
+ readonly AdsMediaFileNotFound: "08-401";
672
+ readonly AdsMediaFileUnavailable: "08-402";
673
+ readonly AdsUnsupportedMimeType: "08-403";
674
+ readonly AdsUnableToDisplayMediaFile: "08-405";
675
+ readonly AdsMezzanineFileMissing: "08-406";
676
+ readonly AdsMezzanineFileDownloaded: "08-407";
677
+ readonly AdsRejectedAd: "08-408";
678
+ readonly AdsInteractiveCreativeError: "08-409";
679
+ readonly AdsVerificationNodeExecutionError: "08-410";
680
+ readonly AdsNonLinearAdDisplayError: "08-500";
681
+ readonly AdsNonLinearAdSizeMismatch: "08-501";
682
+ readonly AdsNonLinearAdFetchError: "08-502";
683
+ readonly AdsNonLinearUnsupportedType: "08-503";
684
+ readonly AdsCompanionAdDisplayError: "08-600";
685
+ readonly AdsCompanionAdSizeMismatch: "08-601";
686
+ readonly AdsRequiredCompanionAdError: "08-602";
687
+ readonly AdsCompanionAdFetchError: "08-603";
688
+ readonly AdsUndefinedVastError: "08-900";
689
+ readonly AdsUnknownVpaidError: "08-901";
690
+ readonly AdsVastDocumentEmpty: "08-999";
691
+ };
692
+
693
+ declare type FlowplayerErrorCodeName = keyof typeof FlowplayerErrorCodeMap;
694
+
695
+ declare type FlowplayerErrorConfig = Partial<{
696
+ fatal: boolean;
697
+ resource: string;
698
+ rootErrorId: string;
699
+ preventRetry: boolean;
700
+ }>;
701
+
702
+ declare type FlowplayerErrorEventDetail = {
703
+ error: FlowplayerError;
704
+ };
705
+
420
706
  /**
421
707
  * @public
422
708
  */
@@ -957,6 +1243,7 @@ declare type PlayerCustomEventsDetailMap = PlayerEmittableCustomEventsDetailMap
957
1243
  [RECOVER]: RecoverEventDetail;
958
1244
  [QUALITIES]: QualitiesEventDetail;
959
1245
  [QUALITY_CHANGE]: QualityChangeEventDetail;
1246
+ [FLOWPLAYER_ERROR]: FlowplayerErrorEventDetail;
960
1247
  /* Excluded from this release type: audioonlysource */
961
1248
  /* Excluded from this release type: renderplugin */
962
1249
  /* Excluded from this release type: "seek:queued" */
@@ -978,7 +1265,6 @@ declare type PlayerCustomEventsOverloads = {
978
1265
  /**
979
1266
  * Sent when an error occurs. Learn more about error handling.
980
1267
  */
981
- on(event: typeof ERROR, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof ERROR]>) => void): Player;
982
1268
  on(// FIXME - this event is in context-menu plugin
983
1269
  event: typeof CONTEXT_MENU, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof CONTEXT_MENU]>) => void): Player;
984
1270
  /* Excluded from this release type: on */
@@ -1017,6 +1303,10 @@ declare type PlayerCustomEventsOverloads = {
1017
1303
  * Emitted when the media changes quality.
1018
1304
  */
1019
1305
  on(event: typeof QUALITY_CHANGE, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof QUALITY_CHANGE]>) => void): Player;
1306
+ /**
1307
+ * Emitted when a standard FlowplayerError is encountered
1308
+ */
1309
+ on(event: typeof FLOWPLAYER_ERROR, handler: (e: FPEvent<PlayerCustomEventsDetailMap[typeof FLOWPLAYER_ERROR]>) => void): Player;
1020
1310
  /* Excluded from this release type: on */
1021
1311
  /**
1022
1312
  * Listen to this event to create a recommendations grid using the data passed with the event.
@@ -1069,12 +1359,9 @@ declare type PlayerCustomEventsOverloads = {
1069
1359
  emit(event: never, data?: never): Player;
1070
1360
  /* Excluded from this release type: emit */
1071
1361
  /* Excluded from this release type: emit */
1072
- /* Excluded from this release type: emit */
1073
- /* Excluded from this release type: emit */
1074
1362
  };
1075
1363
 
1076
1364
  declare type PlayerEmittableCustomEventsDetailMap = {
1077
- [ERROR]: ErrorEventDetail;
1078
1365
  [CONTEXT_MENU]: ContextMenuEventDetail;
1079
1366
  [VIEW_ENTER]: ViewEnterEventDetail;
1080
1367
  [VIEW_LEAVE]: ViewLeaveEventDetail;
@@ -1090,7 +1377,7 @@ declare type PlayerEventOverloads = PlayerNativeEventsOverloads & PlayerCustomEv
1090
1377
 
1091
1378
  declare type PlayerNativeEventName = keyof PlayerNativeEventsDetailMap;
1092
1379
 
1093
- declare type PlayerNativeEventsDetailMap = Omit<HTMLVideoElementEventMap, "error">;
1380
+ declare type PlayerNativeEventsDetailMap = HTMLVideoElementEventMap;
1094
1381
 
1095
1382
  declare type PlayerNativeEventsOverloads = {
1096
1383
  on<K extends keyof PlayerNativeEventsDetailMap>(event: K, handler: (ev: PlayerNativeEventsDetailMap[K]) => void): Player;
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).flowplayer=e.flowplayer||{},e.flowplayer.analytics=t())}(this,(function(){"use strict";const e=(...e)=>e.reduce((e,t)=>Object.assign(Object.assign({},e),t),{}),t=(e,t)=>{const r=e.lastIndexOf(t);return~r&&e.splice(r,1),e};class RequestQueue{static of(){return new RequestQueue}static is_empty(e){return 0==e.pending.length}static is_high_water(e){return e.open.length==RequestQueue.MAX_OPEN_REQUESTS}static maybe_spawn_req(e){if(RequestQueue.is_empty(e))return e;if(RequestQueue.is_high_water(e))return e;try{const t=RequestQueue.lpop(e);t&&RequestQueue.request(e,t)}catch(e){}}static increment_failures(e){return e.stats.failures++,e.stats.failures>RequestQueue.MAX_FAILURE_COUNT&&(e.stats.ttl=Date.now()+RequestQueue.REQUEST_TTL_MS),e}static handle_error(e,t){RequestQueue.rm(e,t),RequestQueue.increment_failures(e)}static request(e,[t,r,n]){if(Date.now()<e.stats.ttl)return;const i=new XMLHttpRequest;e.open.push(i),i.timeout=RequestQueue.REQUEST_TIMEOUT_MS,i.ontimeout=function(){RequestQueue.handle_error(e,i)},i.onerror=function(t){RequestQueue.handle_error(e,i)},i.onreadystatechange=function(){i.readyState==XMLHttpRequest.DONE&&RequestQueue.rm(e,i),Math.floor(i.status/100)},i.onload=function(){RequestQueue.rm(e,i),e.stats.failures&&e.stats.failures--},i.open(r,t),i.setRequestHeader("Content-Type","text/plain;charset=UTF-8");try{i.send(JSON.stringify(n))}catch(e){}}static rpush(e,...t){return t.forEach(t=>{e.pending.length>=RequestQueue.MAX_PENDING||(e.pending.push(t),RequestQueue.maybe_spawn_req(e))}),e}static lpop(e){return e.pending.shift()}static rm(e,r){return t(e.open,r),e}constructor(){this.pending=[],this.open=[],this.stats={failures:0,ttl:0}}}RequestQueue.MAX_OPEN_REQUESTS=3,RequestQueue.MAX_PENDING=5,RequestQueue.REQUEST_TIMEOUT_MS=4e3,RequestQueue.REQUEST_TTL_MS=5e3,RequestQueue.MAX_FAILURE_COUNT=3;var r=RequestQueue.of();const n=/:([a-zA-Z_]+)/g;class Log{static prepare(e,t){const r=document.createEvent("Event");return r.initEvent(e,!1,!0),r.ns=e,r.data=t,r}static of(e){return new Log(e)}constructor(e){this.emitter=e}info(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.INFO,e))}error(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.ERROR,e))}warn(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.WARN,e))}}var i,o;Log.NAMESPACE={INFO:"tracker:info",ERROR:"tracker:err",WARN:"tracker:warn"},function(e){e.POST="POST",e.PUT="PUT",e.GET="GET"}(i||(i={}));class Tracker{static of(e,t){return new Tracker(e,t)}static ensure_required_keys(e,t){return e.required_keys.filter(e=>!(e in t))}static pluck_valid_keys(t,r){return((t,...r)=>Object.keys(t).filter(e=>~r.indexOf(e)).reduce((r,n)=>e(r,{[n]:t[n]}),{}))(r,...t.valid_keys)}static merge_metadata(t,r={}){return t.metadata=Tracker.pluck_valid_keys(t,e(t.metadata,r)),t}static assert_emitter_api(e){if("function"!=typeof(e||{}).addEventListener)throw new Error("Tracker() received an emitter that does not implement the addEventListener method");if("function"!=typeof(e||{}).removeEventListener)throw new Error("Tracker() received an emitter that does not implement the removeEventListener method")}static create_listener(e,t,r){var n;e.listeners.push([t,r]),null===(n=e.emitter)||void 0===n||n.addEventListener(t,r)}constructor(t,i={}){const o=this;if(this.emitter=t,this.url=i.url,this.log=Log.of(this.emitter),this.verb=i.verb,this.metadata=e({},i.metadata||{}),this.rq=i.rq||r,this.events=i.events||[],this.required_keys=i.required_keys||[],this.optional_keys=i.optional_keys||[],this.listeners=[],this.valid_keys=this.required_keys.slice(0).concat(this.optional_keys),Tracker.assert_emitter_api(this.emitter),void 0===Tracker.verb[this.verb])throw new Error(`invalid HTTP verb[${this.verb}] passed`);if("string"!=typeof this.url)throw new Error(`invalid API url[${this.url}] passed`);Tracker.TRACKERS.push(this),o.events.forEach(t=>{Tracker.create_listener(this,t,(r={})=>{const i=e(o.metadata,{event_type:t},r.data||r),a=function(e,t){return e.replace(n,r=>{const n=r.slice(1,r.length);return n in t?t[n].toString():(console.warn(`\n preparing url[${e}] failed\n\n parameter[${n}] not detected in params:\n\n ${JSON.stringify(t,null,2)}\n `),r)})}(o.url,i),s=Tracker.pluck_valid_keys(o,i),u=Tracker.ensure_required_keys(o,s);if(u.length)return o.log.error(`Tracker.validate_metadata() failed for\n Event[${t}]\n missing keys: ${u}\n payload:\n ${JSON.stringify(s,null,2)}`);this.rq&&RequestQueue.rpush(this.rq,[a,this.verb,s])})})}destroy(){this.listeners.forEach(([e,t])=>{var r;return null===(r=this.emitter)||void 0===r?void 0:r.removeEventListener(e,t)}),delete this.rq,delete this.emitter,t(Tracker.TRACKERS,this)}put(e={}){return Tracker.merge_metadata(this,e),this}}Tracker.TRACKERS=[],Tracker.QUEUE=r,Tracker.verb=i,function(e){e[e.ADS=2]="ADS",e[e.ANALYTICS=4]="ANALYTICS",e[e.NO_METERING=8]="NO_METERING",e[e.DEVELOPER_PLAN=16]="DEVELOPER_PLAN",e[e.WOWZA_VIDEO=32]="WOWZA_VIDEO"}(o||(o={}));const a=["localhost","127.0.0.1","0.0.0.0","s.codepen.io","cdpn.io","try.flowplayer.com"];function s(e,t){return!!~a.indexOf(e)||e.indexOf(t)===e.length-t.length}s.check_whitelist=function(e){return!!~a.indexOf(e)};function u(e){this.message=e}u.prototype=new Error,u.prototype.name="InvalidCharacterError";var c="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new u("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,i=0,o=0,a="";n=t.charAt(o++);~n&&(r=i%4?64*r+n:n,i++%4)?a+=String.fromCharCode(255&r>>(-2*i&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return a};var d=function(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(c(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return c(t)}};function l(e){this.message=e}l.prototype=new Error,l.prototype.name="InvalidTokenError";var f=function(e,t){if("string"!=typeof e)throw new l("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(d(e.split(".")[r]))}catch(e){throw new l("Invalid token specified: "+e.message)}};f.InvalidTokenError=l;const p="production";function _(e,t){const r={valid_jwt:!1,raw:"",data:{acl:0},exp:0};let n={c:"{}",exp:0};t=t||{};try{n=f(e),r.valid_jwt=!0}catch(e){}return r.raw=e,r.data=JSON.parse(n.c),r.exp=n.exp,t.require_valid_token&&_.validate(r),r}function h(e){return{grant:e,is_granted:t=>(e&t)===t}}function m(e,t,r){const n=function(e){return Array.isArray(e)?e.slice(0):e.split(".")}(t);for(;n.length;){if(null==e)return r;const t=n.shift();if("string"!=typeof t)return r;e=e[t]}return null==e?r:e}_.validate=function(e){if("string"==typeof e&&(e=_(e)),!e||!e.raw){if(s.check_whitelist(window.location.hostname)||"dev"===p.toString())return!0;throw new Error("No token provided in configuration")}if(!e.valid_jwt)throw new Error("Invalid token provided");const t=window.location.hostname,r=s.bind(null,t);if("dev"!==p.toString()&&e.data.domain&&e.data.domain.length&&!e.data.domain.some(r))throw new Error("Domain not allowed");if("dev"!==p.toString()&&1e3*e.exp-Date.now()<0)throw new Error("Expired token");return!0},_.id=function(e){if(e)return"string"==typeof e&&(e=_(e)),e.data.id},h.of=h,h.from_token=function(e){const t=_(e,{require_valid_token:!0});return h.of(t.data.acl)},h.permissions=o;var v="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};var y="ping",k="display",g="view";const w=["sitegroup_id","session_id","media_id","site_id","player_id","video_type"],E=["created","position"],T=["player_version","created","source","category","category_id","autoplay","muted","customer_user_id"];function R(e,t){return e.duration/1===e.duration&&Object.assign(t,function(e){const t=e/100;return{segment_duration:t,breakpoints:Array(...Array(100)).map((function(e,r){return Math.floor(r*t*1e3)/1e3}))}}(e.duration))}function q(e,t,r){if(!t.segment_duration&&!R(e,t))return;const n=function(e,t,r){const n=t.last_idx,i=r?99:A(e,t);return t.last_idx=i,i<=n?[]:t.breakpoints.slice(n,99==i?100:i).map((function(e){return t.breakpoints.indexOf(e)}))}(e,t,r);0!=n.length&&e.emit(y,{position:n})}function A(e,t){return Math.min(Math.floor(e.currentTime/t.segment_duration),99)}function S(){try{const e=window.location!==window.parent.location?document.referrer:document.location.href;return"string"==typeof e&&e.slice(0,200)}catch(e){return!1}}var O;const b="vod",N="live",Q=[k,y,g];function x(e,t,r){switch(null==t?void 0:t.kind){case"live":return function(e,t){const r=Date.now();r-t.last_tracked_ts<6e4||(t.last_tracked_ts=r,++t.ticks,e.emit(y,{position:60*t.ticks}))}(e,t);case"vod":return q(e,t,"boolean"==typeof r&&r)}}function L(e){const t=e.ads;return void 0!==t&&(void 0!==t.schedule&&("function"==typeof t.hasPreroll&&(t.currentRequests?t.currentRequests:!!t.adPlaying||!(!t.hasPreroll()||0!=t.nextIndex))))}const I=((O=class Analytics{init(e,t,r){if(!h.from_token(e.token||"").is_granted(h.permissions.ANALYTICS))return;if(r.hasState("consent-no-tracking"))return;if(r.analytics)return;const n=r.analytics={ticker:void 0,last_media_id:"",ended:!1},i={locked:void 0,ttl:6e3,task:()=>{x(r,n.ticker)}};const o={session_id:r.deviceId(),autoplay:r.autoplay,muted:r.muted,player_id:e.player_id,customer_user_id:e.customer_user_id,player_version:"3.28.0-rc"},a=Tracker.of(r,{verb:Tracker.verb.POST,url:"https://ptm.flowplayer.com/:video_type/:sitegroup_id/:event_type",events:Q,required_keys:w,optional_keys:T.concat(E).slice(0),metadata:o});r.on("reap",(function(){a&&a.destroy()})),r.on("config",(function(t){if(!a)return;const i=m(t,"data.metadata",{});if(!i.media_id)return;const o=m(a,"metadata.media_id");if(o&&i.media_id==o)return;const s=m(e,"analytics",{});a.put(i),a.put(s);const u=m(e,"metadata.live_start_time",e.live)?N:b;a.put({video_type:u,source:e.source||S()||""}),n.ticker=e.live?{ticks:0,last_tracked_ts:Date.now(),kind:"live"}:{last_idx:0,segment_duration:0,breakpoints:[],kind:"vod"},n.ended=!1,r.emit(k)}));let s=0;r.on("playing",(function(){if(!a)return;if(s||function(e,t){return e.metadata.media_id&&e.metadata.media_id==t.last_media_id}(a,n))return;a.put({muted:r.muted});const e=L(r);if(e)return s=Promise.resolve(e).then((function(){n.last_media_id=a.metadata.media_id,r.emit(g),s=0})).catch((function(){s=0}));n.last_media_id=a.metadata.media_id,r.emit(g)})),r.on("timeupdate",(function(){var t;a&&(s||L(r)||n.ended||(!e.live&&r.currentTime+.25>=r.duration&&x(r,n.ticker,!0),(t=i).locked||(t.locked=setTimeout((function(){return t.task(),function(e){return e.locked=void 0,e}(t)}),t.ttl))))})),r.on("seeked",(function(){a&&n.ticker&&"vod"==n.ticker.kind&&function(e,t){R(e,t),t.last_idx=A(e,t)}(r,n.ticker)})),r.on("ended",(function(){a&&function(e,t){t.ended||(t.ended=!0,x(e,t.ticker))}(r,n)}))}}).pluginName="analytics",O);return function(e,t){if("object"==typeof exports&&"undefined"!=typeof module)return t;if(null===document.currentScript)return t;"flowplayer"in e||(e.flowplayer={extensions:[]});const r=e.flowplayer;return"function"==typeof r?(r(t),t):(Array.isArray(r.extensions)||(r.extensions=[]),~r.extensions.indexOf(t)||r.extensions.push(t),t)}("undefined"!=typeof window?window:void 0!==v?v:{},I)}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).flowplayer=e.flowplayer||{},e.flowplayer.analytics=t())}(this,(function(){"use strict";const e=(...e)=>e.reduce((e,t)=>Object.assign(Object.assign({},e),t),{}),t=(e,t)=>{const r=e.lastIndexOf(t);return~r&&e.splice(r,1),e};class RequestQueue{static of(){return new RequestQueue}static is_empty(e){return 0==e.pending.length}static is_high_water(e){return e.open.length==RequestQueue.MAX_OPEN_REQUESTS}static maybe_spawn_req(e){if(RequestQueue.is_empty(e))return e;if(RequestQueue.is_high_water(e))return e;try{const t=RequestQueue.lpop(e);t&&RequestQueue.request(e,t)}catch(e){}}static increment_failures(e){return e.stats.failures++,e.stats.failures>RequestQueue.MAX_FAILURE_COUNT&&(e.stats.ttl=Date.now()+RequestQueue.REQUEST_TTL_MS),e}static handle_error(e,t){RequestQueue.rm(e,t),RequestQueue.increment_failures(e)}static request(e,[t,r,n]){if(Date.now()<e.stats.ttl)return;const i=new XMLHttpRequest;e.open.push(i),i.timeout=RequestQueue.REQUEST_TIMEOUT_MS,i.ontimeout=function(){RequestQueue.handle_error(e,i)},i.onerror=function(t){RequestQueue.handle_error(e,i)},i.onreadystatechange=function(){i.readyState==XMLHttpRequest.DONE&&RequestQueue.rm(e,i),Math.floor(i.status/100)},i.onload=function(){RequestQueue.rm(e,i),e.stats.failures&&e.stats.failures--},i.open(r,t),i.setRequestHeader("Content-Type","text/plain;charset=UTF-8");try{i.send(JSON.stringify(n))}catch(e){}}static rpush(e,...t){return t.forEach(t=>{e.pending.length>=RequestQueue.MAX_PENDING||(e.pending.push(t),RequestQueue.maybe_spawn_req(e))}),e}static lpop(e){return e.pending.shift()}static rm(e,r){return t(e.open,r),e}constructor(){this.pending=[],this.open=[],this.stats={failures:0,ttl:0}}}RequestQueue.MAX_OPEN_REQUESTS=3,RequestQueue.MAX_PENDING=5,RequestQueue.REQUEST_TIMEOUT_MS=4e3,RequestQueue.REQUEST_TTL_MS=5e3,RequestQueue.MAX_FAILURE_COUNT=3;var r=RequestQueue.of();const n=/:([a-zA-Z_]+)/g;class Log{static prepare(e,t){const r=document.createEvent("Event");return r.initEvent(e,!1,!0),r.ns=e,r.data=t,r}static of(e){return new Log(e)}constructor(e){this.emitter=e}info(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.INFO,e))}error(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.ERROR,e))}warn(e){this.emitter.dispatchEvent(Log.prepare(Log.NAMESPACE.WARN,e))}}var i,o;Log.NAMESPACE={INFO:"tracker:info",ERROR:"tracker:err",WARN:"tracker:warn"},function(e){e.POST="POST",e.PUT="PUT",e.GET="GET"}(i||(i={}));class Tracker{static of(e,t){return new Tracker(e,t)}static ensure_required_keys(e,t){return e.required_keys.filter(e=>!(e in t))}static pluck_valid_keys(t,r){return((t,...r)=>Object.keys(t).filter(e=>~r.indexOf(e)).reduce((r,n)=>e(r,{[n]:t[n]}),{}))(r,...t.valid_keys)}static merge_metadata(t,r={}){return t.metadata=Tracker.pluck_valid_keys(t,e(t.metadata,r)),t}static assert_emitter_api(e){if("function"!=typeof(e||{}).addEventListener)throw new Error("Tracker() received an emitter that does not implement the addEventListener method");if("function"!=typeof(e||{}).removeEventListener)throw new Error("Tracker() received an emitter that does not implement the removeEventListener method")}static create_listener(e,t,r){var n;e.listeners.push([t,r]),null===(n=e.emitter)||void 0===n||n.addEventListener(t,r)}constructor(t,i={}){const o=this;if(this.emitter=t,this.url=i.url,this.log=Log.of(this.emitter),this.verb=i.verb,this.metadata=e({},i.metadata||{}),this.rq=i.rq||r,this.events=i.events||[],this.required_keys=i.required_keys||[],this.optional_keys=i.optional_keys||[],this.listeners=[],this.valid_keys=this.required_keys.slice(0).concat(this.optional_keys),Tracker.assert_emitter_api(this.emitter),void 0===Tracker.verb[this.verb])throw new Error(`invalid HTTP verb[${this.verb}] passed`);if("string"!=typeof this.url)throw new Error(`invalid API url[${this.url}] passed`);Tracker.TRACKERS.push(this),o.events.forEach(t=>{Tracker.create_listener(this,t,(r={})=>{const i=e(o.metadata,{event_type:t},r.data||r),a=function(e,t){return e.replace(n,r=>{const n=r.slice(1,r.length);return n in t?t[n].toString():(console.warn(`\n preparing url[${e}] failed\n\n parameter[${n}] not detected in params:\n\n ${JSON.stringify(t,null,2)}\n `),r)})}(o.url,i),s=Tracker.pluck_valid_keys(o,i),u=Tracker.ensure_required_keys(o,s);if(u.length)return o.log.error(`Tracker.validate_metadata() failed for\n Event[${t}]\n missing keys: ${u}\n payload:\n ${JSON.stringify(s,null,2)}`);this.rq&&RequestQueue.rpush(this.rq,[a,this.verb,s])})})}destroy(){this.listeners.forEach(([e,t])=>{var r;return null===(r=this.emitter)||void 0===r?void 0:r.removeEventListener(e,t)}),delete this.rq,delete this.emitter,t(Tracker.TRACKERS,this)}put(e={}){return Tracker.merge_metadata(this,e),this}}Tracker.TRACKERS=[],Tracker.QUEUE=r,Tracker.verb=i,function(e){e[e.ADS=2]="ADS",e[e.ANALYTICS=4]="ANALYTICS",e[e.NO_METERING=8]="NO_METERING",e[e.DEVELOPER_PLAN=16]="DEVELOPER_PLAN",e[e.WOWZA_VIDEO=32]="WOWZA_VIDEO"}(o||(o={}));const a=["localhost","127.0.0.1","0.0.0.0","s.codepen.io","cdpn.io","try.flowplayer.com"];function s(e,t){return!!~a.indexOf(e)||e.indexOf(t)===e.length-t.length}s.check_whitelist=function(e){return!!~a.indexOf(e)};function u(e){this.message=e}u.prototype=new Error,u.prototype.name="InvalidCharacterError";var c="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new u("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,n,i=0,o=0,a="";n=t.charAt(o++);~n&&(r=i%4?64*r+n:n,i++%4)?a+=String.fromCharCode(255&r>>(-2*i&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return a};var d=function(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(c(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return c(t)}};function l(e){this.message=e}l.prototype=new Error,l.prototype.name="InvalidTokenError";var f=function(e,t){if("string"!=typeof e)throw new l("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(d(e.split(".")[r]))}catch(e){throw new l("Invalid token specified: "+e.message)}};f.InvalidTokenError=l;const p="production";function _(e,t){const r={valid_jwt:!1,raw:"",data:{acl:0},exp:0};let n={c:"{}",exp:0};t=t||{};try{n=f(e),r.valid_jwt=!0}catch(e){}return r.raw=e,r.data=JSON.parse(n.c),r.exp=n.exp,t.require_valid_token&&_.validate(r),r}function h(e){return{grant:e,is_granted:t=>(e&t)===t}}function m(e,t,r){const n=function(e){return Array.isArray(e)?e.slice(0):e.split(".")}(t);for(;n.length;){if(null==e)return r;const t=n.shift();if("string"!=typeof t)return r;e=e[t]}return null==e?r:e}_.validate=function(e){if("string"==typeof e&&(e=_(e)),!e||!e.raw){if(s.check_whitelist(window.location.hostname)||"dev"===p.toString())return!0;throw new Error("No token provided in configuration")}if(!e.valid_jwt)throw new Error("Invalid token provided");const t=window.location.hostname,r=s.bind(null,t);if("dev"!==p.toString()&&e.data.domain&&e.data.domain.length&&!e.data.domain.some(r))throw new Error("Domain not allowed");if("dev"!==p.toString()&&1e3*e.exp-Date.now()<0)throw new Error("Expired token");return!0},_.id=function(e){if(e)return"string"==typeof e&&(e=_(e)),e.data.id},h.of=h,h.from_token=function(e){const t=_(e,{require_valid_token:!0});return h.of(t.data.acl)},h.permissions=o;var v="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};var y="ping",k="display",g="view";const w=["sitegroup_id","session_id","media_id","site_id","player_id","video_type"],E=["created","position"],T=["player_version","created","source","category","category_id","autoplay","muted","customer_user_id"];function R(e,t){return e.duration/1===e.duration&&Object.assign(t,function(e){const t=e/100;return{segment_duration:t,breakpoints:Array(...Array(100)).map((function(e,r){return Math.floor(r*t*1e3)/1e3}))}}(e.duration))}function q(e,t,r){if(!t.segment_duration&&!R(e,t))return;const n=function(e,t,r){const n=t.last_idx,i=r?99:A(e,t);return t.last_idx=i,i<=n?[]:t.breakpoints.slice(n,99==i?100:i).map((function(e){return t.breakpoints.indexOf(e)}))}(e,t,r);0!=n.length&&e.emit(y,{position:n})}function A(e,t){return Math.min(Math.floor(e.currentTime/t.segment_duration),99)}function S(){try{const e=window.location!==window.parent.location?document.referrer:document.location.href;return"string"==typeof e&&e.slice(0,200)}catch(e){return!1}}var O;const b="vod",N="live",Q=[k,y,g];function x(e,t,r){switch(null==t?void 0:t.kind){case"live":return function(e,t){const r=Date.now();r-t.last_tracked_ts<6e4||(t.last_tracked_ts=r,++t.ticks,e.emit(y,{position:60*t.ticks}))}(e,t);case"vod":return q(e,t,"boolean"==typeof r&&r)}}function L(e){const t=e.ads;return void 0!==t&&(void 0!==t.schedule&&("function"==typeof t.hasPreroll&&(t.currentRequests?t.currentRequests:!!t.adPlaying||!(!t.hasPreroll()||0!=t.nextIndex))))}const I=((O=class Analytics{init(e,t,r){if(!h.from_token(e.token||"").is_granted(h.permissions.ANALYTICS))return;if(r.hasState("consent-no-tracking"))return;if(r.analytics)return;const n=r.analytics={ticker:void 0,last_media_id:"",ended:!1},i={locked:void 0,ttl:6e3,task:()=>{x(r,n.ticker)}};const o={session_id:r.deviceId(),autoplay:r.autoplay,muted:r.muted,player_id:e.player_id,customer_user_id:e.customer_user_id,player_version:"3.28.0-rc.1"},a=Tracker.of(r,{verb:Tracker.verb.POST,url:"https://ptm.flowplayer.com/:video_type/:sitegroup_id/:event_type",events:Q,required_keys:w,optional_keys:T.concat(E).slice(0),metadata:o});r.on("reap",(function(){a&&a.destroy()})),r.on("config",(function(t){if(!a)return;const i=m(t,"data.metadata",{});if(!i.media_id)return;const o=m(a,"metadata.media_id");if(o&&i.media_id==o)return;const s=m(e,"analytics",{});a.put(i),a.put(s);const u=m(e,"metadata.live_start_time",e.live)?N:b;a.put({video_type:u,source:e.source||S()||""}),n.ticker=e.live?{ticks:0,last_tracked_ts:Date.now(),kind:"live"}:{last_idx:0,segment_duration:0,breakpoints:[],kind:"vod"},n.ended=!1,r.emit(k)}));let s=0;r.on("playing",(function(){if(!a)return;if(s||function(e,t){return e.metadata.media_id&&e.metadata.media_id==t.last_media_id}(a,n))return;a.put({muted:r.muted});const e=L(r);if(e)return s=Promise.resolve(e).then((function(){n.last_media_id=a.metadata.media_id,r.emit(g),s=0})).catch((function(){s=0}));n.last_media_id=a.metadata.media_id,r.emit(g)})),r.on("timeupdate",(function(){var t;a&&(s||L(r)||n.ended||(!e.live&&r.currentTime+.25>=r.duration&&x(r,n.ticker,!0),(t=i).locked||(t.locked=setTimeout((function(){return t.task(),function(e){return e.locked=void 0,e}(t)}),t.ttl))))})),r.on("seeked",(function(){a&&n.ticker&&"vod"==n.ticker.kind&&function(e,t){R(e,t),t.last_idx=A(e,t)}(r,n.ticker)})),r.on("ended",(function(){a&&function(e,t){t.ended||(t.ended=!0,x(e,t.ticker))}(r,n)}))}}).pluginName="analytics",O);return function(e,t){if("object"==typeof exports&&"undefined"!=typeof module)return t;if(null===document.currentScript)return t;"flowplayer"in e||(e.flowplayer={extensions:[]});const r=e.flowplayer;return"function"==typeof r?(r(t),t):(Array.isArray(r.extensions)||(r.extensions=[]),~r.extensions.indexOf(t)||r.extensions.push(t),t)}("undefined"!=typeof window?window:void 0!==v?v:{},I)}));