UNPKG

@types/jwplayer

Version:
1,713 lines (1,527 loc) 43.7 kB
// JW Player is the leading HTML5 & Flash video player, optimized for mobile and the desktop. Easy enough for beginners, advanced enough for pros. type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]>; }; declare namespace jwplayer { interface Version { version: string; major: number; minor: number; } interface Browser { androidNative: boolean; chrome: boolean; edge: boolean; facebook: boolean; firefox: boolean; ie: boolean; msie: boolean; safari: boolean; version: Version; } interface OS { android: boolean; iOS: boolean; iPad: boolean; iPhone: boolean; mac: boolean; mobile: boolean; tizen: boolean; tizenApp: boolean; version: Version; windows: boolean; } interface Features { backgroundLoading: boolean; flash: boolean; flashVersion: number; iframe: boolean; passiveEvents: boolean; } interface Environment { Browser: Browser; OS: OS; Features: Features; } interface Provider { name: "flash_adaptive" | "flash_video" | "flash_sound" | "hlsjs" | "html5" | "shaka"; } interface AbsolutePositionReadyParam { ready: boolean; startDateTime: number; type: "absolutePositionReady"; } interface AdProgressParam { client: "vast" | "googima"; creativetype: string; tag: string; } interface AdCompanionsParam { companions: any[]; tag: string; } interface AdErrorParam { message: string; tag: string; } interface AdRequestParam { adposition: "pre" | "mid" | "post"; client: "vast" | "googima"; offset: "pre" | "mid" | "post"; tag: string; } interface AdImpressionParam { adposition: "pre" | "mid" | "post"; adsystem: string; adtitle: string; clickThroughUrl: string; client: "vast" | "googima"; creativetype: string; linear: string; mediafile: any; tag: string; vastversion: number; wrapper: any[]; } interface AdScheduleParam { tag: string; client: string; adbreaks: object[]; } interface AdStartedParam { creativetype: string; tag: string; } interface AdPlayParam { creativetype: string; newstate: string; oldstate: string; tag: string; } interface AutostartNotAllowedParam { code: number; error: Error; reason: string; type: "autostartNotAllowed"; } interface BufferParam { newstate: "buffering"; oldstate: PlayState; reason: "loading" | "complete" | "stalled" | "error"; type: "buffer"; } interface BufferChangeParam { duration: number; bufferPercent: number; position: number; currentTime: number; seekRange: SeekRange; type: "bufferChange"; } interface AdTimeParam { client: "vast" | "googima"; creativetype: string; duration: number; position: number; sequence: number; tag: string; } interface AudioTracksParam { currentTrack: number; tracks: AudioTrack[]; } interface CaptionsChangedParam { tracks: Caption[]; track: number; type: "captionsChanged"; } interface CaptionsListParam { tracks: Caption[]; } interface Caption { id: number | string; label: string; language?: string; } interface AudioTrackChangedParam { currentTrack: number; } interface Attribute { name: string; value: any; } interface Meta { type: "meta"; } interface MetadataCueParsed { type: "metadataCueParsed"; } interface MetaDateRange { metadataType: "date-range"; metadataTime: number; metadata: DateRangeMetaData; } interface DateRangeMetaData { attributes: Attribute[]; content: string; duration: number; end: number; endDate: string; start: number; startDate: string; tag: "EXT-X-DATERANGE"; } interface MetaDiscontinuity { metadataType: "discontinuity"; metadataTime: number; metadata: DiscontinuityMetaData; } interface DiscontinuityMetaData { metadataType: "discontinuity"; discontinuitySequence: number; end: number; PTS: number; start: number; tag: string; } interface MetaEMSG { metadataType: "emsg"; metadataTime: number; metadata: EMSGMetaData; } interface EMSGMetaData { duration: number; end: number; id: number; messageData: any[]; metadataType: "emsg"; presentationTimeOffset: number; start: number; schemeIdUri: string; timescale: number; } interface MetaID3 { metadataType: "id3"; metadataTime: number; metadata: Id3MetaData; } interface Id3MetaData { [tag: string]: string; } interface MetaMedia { metadataType: "media"; duration: number; height: number; seekRange: SeekRange; width: number; } interface MetaProgramDateTime { metadataType: "program-date-time"; metadataTime: number; programDateTime: string; metadata: ProgramDateTimeMetaData; } interface ProgramDateTimeMetaData { end: number; programDateTime: string; start: number; } interface MetaSCTE35 { metadataType: "scte-35"; metadataTime: number; metadata: SCTE35MetaData; } interface SCTE35MetaData { content: string; end: number; start: number; tag: "EXT-X-CUE-OUT" | "EXT-X-CUE-IN"; } type MetaData = | DateRangeMetaData | DiscontinuityMetaData | EMSGMetaData | Id3MetaData | ProgramDateTimeMetaData | SCTE35MetaData; interface MetaUnknown { metadataType: "unknown"; } type MetadataParam = | (MetaDateRange & Meta) | (MetaEMSG & Meta) | (MetaID3 & Meta) | (MetaMedia & Meta) | (MetaProgramDateTime & Meta) | (MetaSCTE35 & Meta) | (MetaUnknown & Meta) | (MetaDiscontinuity & MetadataCueParsed); type MetadataCueParsedParam = | (MetaDateRange & MetadataCueParsed) | (MetaEMSG & MetadataCueParsed) | (MetaID3 & MetadataCueParsed) | (MetaProgramDateTime & MetadataCueParsed) | (MetaSCTE35 & MetadataCueParsed) | (MetaDiscontinuity & MetadataCueParsed); interface CompleteParam { type: "complete"; } interface ControlsParam { controls: boolean; type: "controls"; } interface Error { code: number; message: string; sourceError: object | null; } interface ErrorParam extends Error { type: "error"; } interface FloatParam { floating: boolean; type: "float"; } interface FullscreenParam { fullscreen: boolean; } interface IdleParam { newstate: "idle"; oldstate: PlayState; reason: "complete" | "idle"; type: "idle"; } interface LevelsChangedParam { currentQuality: number; levels: Level[]; type: "levelsChanged"; } interface MuteParam { mute: boolean; type: "mute"; } interface NextClickParam { feedData: object; feedShownId: string; itemsShown: PlaylistItem[]; mode: string; target: PlaylistItem; ui: string; type: "nextClick"; } interface VolumeParam { volume: number; type: "volume"; } type PlayReason = "autostart" | "external" | "interaction" | "playlist" | "related-auto" | "viewable"; type PlayState = "buffering" | "idle" | "paused" | "playing"; interface PauseParam { newstate: PlayState; oldstate: PlayState; pauseReason: PlayReason; reason: string; viewable: 0 | 1; type: "pause"; } interface PlayParam { newstate: PlayState; oldstate: PlayState; playReason: PlayReason; reason: string; viewable: 0 | 1; type: "play"; } interface PlayAttemptFailedParam { code: number; error: Error; item: PlaylistItem; playReason: PlayReason; sourceError: object | null; type: "playAttemptFailed"; } interface PlaylistParam { feedData: object; playlist: PlaylistItem[]; type: "playlist"; } interface PlaylistCompleteParam { type: "playlistComplete"; } interface PlaylistItemParam { index: number; item: PlaylistItem; type: "playlistItem"; } interface ReadyParam { setupTime: number; viewable: 0 | 1; } interface ResizeParam { width: number; height: number; } interface VisualQualityParam extends VisualQuality { level: Level; mode: "auto" | "manual"; reason: "api" | "auto" | "initial choice"; type: "visualQuality"; } interface PlaybackRateChangedParam { playbackRate: number; position: number | undefined; type: "playbackRateChanged"; } interface LevelsParam { currentQuality: number; levels: Level[]; type: "levels"; } interface SeekParam { currentTime: number; duration: number; metadata?: { currentTime?: number; }; offset: number; position: number; seekRange: SeekRange; type: "seek"; } interface SeekRange { end: number; start: number; } interface TimeParam { duration: number; position: number; viewable: 0 | 1; } interface FirstFrameParam { loadTime: number; type: "firstFrame"; } type EventCallback<T> = (param: T) => void; interface Region { x: 0; // x and y will always be 0 according to https://developer.jwplayer.com/jw-player/docs/javascript-api-reference/#jwplayergetsaferegion y: 0; width: number; height: number; } interface AudioTrack { autoselect?: boolean; defaulttrack?: boolean; language: string; name: string; } interface CustomButton { btnClass?: string; id: string; img: string; tooltip: string; } interface CaptionsConfig { color?: string; fontSize?: number; fontFamily?: string; fontOpacity?: number; backgroundColor?: string; backgroundOpacity?: number; edgeStyle?: "none" | "depressed" | "dropshadow" | "raised" | "uniform"; windowColor?: string; windowOpacity?: number; } interface Level { height?: number; index?: number; label: string; width?: number; hlsjsIndex?: number; level_id?: number | string; bitrate?: number; } interface QualityLevel { bitrate?: number; height?: number; index?: number; label: string; width?: number; } interface VisualQuality { level: QualityLevel; mode: "auto" | "manual"; reason: "auto" | "api" | "initial choice"; } type Preload = "metadata" | "auto" | "none"; interface PlaylistItem { adschedule?: Adschedule; allSources?: Source[]; description?: string; duration?: number; file: string; image?: string; images?: Image[]; link?: string; mediaid?: string; minDvrWindow?: number; preload?: Preload; recommendations?: string; sources?: Source[]; // This is a "shortened" version of allSources that only contains one item starttime?: number; tags?: string; title: string; tracks?: Track[]; withCredentials?: boolean; } interface Adschedule { offset: number | string; tag?: string | string[]; type?: "linear" | "nonlinear"; vastxml?: string; } interface Image { src: string; width: number; type: string; } interface Source { default?: boolean; drm?: DRMConfig; file: string; label?: string; liveSyncDuration?: number; mimeType?: string; preload?: Preload; type?: string; } interface Track { default?: boolean; file: string; kind: "captions" | "chapters" | "thumbnails"; label?: string; } type DRMConfig = ClearKeyDRM | FairPlayDRM | PlayReadyDRM | WideWineDRM; interface ClearKeyDRM { key: string; keyId: string; } interface FairPlayDRM { certificateUrl: string; extractContentId?: (initDataUri: string) => string; extractKey?: (ckc: any) => string | Promise<string>; licenseRequestFilter?: (request: any) => any; licenseRequestHeaders?: Header[]; licenseRequestMessage?: (message: any) => any; licenseResponseFilter?: (response: any) => any; licenseResponseType?: "arraybuffer" | "blob" | "json" | "text"; processSpcUrl: string | ((...args: any[]) => string); } interface PlayReadyDRM { audioRobustness?: RobustnessLevel; headers?: Header[]; licenseRequestFilter?: (request: any) => any; licenseResponseFilter?: (response: any) => any; url: string; videoRobustness?: RobustnessLevel; } interface WideWineDRM extends PlayReadyDRM { serverCertificateUrl?: string; } type RobustnessLevel = | "HW_SECURE_ALL" | "HW_SECURE_CRYPTO" | "HW_SECURE_DECODE" | "SW_SECURE_CRYPTO" | "SW_SECURE_DECODE"; interface Header { name: string; value: string; } interface CastState { available: boolean; active: boolean; deviceName: string; } interface CastParam extends CastState { type: "cast"; } interface ViewableParam { viewable: 0 | 1; type: "viewable"; } interface WarningParam { code: number; key?: string; sourceError: object | null; type: "warning"; } interface GaConfig { label?: keyof PlaylistItem; sendEnhancedEvents?: boolean; trackerName?: string; useUniversalAnalytics?: boolean; } interface IntlConfig { advertising: IntlAdvertising; airplay: string; audioTracks: string; auto: string; buffer: string; captionsStyles: IntlCaptionsStyles; cast: string; cc: string; close: string; displayHeading?: string; errors: IntlErrors; exitFullscreen: string; fullscreen: string; hd: string; liveBroadcast: string; logo: string; mute: string; next: string; nextUp: string; notLive: string; off: string; pause: string; pipIcon: string; play: string; playback: string; playbackRates: string; player: string; playlist: string; poweredBy: string; prev: string; related: IntlRelated; replay: string; rewind: string; settings: string; sharing: IntlSharing; shortcuts: IntlShortcuts; slider: string; stop: string; unmute: string; videoInfo: string; volume: string; volumeSlider: string; } interface IntlAdvertising { admessage: string; cuetext: string; loadingAd: string; podmessage: string; skipmessage: string; skiptext: string; } interface IntlCaptionsStyles { backgroundColor: string; backgroundOpacity: string; black: string; blue: string; characterEdge: string; cyan: string; depressed: string; disabled: string; dropShadow: string; enabled: string; fontColor: string; fontFamily: string; fontOpacity: string; fontSize: string; green: string; magenta: string; none: string; raised: string; red: string; reset: string; subtitleSettings: string; uniform: string; white: string; windowColor: string; windowOpacity: string; yellow: string; } interface IntlErrors { badConnection: string; cantLoadPlayer: string; cantPlayInBrowser: string; cantPlayVideo: string; errorCode: string; liveStreamDown: string; protectedContent: string; technicalError: string; } interface IntlRelated { autoplaymessage: string; heading: string; } interface IntlSharing { copied: string; email: string; embed: string; heading: string; link: string; } interface IntlShortcuts { captionsToggle: string; decreaseVolume: string; fullscreenToggle: string; increaseVolume: string; keyboardShortcuts: string; playPause: string; seekBackward: string; seekForward: string; seekPercent: string; spacebar: string; volumeToggle: string; } interface EventParams { absolutePositionReady: AbsolutePositionReadyParam; adClick: AdProgressParam; adCompanions: AdCompanionsParam; adComplete: AdProgressParam; adSkipped: AdProgressParam; adError: AdErrorParam; adRequest: AdRequestParam; adSchedule: AdScheduleParam; adStarted: AdStartedParam; adImpression: AdImpressionParam; adPlay: AdPlayParam; adPause: AdPlayParam; adTime: AdTimeParam; all: keyof EventParams; autostartNotAllowed: AutostartNotAllowedParam; cast: CastParam; complete: CompleteParam; meta: MetadataParam; metadataCueParsed: MetadataCueParsedParam; audioTracks: AudioTracksParam; audioTrackChanged: AudioTrackChangedParam; firstFrame: FirstFrameParam; buffer: BufferParam; bufferChange: BufferChangeParam; captionsChanged: CaptionsChangedParam; captionsList: CaptionsListParam; controls: ControlsParam; error: ErrorParam; float: FloatParam; fullscreen: FullscreenParam; idle: IdleParam; levelsChanged: LevelsChangedParam; mute: MuteParam; volume: VolumeParam; pause: PauseParam; play: PlayParam; playlist: PlaylistParam; playlistItem: PlaylistItemParam; playlistComplete: PlaylistCompleteParam; ready: ReadyParam; resize: ResizeParam; visualQuality: VisualQualityParam; playbackRateChanged: PlaybackRateChangedParam; levels: LevelsParam; seek: SeekParam; setupError: ErrorParam; time: TimeParam; warning: WarningParam; } type NoParamEvent = | "adBlock" | "beforeComplete" | "beforePlay" | "displayClick" | "remove" | "seeked" | "userActive" | "userInactive"; interface SliderCue { begin: number; cueType: string; text: string; } type JWPlugin = JwpsrvPlugin | RelatedPlugin | SharingPlugin; interface JwpsrvPlugin { addToPlayer(): void; doNotTrackUser(): boolean; getTrackingPixelUrls(): { error?: string; impression: string; }; resizeHandler(): void; trackExternalAPIUsage(): void; } interface RelatedPlugin { close(): void; open(): void; on<TEvent extends keyof RPEventParams>( event: TEvent, callback: EventCallback<RPEventParams[TEvent]>, ): RelatedPlugin; once<TEvent extends keyof RPEventParams>( event: TEvent, callback: EventCallback<RPEventParams[TEvent]>, ): RelatedPlugin; off(event: keyof RPEventParams): RelatedPlugin; } interface RPEventParams { close: RPCloseParam; feedAutoAdvance: RPFeedAutoAdvanceParam; feedClick: RPFeedClickParam; feedShown: RPFeedShownParam; nextUp: RPNextUpParam; open: RPOpenParam; play: RPPlayParam; playlist: RPPlaylistParam; warning: RPWarningParam; } interface RPCloseParam { method: "interaction" | "play"; onclick: "link" | "play"; relatedFile: string; visible: boolean; } interface RPFeedAutoAdvanceParam { feedData: FeedData; feedShownId: string; itemsShown: PlaylistItem[]; mode: string; onclick: "link" | "play"; relatedFile: string; target: PlaylistItem; ui: RelatedDisplayMode; } interface RPFeedClickParam { feedData: FeedData; feedShownId: string; index: number; itemsShown: PlaylistItem[]; mode: string; onclick: "link" | "play"; page: number; reason: "interaction" | "paged"; relatedFile: string; target: PlaylistItem; ui: RelatedDisplayMode; viewable: 0 | 1; } interface RPFeedShownParam { autoTimer: number; feedData: FeedData; feedShownId: string; itemsShown: PlaylistItem[]; mode: string; onclick: "link" | "play"; page: number; reason: "complete" | "interaction" | "inview" | "paged" | "resized"; relatedFile: string; ui: RelatedDisplayMode; viewable: 0 | 1; } interface RPNextUpParam extends PlaylistItem { feedData: FeedData; mode: string; showNextUp: boolean; } interface RPOpenParam { autoplay: boolean; feed: string; feedData: FeedData; items: PlaylistItem[]; method: "complete" | "interaction"; onclick: "link" | "play"; relatedFile: string; visible: boolean; } interface RPPlayParam { auto: boolean; autoplaytimer: number; feedData: FeedData; item: PlaylistItem; method: "auto" | "manual"; onclick: "link" | "play"; position: number; relatedFile: string; } interface RPPlaylistParam { feedData: FeedData; onclick: "link" | "play"; playlist: PlaylistItem[]; } interface RPWarningParam { code: number; key: string; sourceError: object | null; } interface FeedData { description?: string; feedid: string; feed_instance_id: string; kind: string; links: { first: string; last: string; next: string; }; playlist: PlaylistItem[]; title: string; } interface SharingPlugin { close(): void; getHeading(): string; getLink(): string; getShareMethods(): ShareMethod[]; open(): void; on<TEvent extends keyof SPEventParams>( event: TEvent, callback: EventCallback<SPEventParams[TEvent]>, ): SharingPlugin; once<TEvent extends keyof SPEventParams>( event: TEvent, callback: EventCallback<SPEventParams[TEvent]>, ): SharingPlugin; off(event: keyof SPEventParams): SharingPlugin; } interface SPEventParams { close: SPCloseParam; } interface SPClickParam { method: string; } interface SPCloseParam { method: string; visible: boolean; } interface SPOpenParam { method: string; visible: boolean; } interface ShareMethod { displayText?: string; jwsource?: string; label: string; options: { copyText: string; }; src: string; svg?: string; } interface AdvertisingConfig { client: string; outstream?: boolean; adTagParameters?: AdTagParametersConfig; adscheduleid?: string; admessage?: string; allowedOmidVendors?: string[]; autoplayadsmuted?: boolean; bids?: BidsConfig; clearAdsOnComplete?: boolean; companiondiv?: CompanionDivConfig; conditionaladoptout?: boolean; creativeTimeout?: number; cuetext?: string; duration?: number; endstate?: string; forceNonLinearFullSlot?: boolean; freewheel?: FreeWheelConfig; fwassetid?: string; loadVideoTimeout?: number; locale?: string; maxRedirects?: number; omidSupport?: string; ppid?: string; placement?: string; podmessage?: string; preloadAds?: boolean; repeat?: boolean; requestFilter?: (request: { url: string; xhr: XMLHttpRequest }) => XMLHttpRequest; requestTimeout?: number; rules?: RulesConfig; schedule?: ScheduleConfig[] | string; skipmessage?: string; skipoffset?: number; skiptext?: string; tag?: string | string[]; trackingFilter?: (url: string) => boolean; truncateMacros?: boolean; vastLoadTimeout?: number; vastxml?: string; vpaidcontrols?: boolean; vpaidmode?: string; withCredentials?: boolean; } interface AdTagParametersConfig { iu?: string; cust_params?: string; sz?: string; tfcd?: 0 | 1; description_url?: string; ppid?: string; ciu_szs?: string; mpt?: string; mpv?: string; ptpl?: number; ptpln?: string; an?: string; ltd?: 0 | 1; rdid?: string; idtype?: "adid" | "afai" | "idfa" | "lgudid" | "msai" | "rida" | "tifa" | "tvOS" | "vaid"; is_lat?: 0 | 1; trt?: 0 | 1 | 2; vconp?: 1 | 2; vpa?: "auto" | "click"; vpmute?: 0 | 1; npa?: 0 | 1; gdpr?: 0 | 1; gdpr_consent?: string; addtl_consent?: string; rdp?: 0 | 1; sid?: 0 | string; wta?: 0 | 1; } interface BidsConfig { bidders: Bidder[]; bidOnBreaks?: number; ortbParams?: OrtbParams; settings: BidsSettings; } interface BidsSettings { consentManagement: ConsentManagement; mediationLayerAdServer: "dfp" | "jwp" | "jwpdfp" | "jwpspotx"; bidTimeout?: number; buckets?: PriceBucket[]; floorPriceCents?: number; floorPriceCurrency?: string; } interface ConsentManagement { gdpr?: GDPR; usp?: USP; } interface GDPR { allowAuctionWithoutConsent?: string; cmpApi?: string; defaultGpdrScope?: boolean; rules?: GDPRRules; timeout?: number; } interface GDPRRules { enforcePurpose?: boolean; enforceVendor?: boolean; purpose?: string; vendorExceptions?: string[]; } interface USP { cmpApi?: string; timeout?: number; } interface PriceBucket { increment?: number; max?: number; min?: number; } interface OrtbParams { plcmt: 1 | 2 | 3 | 4; } // Bidders type Bidder = | JWDemand | Azerion | Criteo | Emodo | EMX | Equativ | Imds | IndexExchange | Kargo | Magnite | MediaNet | OpenX | PubMatic | Sonobi | Sovrn | SpotX | MediaGrid | Unruly | VideoByte | Xandr | YahooSSP; interface JWDemand { name: "jwdemand"; placementId: number; publisherId: string; propertyId: string; } interface Azerion { name: "improvedigital"; placementId: number; } interface Criteo { name: "criteo"; networkId: number; networkdId: number; } interface Emodo { name: "Axonix"; supplyId: string; } interface EMX { name: "EMX"; id: string; pubid?: string; } interface Equativ { name: "SmartAdServer"; formatId: number; networkId: number; pageId: number; siteId: string | number; } interface Imds { name: "SynacorMedia"; id: string; pubid: string; } interface IndexExchange { name: "IndexExchange"; id: string; optionalParams?: BiddersOptionalParams; } interface Kargo { name: "kargo"; placementId: string; } interface Magnite { name: "Rubicon"; pubid: string; siteId: string; zoneId: string; } interface MediaNet { name: "MediaNet"; id: string; pubid: string; } interface OpenX { name: "OpenX"; delDomain: string; id: string; } interface PubMatic { name: "PubMatic"; pubid: string; id: string; optionalParams?: BiddersOptionalParams; } interface Sonobi { name: "Sonobi"; id: string; } interface Sovrn { name: "Sovrn"; tagid: string; } interface SpotX { name: "SpotX"; id: string; optionalParams?: BiddersOptionalParams; } interface MediaGrid { name: "MediaGrid"; id: string; pubid?: string; } interface Unruly { name: "Unruly"; pubid: string; } interface VideoByte { name: "VideoByte"; pubid: string; nid?: string; placementId?: string; } interface Xandr { name: "AppNexus"; id: string; invCode?: string; member?: string; publisherId?: string; optionalParams?: BiddersOptionalParams; } interface YahooSSP { name: "YahooSSP"; pubid: string; id: string; siteId: string; } interface BiddersOptionalParams { custom?: { [key: string]: string; }; keywords?: { [key: string]: string; }; no_vpaid_ads?: boolean; passFloorPrice?: boolean; } interface CompanionDivConfig { height?: number; id: string; width?: number; } interface FreeWheelConfig { fwassetid: string; adManagerURL?: string; custom?: { [key: string]: string; }; networkid?: number; profileid?: string; sectionid?: string; serverid?: string; } interface RulesConfig { deferAds?: Record<string, never>; frequency?: number; startOn?: number; startOnSeek?: "none" | "pre"; timeBetweenAds?: number; } interface ScheduleConfig extends Adschedule { custparams?: { [key: string]: string; }; pod: any[]; } interface AutoPauseConfig { pauseAds?: boolean; viewability: boolean; } interface CastConfig { appid?: string; interceptCast?: boolean; } interface FloatingConfig { dismissible?: boolean; mode?: "always" | "never" | "notVisible"; showTitle?: boolean; } interface LogoConfig { file: string; hide?: boolean; link?: string; margin?: number; position?: "bottom-left" | "bottom-right" | "control-bar" | "top-left" | "top-right"; } interface RelatedConfig { autoplaymessage?: string; autoplaytimer: number; disableRelated: boolean; displayMode?: RelatedDisplayMode; file?: string; onclick?: "link" | "play"; oncomplete: "autoplay" | "hide" | "none" | "show"; selector?: string; shouldAutoAdvance: boolean; showButton: boolean; } type RelatedSetupConfig = Partial<RelatedConfig>; type RelatedDisplayMode = "none" | "overlay" | "shelf" | "shelfWidget"; interface SharingConfig { code?: string; heading?: string; link?: string; sites?: SharingSite[]; } type SharingSite = "email" | "facebook" | "linkedin" | "pinterest" | "reddit" | "tumlbr" | "twitter"; interface SkinConfig { controlbar?: { background?: string; icons?: string; iconsActive?: string; text?: string; }; menus?: { background?: string; text?: string; textActive?: string; }; name?: string; timeslider?: { progress?: string; rail?: string; }; tooltips?: { background?: string; text?: string; }; url?: string; } interface TimeSliderConfig { legacy?: boolean; preferChapterImages?: boolean; showKnob?: boolean; showAdMarkers?: boolean; } type StreamType = "VOD" | "Live" | "DVR"; type Stretching = "exactfit" | "fill" | "none" | "uniform"; interface SetupConfig { aboutlink?: string; abouttext?: string; advertising?: AdvertisingConfig; allowFullscreen?: boolean; aspectratio?: string; autoPause?: Partial<AutoPauseConfig>; autostart?: boolean | "viewable"; base?: string; captions?: CaptionsConfig; cast?: CastConfig; controls?: boolean; defaultBandwidthEstimate?: number; displaydescription?: boolean; displayHeading?: boolean; displayPlaybackLabel?: boolean; displaytitle?: boolean; doNotSaveCookies?: boolean; floating?: FloatingConfig; ga?: GaConfig; generateSEOMetadata?: boolean; height?: number | string; hlsjsdefault?: boolean; horizontalVolumeSlider?: boolean; intl?: { [lang: string]: RecursivePartial<IntlConfig>; }; liveSyncDuration?: number; liveTimeout?: number; loadAndParseHlsMetadata?: boolean; logo?: LogoConfig; mute?: boolean; nextUpDisplay?: boolean; nextupoffset?: number | string; pipIcon?: "disabled" | "enabled"; playbackRateControls?: boolean; playbackRates?: number[]; playlist?: PlaylistItem[] | string; playlistIndex?: number; plugins?: { [pluginUrl: string]: any; }; preload?: Preload; qualityLabels?: { [bandwidth: number]: string; }; related?: RelatedSetupConfig; repeat?: boolean; renderCaptionsNatively?: boolean; sharing?: SharingConfig; skin?: SkinConfig; stretching?: Stretching; timeSlider?: TimeSliderConfig; width?: number | string; } interface PlayerConfig extends SetupConfig { activeTab: boolean; allowFullscreen: boolean; altText: string; audioMode: boolean; autoPause: AutoPauseConfig; autoStart: boolean; autoplaytimer?: number; autostartMuted?: boolean; backgroundLoading: boolean; bandwidthEstimate: number; base: string; bitrateSelection?: number; buffer: number; captions: CaptionsConfig; captionsIndex: number; captionsList: Caption[]; captionsTrack?: any; castActive?: boolean; castAvailable: boolean; castState?: CastState; containerHeight: number; containerWidth: number; controls: boolean; controlsEnabled: boolean; cues: SliderCue[]; currentTime: number; customButtons?: CustomButton[]; defaultPlaybackRate: number; displaydescription: boolean; displayPlaybackLabel: boolean; displaytitle: boolean; duration: number; dvrSeekLimit: number; edition: string; enableShortcuts: boolean; error?: any; errorEvent?: Error; feedData?: FeedData; file?: string; fullscreen: boolean; generateSEOMetadata: boolean; height: number | string; hideAdsControls?: boolean; horizontalVolumeSlider: boolean; id: string; iFrame: boolean; image?: string; include_compatibility_script?: string; inDom: boolean; instreamMode: boolean; intersectionRatio: number; isAudioFile: boolean; item: number; itemMeta: MetaData; itemReady: boolean; jwStart: number; key: string; language: string; localization: IntlConfig; logoWidth: number; loop: boolean; mediaContainer: HTMLDivElement; mediaElement: HTMLVideoElement; mediaid?: string; minDvrWindow: number; mute: boolean; nextUp?: PlaylistItem; nextUpDisplay: boolean; ph?: number; pid?: string; playbackRate: number; playbackRateControls: boolean; playbackRates: number[]; playlistItem?: PlaylistItem; playOnViewable: boolean; playReason?: PlayReason; playRejected: boolean; plugins: { [pluginUrl: string]: any; // Appears to contain config-data for plugins }; position: number; preload: Preload; provider: Provider; qualityLabel?: string; recItems?: PlaylistItem[]; related: RelatedConfig; renderCaptionsNatively: boolean; repeat: boolean; scrubbing: boolean; setupConfig: SetupConfig; sharing?: SharingConfig; skin: SkinConfig; state: PlayState; streamType: StreamType; stretching: Stretching; supportsPlaybackRate: boolean; touchMode: boolean; viewable: 0 | 1; visibility: 0 | 1; volume: number; width: number | string; } interface JWPlayer { addButton(icon: string, label: string, handler: () => void, id: string, className?: string): JWPlayer; addCues(cues: SliderCue[]): JWPlayer; addPlugin(name: string, pluginInstance: any): void; castToggle(): JWPlayer; getAdBlock(): boolean; getAudioTracks(): AudioTrack[]; getAbsolutePosition(): string | null; getBuffer(): number; getCaptionsList(): Caption[]; getConfig(): PlayerConfig; getContainer(): HTMLElement; getContainerPercentViewable(): number; getContainerViewable(): 0 | 1; getControls(): boolean; getCues(): SliderCue[]; getCurrentAudioTrack(): number; getCurrentCaptions(): number; getCurrentQuality(): number; getCurrentTime(): number; getDuration(): number; getEnvironment(): Environment; getFloating(): boolean; getFullscreen(): boolean; getHeight(): number; getMute(): boolean; // eslint-disable-next-line @typescript-eslint/no-invalid-void-type getPercentViewable(): number | void; getPlaybackRate(): number; getPlaylist(): PlaylistItem[]; getPlaylistIndex(): number; getPlaylistItem(index?: number): PlaylistItem; getPlaylistItemPromise(index: number): Promise<PlaylistItem>; getPlugin(name: string): JWPlugin; getPosition(): number; getProvider(): Provider; getQualityLevels(): QualityLevel[]; getRenderingMode(): string; getSafeRegion(): Region; getState(): PlayState; getStretching(): Stretching; getViewable(): 0 | 1; getVisualQuality(): VisualQuality | undefined; getVolume(): number; getWidth(): number; load(playlist: PlaylistItem[] | string): JWPlayer; next(): JWPlayer; on<TEvent extends keyof EventParams>(event: TEvent, callback: EventCallback<EventParams[TEvent]>): JWPlayer; on(event: NoParamEvent, callback: () => void): JWPlayer; once<TEvent extends keyof EventParams>(event: TEvent, callback: EventCallback<EventParams[TEvent]>): JWPlayer; once(event: NoParamEvent, callback: () => void): JWPlayer; off(event: keyof EventParams | NoParamEvent): JWPlayer; off(event: NoParamEvent, callback: () => void): JWPlayer; off<TEvent extends keyof EventParams>(event: TEvent, callback: EventCallback<EventParams[TEvent]>): JWPlayer; trigger<TEvent extends keyof EventParams>(event: TEvent, args: EventParams[TEvent]): JWPlayer; trigger(event: NoParamEvent): JWPlayer; pause(state?: boolean): JWPlayer; pauseAd(toggle: boolean): void; play(state?: boolean): JWPlayer; playAd(tag: string | string[]): void; playlistItem(index: number): JWPlayer; playlistNext(): JWPlayer; playlistPrev(): JWPlayer; playToggle(): JWPlayer; registerPlugin( pluginName: string, playerMinimumVersion: string, pluginClassOrFunction: (playerInstance: JWPlayer, pluginConfig: any, pluginDiv: HTMLElement) => void, ): void; remove(): JWPlayer; removeButton(id: string): JWPlayer; removePlaylistItemCallback(): void; resize(width: number | string, height: number): JWPlayer; seek(position: number): JWPlayer; setAllowFullscreen(allowFullscreen?: boolean): JWPlayer; setCaptions(styles: CaptionsConfig): JWPlayer; setConfig(config: SetupConfig): JWPlayer; setControls(state?: boolean): JWPlayer; setCues(cues: SliderCue[]): JWPlayer; setCurrentAudioTrack(index: number): void; setCurrentCaptions(index: number): void; setCurrentQuality(index: number): void; setFloating(shouldFloat?: boolean): void; setFullscreen(state: boolean): void; setMute(state?: boolean): JWPlayer; setPip(state?: boolean): JWPlayer; setPlaybackRate(rate?: number): JWPlayer; setPlaylistItemCallback( // eslint-disable-next-line @typescript-eslint/no-invalid-void-type callback: null | ((item: PlaylistItem, index: number) => void | Promise<PlaylistItem>), ): void; setup(options: SetupConfig): JWPlayer; setVolume(volume: number): JWPlayer; skipAd(): void; stop(): JWPlayer; stopCasting(): JWPlayer; } } interface JWPlayerStatic { (query?: string | number | Element): jwplayer.JWPlayer; key: string; version: string; } declare const jwplayer: JWPlayerStatic;