feat: add more type-definitions for youtube-player

Co-authored-by: ArjixWasTaken <53124886+ArjixWasTaken@users.noreply.github.com>
This commit is contained in:
JellyBrick
2023-09-04 12:25:43 +09:00
parent d811ebadb4
commit 2eaa660a6d
3 changed files with 147 additions and 71 deletions

View File

@ -0,0 +1,15 @@
export interface PlayerAPIEvents {
videodatachange: {
value: Record<string, unknown> & {
videoId: string
title: string
author: string
playlistId: string
isUpcoming: boolean
loading: boolean
lengthSeconds: number
}
} & ({ name: 'dataloaded' } | { name: 'dataupdated ' })
}

25
types/video-details.ts Normal file
View File

@ -0,0 +1,25 @@
export interface VideoDetails {
video_id: string;
author: string;
title: string;
isPlayable: boolean;
errorCode: null;
video_quality: string;
video_quality_features: unknown[];
list: string;
backgroundable: boolean;
eventId: string;
cpn: string;
isLive: boolean;
isWindowedLive: boolean;
isManifestless: boolean;
allowLiveDvr: boolean;
isListed: boolean;
isMultiChannelAudio: boolean;
hasProgressBarBoundaries: boolean;
isPremiere: boolean;
itct: string;
progressBarStartPositionUtcTimeMillis: number | null;
progressBarEndPositionUtcTimeMillis: number | null;
paidContentOverlayDurationMs: number;
}

View File

@ -1,12 +1,14 @@
// TODO: fully type definitions for youtube-player // TODO: fully type definitions for youtube-player
import { VideoDetails } from './video-details';
import { GetPlayerResponse } from './get-player-response'; import { GetPlayerResponse } from './get-player-response';
import { PlayerAPIEvents } from './player-api-events';
export interface YoutubePlayer { export interface YoutubePlayer {
getInternalApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getInternalApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
cueVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return; cueVideoByPlayerVars: () => void;
loadVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return; loadVideoByPlayerVars: () => void;
preloadVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return; preloadVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAdState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getAdState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
sendAbandonmentPing: <Parameters extends unknown[], Return>(...params: Parameters) => Return; sendAbandonmentPing: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
@ -18,7 +20,7 @@ export interface YoutubePlayer {
seekToStreamTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return; seekToStreamTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
startSeekCsiAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return; startSeekCsiAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStreamTimeOffset: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getStreamTimeOffset: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getVideoData: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoData: () => VideoDetails;
setInlinePreview: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setInlinePreview: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateDownloadState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; updateDownloadState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
queueOfflineAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return; queueOfflineAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
@ -95,82 +97,116 @@ export interface YoutubePlayer {
setGlobalCrop: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setGlobalCrop: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setInternalSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setInternalSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
seekBy: (seconds: number) => void; seekBy: (seconds: number) => void;
showControls: <Parameters extends unknown[], Return>(...params: Parameters) => Return; showControls: () => void;
hideControls: <Parameters extends unknown[], Return>(...params: Parameters) => Return; hideControls: () => void;
cancelPlayback: <Parameters extends unknown[], Return>(...params: Parameters) => Return; cancelPlayback: () => void;
getProgressState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getProgressState: <Return>() => Return;
isInline: <Parameters extends unknown[], Return>(...params: Parameters) => Return; isInline: () => boolean;
setInline: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setInline: (isInline: boolean) => void;
setLoopVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setLoopVideo: (value: boolean) => void;
getLoopVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getLoopVideo: () => boolean;
getVideoContentRect: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoContentRect: <Return>() => Return;
getVideoStats: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoStats: <Return>() => Return;
getStoryboardFormat: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getStoryboardFormat: <Return>() => Return;
toggleFullscreen: <Parameters extends unknown[], Return>(...params: Parameters) => Return; toggleFullscreen: <Return>() => Return;
isFullscreen: <Parameters extends unknown[], Return>(...params: Parameters) => Return; isFullscreen: () => boolean;
getPlayerSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlayerSize: <Return>() => Return;
toggleSubtitles: <Parameters extends unknown[], Return>(...params: Parameters) => Return; toggleSubtitles: () => void;
setCenterCrop: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setCenterCrop: <Parameter>(param: Parameter) => void;
setFauxFullscreen: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setFauxFullscreen: <Parameter>(param: Parameter) => void;
setSizeStyle: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setSizeStyle: <Parameter>(params: Parameter) => void;
handleGlobalKeyDown: <Parameters extends unknown[], Return>(...params: Parameters) => Return; handleGlobalKeyDown: () => void;
handleGlobalKeyUp: <Parameters extends unknown[], Return>(...params: Parameters) => Return; handleGlobalKeyUp: () => void;
wakeUpControls: <Parameters extends unknown[], Return>(...params: Parameters) => Return; wakeUpControls: () => void;
cueVideoById: <Parameters extends unknown[], Return>(...params: Parameters) => Return; cueVideoById: (videoId: string) => void;
loadVideoById: <Parameters extends unknown[], Return>(...params: Parameters) => Return; loadVideoById: (videoId: string) => void;
cueVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return; cueVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
loadVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return; loadVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
playVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; /**
pauseVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; * Note: This doesn't resume playback, it plays from the start.
stopVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; */
clearVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; playVideo: () => void;
getVideoBytesLoaded: <Parameters extends unknown[], Return>(...params: Parameters) => Return; pauseVideo: () => void;
getVideoBytesTotal: <Parameters extends unknown[], Return>(...params: Parameters) => Return; stopVideo: () => void;
getVideoLoadedFraction: <Parameters extends unknown[], Return>(...params: Parameters) => Return; clearVideo: () => void;
getVideoStartBytes: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoBytesLoaded: () => number;
cuePlaylist: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoBytesTotal: () => number;
loadPlaylist: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoLoadedFraction: () => number;
nextVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoStartBytes: () => number;
previousVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; cuePlaylist: () => void;
playVideoAt: <Parameters extends unknown[], Return>(...params: Parameters) => Return; loadPlaylist: () => void;
setShuffle: <Parameters extends unknown[], Return>(...params: Parameters) => Return; nextVideo: () => void;
setLoop: <Parameters extends unknown[], Return>(...params: Parameters) => Return; previousVideo: () => void;
getPlaylist: <Parameters extends unknown[], Return>(...params: Parameters) => Return; playVideoAt: () => void;
getPlaylistIndex: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setShuffle: <Parameter>(param: Parameter) => void;
getPlaylistId: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setLoop: <Parameter>(param: Parameter) => void;
loadModule: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlaylist: <Return extends unknown[]>() => Return;
unloadModule: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlaylistIndex: () => number;
getPlaylistId: () => string | undefined;
loadModule: () => void;
unloadModule: () => void;
setOption: <T>(optionName: string, key: string, value: T) => void; setOption: <T>(optionName: string, key: string, value: T) => void;
getOption: <T>(optionName: string, key: string) => T | null | undefined; getOption: <T>(optionName: string, key: string) => T | null | undefined;
getOptions: () => string[]; getOptions: () => string[];
mute: <Parameters extends unknown[], Return>(...params: Parameters) => Return; mute: () => void;
unMute: <Parameters extends unknown[], Return>(...params: Parameters) => Return; unMute: () => void;
isMuted: <Parameters extends unknown[], Return>(...params: Parameters) => Return; isMuted: () => boolean;
setVolume: <Parameters extends unknown[], Return>(...params: Parameters) => Return; /**
* @param volume 0-100
*/
setVolume: (volume: number) => void;
getVolume: () => number; getVolume: () => number;
seekTo: (seconds: number) => void; seekTo: (seconds: number) => void;
getPlayerMode: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlayerMode: <Return>() => Return;
getPlayerState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlayerState: () => number;
getAvailablePlaybackRates: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getAvailablePlaybackRates: () => number[];
getPlaybackQuality: () => string; getPlaybackQuality: () => string;
setPlaybackQuality: (quality: string) => void; setPlaybackQuality: (quality: string) => void;
getAvailableQualityLevels: () => string[]; getAvailableQualityLevels: () => string[];
getCurrentTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return; /**
getDuration: <Parameters extends unknown[], Return>(...params: Parameters) => Return; * @return float between start and end in seconds
addEventListener: <Parameters extends unknown[], Return>(...params: Parameters) => Return; */
removeEventListener: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getCurrentTime: () => number;
getDebugText: <Parameters extends unknown[], Return>(...params: Parameters) => Return; /**
* @return int song duration in seconds
*/
getDuration: () => number;
addEventListener: <K extends keyof PlayerAPIEvents>(
type: K,
listener: (
this: Document,
name: PlayerAPIEvents[K]['name'],
data: PlayerAPIEvents[K]['value']
) => void,
options?: boolean | AddEventListenerOptions | undefined,
) => void;
removeEventListener: <K extends keyof PlayerAPIEvents>(
type: K,
listener: (
this: Document,
name: PlayerAPIEvents[K]['name'],
data: PlayerAPIEvents[K]['value']
) => void,
options?: boolean | EventListenerOptions | undefined,
) => void;
getDebugText: () => string;
addCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return; addCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
removeCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return; removeCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setSize: (size: { width: number; height: number }) => void;
destroy: <Parameters extends unknown[], Return>(...params: Parameters) => Return; destroy: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getSphericalProperties: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getSphericalProperties: <Return>() => Return;
setSphericalProperties: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setSphericalProperties: <Parameter>(param: Parameter) => void;
mutedAutoplay: <Parameters extends unknown[], Return>(...params: Parameters) => Return; mutedAutoplay: () => void;
getVideoEmbedCode: <Parameters extends unknown[], Return>(...params: Parameters) => Return; /**
getVideoUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return; * @return string HTMLIFrameElement
getMediaReferenceTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return; */
getSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getVideoEmbedCode: () => string;
/**
* @return string full URL of the video (include playlist id)
*/
getVideoUrl: () => string;
getMediaReferenceTime: () => number;
getSize: () => { width: number; height: number };
logImaAdEvent: <Parameters extends unknown[], Return>(...params: Parameters) => Return; logImaAdEvent: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
preloadVideoById: <Parameters extends unknown[], Return>(...params: Parameters) => Return; preloadVideoById: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setAccountLinkState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setAccountLinkState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
@ -178,11 +214,11 @@ export interface YoutubePlayer {
getAvailableQualityData: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getAvailableQualityData: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setCompositeParam: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setCompositeParam: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStatsForNerds: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getStatsForNerds: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
showVideoInfo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; showVideoInfo: () => void;
hideVideoInfo: <Parameters extends unknown[], Return>(...params: Parameters) => Return; hideVideoInfo: () => void;
isVideoInfoVisible: <Parameters extends unknown[], Return>(...params: Parameters) => Return; isVideoInfoVisible: () => boolean;
getPlaybackRate: <Parameters extends unknown[], Return>(...params: Parameters) => Return; getPlaybackRate: () => number;
setPlaybackRate: <Parameters extends unknown[], Return>(...params: Parameters) => Return; setPlaybackRate: (playbackRate: number) => void;
updateFullerscreenEduButtonSubtleModeState: <Parameters extends unknown[], Return>(...params: Parameters) => Return; updateFullerscreenEduButtonSubtleModeState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateFullerscreenEduButtonVisibility: <Parameters extends unknown[], Return>(...params: Parameters) => Return; updateFullerscreenEduButtonVisibility: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
addEmbedsConversionTrackingParams: <Parameters extends unknown[], Return>(...params: Parameters) => Return; addEmbedsConversionTrackingParams: <Parameters extends unknown[], Return>(...params: Parameters) => Return;