QOL: Move source code under the src directory. (#1318)

This commit is contained in:
Angelos Bouklis
2023-10-15 15:52:48 +03:00
committed by GitHub
parent 30c8dcf730
commit 7625a3aa52
159 changed files with 102 additions and 71 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,464 @@
export interface GetPlayerResponse {
responseContext: ResponseContext;
playabilityStatus: PlayabilityStatus;
streamingData: StreamingData;
heartbeatParams: HeartbeatParams;
playbackTracking: PlaybackTracking;
captions: Captions;
videoDetails: GetPlayerResponseVideoDetails;
playerConfig: PlayerConfig;
storyboards: Storyboards;
microformat: Microformat;
trackingParams: string;
attestation: Attestation;
endscreen: Endscreen;
adBreakHeartbeatParams: string;
}
export interface Attestation {
playerAttestationRenderer: PlayerAttestationRenderer;
}
export interface PlayerAttestationRenderer {
challenge: string;
botguardData: BotguardData;
}
export interface BotguardData {
program: string;
interpreterSafeUrl: InterpreterSafeURL;
serverEnvironment: number;
}
export interface InterpreterSafeURL {
privateDoNotAccessOrElseTrustedResourceUrlWrappedValue: string;
}
export interface Captions {
playerCaptionsTracklistRenderer: PlayerCaptionsTracklistRenderer;
}
export interface PlayerCaptionsTracklistRenderer {
captionTracks: CaptionTrack[];
audioTracks: AudioTrack[];
translationLanguages: TranslationLanguage[];
defaultAudioTrackIndex: number;
}
export interface AudioTrack {
captionTrackIndices: number[];
}
export interface CaptionTrack {
baseUrl: string;
name: Name;
vssId: string;
languageCode: string;
kind: string;
isTranslatable: boolean;
}
export interface Name {
runs: Run[];
}
export interface Run {
text: string;
}
export interface TranslationLanguage {
languageCode: string;
languageName: Name;
}
export interface Endscreen {
endscreenRenderer: EndscreenRenderer;
}
export interface EndscreenRenderer {
elements: Element[];
startMs: string;
trackingParams: string;
}
export interface Element {
endscreenElementRenderer: EndscreenElementRenderer;
}
export interface EndscreenElementRenderer {
style: string;
image: ImageClass;
left: number;
width: number;
top: number;
aspectRatio: number;
startMs: string;
endMs: string;
title: Title;
metadata: Name;
endpoint: Endpoint;
trackingParams: string;
id: string;
thumbnailOverlays: ThumbnailOverlay[];
}
export interface Endpoint {
clickTrackingParams: string;
commandMetadata: CommandMetadata;
watchEndpoint: WatchEndpoint;
}
export interface CommandMetadata {
}
export interface WatchEndpoint {
videoId: string;
}
export interface ImageClass {
thumbnails: ThumbnailElement[];
}
export interface ThumbnailElement {
url: string;
width: number;
height: number;
}
export interface ThumbnailOverlay {
thumbnailOverlayTimeStatusRenderer: ThumbnailOverlayTimeStatusRenderer;
}
export interface ThumbnailOverlayTimeStatusRenderer {
text: Title;
style: string;
}
export interface Title {
runs: Run[];
accessibility: Accessibility;
}
export interface Accessibility {
accessibilityData: AccessibilityData;
}
export interface AccessibilityData {
label: string;
}
export interface HeartbeatParams {
heartbeatToken: string;
intervalMilliseconds: string;
maxRetries: string;
drmSessionId: string;
softFailOnError: boolean;
heartbeatServerData: string;
}
export interface Microformat {
microformatDataRenderer: MicroformatDataRenderer;
}
export interface MicroformatDataRenderer {
urlCanonical: string;
title: string;
description: string;
thumbnail: ImageClass;
siteName: string;
appName: string;
androidPackage: string;
iosAppStoreId: string;
iosAppArguments: string;
ogType: string;
urlApplinksIos: string;
urlApplinksAndroid: string;
urlTwitterIos: string;
urlTwitterAndroid: string;
twitterCardType: string;
twitterSiteHandle: string;
schemaDotOrgType: string;
noindex: boolean;
unlisted: boolean;
paid: boolean;
familySafe: boolean;
tags: string[];
availableCountries: string[];
pageOwnerDetails: PageOwnerDetails;
videoDetails: MicroformatDataRendererVideoDetails;
linkAlternates: LinkAlternate[];
viewCount: string;
publishDate: string;
category: string;
uploadDate: string;
}
export interface LinkAlternate {
hrefUrl: string;
title?: string;
alternateType?: string;
}
export interface PageOwnerDetails {
name: string;
externalChannelId: string;
youtubeProfileUrl: string;
}
export interface MicroformatDataRendererVideoDetails {
externalVideoId: string;
durationSeconds: string;
durationIso8601: string;
}
export interface PlayabilityStatus {
status: string;
playableInEmbed: boolean;
audioOnlyPlayability: AudioOnlyPlayability;
miniplayer: Miniplayer;
contextParams: string;
}
export interface AudioOnlyPlayability {
audioOnlyPlayabilityRenderer: AudioOnlyPlayabilityRenderer;
}
export interface AudioOnlyPlayabilityRenderer {
trackingParams: string;
audioOnlyAvailability: string;
}
export interface Miniplayer {
miniplayerRenderer: MiniplayerRenderer;
}
export interface MiniplayerRenderer {
playbackMode: string;
}
export interface PlaybackTracking {
videostatsPlaybackUrl: PtrackingURLClass;
videostatsDelayplayUrl: AtrURLClass;
videostatsWatchtimeUrl: PtrackingURLClass;
ptrackingUrl: PtrackingURLClass;
qoeUrl: PtrackingURLClass;
atrUrl: AtrURLClass;
videostatsScheduledFlushWalltimeSeconds: number[];
videostatsDefaultFlushIntervalSeconds: number;
googleRemarketingUrl: AtrURLClass;
}
export interface AtrURLClass {
baseUrl: string;
elapsedMediaTimeSeconds: number;
headers: Header[];
}
export interface Header {
headerType: HeaderType;
}
export enum HeaderType {
PlusPageID = 'PLUS_PAGE_ID',
UserAuth = 'USER_AUTH',
VisitorID = 'VISITOR_ID',
}
export interface PtrackingURLClass {
baseUrl: string;
headers: Header[];
}
export interface PlayerConfig {
audioConfig: AudioConfig;
streamSelectionConfig: StreamSelectionConfig;
mediaCommonConfig: MediaCommonConfig;
webPlayerConfig: WebPlayerConfig;
}
export interface AudioConfig {
loudnessDb: number;
perceptualLoudnessDb: number;
enablePerFormatLoudness: boolean;
}
export interface MediaCommonConfig {
dynamicReadaheadConfig: DynamicReadaheadConfig;
}
export interface DynamicReadaheadConfig {
maxReadAheadMediaTimeMs: number;
minReadAheadMediaTimeMs: number;
readAheadGrowthRateMs: number;
}
export interface StreamSelectionConfig {
maxBitrate: string;
}
export interface WebPlayerConfig {
useCobaltTvosDash: boolean;
webPlayerActionsPorting: WebPlayerActionsPorting;
gatewayExperimentGroup: string;
}
export interface WebPlayerActionsPorting {
subscribeCommand: SubscribeCommand;
unsubscribeCommand: UnsubscribeCommand;
addToWatchLaterCommand: AddToWatchLaterCommand;
removeFromWatchLaterCommand: RemoveFromWatchLaterCommand;
}
export interface AddToWatchLaterCommand {
clickTrackingParams: string;
playlistEditEndpoint: AddToWatchLaterCommandPlaylistEditEndpoint;
}
export interface AddToWatchLaterCommandPlaylistEditEndpoint {
playlistId: string;
actions: PurpleAction[];
}
export interface PurpleAction {
addedVideoId: string;
action: string;
}
export interface RemoveFromWatchLaterCommand {
clickTrackingParams: string;
playlistEditEndpoint: RemoveFromWatchLaterCommandPlaylistEditEndpoint;
}
export interface RemoveFromWatchLaterCommandPlaylistEditEndpoint {
playlistId: string;
actions: FluffyAction[];
}
export interface FluffyAction {
action: string;
removedVideoId: string;
}
export interface SubscribeCommand {
clickTrackingParams: string;
subscribeEndpoint: SubscribeEndpoint;
}
export interface SubscribeEndpoint {
channelIds: string[];
params: string;
}
export interface UnsubscribeCommand {
clickTrackingParams: string;
unsubscribeEndpoint: SubscribeEndpoint;
}
export interface ResponseContext {
serviceTrackingParams: ServiceTrackingParam[];
maxAgeSeconds: number;
}
export interface ServiceTrackingParam {
service: string;
params: Param[];
}
export interface Param {
key: string;
value: string;
}
export interface Storyboards {
playerStoryboardSpecRenderer: PlayerStoryboardSpecRenderer;
}
export interface PlayerStoryboardSpecRenderer {
spec: string;
recommendedLevel: number;
}
export interface StreamingData {
expiresInSeconds: string;
formats: Format[];
adaptiveFormats: AdaptiveFormat[];
}
export interface AdaptiveFormat {
itag: number;
mimeType: string;
bitrate: number;
width?: number;
height?: number;
initRange: Range;
indexRange: Range;
lastModified: string;
contentLength: string;
quality: string;
fps?: number;
qualityLabel?: string;
projectionType: ProjectionType;
averageBitrate: number;
approxDurationMs: string;
signatureCipher: string;
colorInfo?: ColorInfo;
highReplication?: boolean;
audioQuality?: string;
audioSampleRate?: string;
audioChannels?: number;
loudnessDb?: number;
}
export interface ColorInfo {
primaries: string;
transferCharacteristics: string;
}
export interface Range {
start: string;
end: string;
}
export enum ProjectionType {
Rectangular = 'RECTANGULAR',
}
export interface Format {
itag: number;
mimeType: string;
bitrate: number;
width: number;
height: number;
lastModified: string;
quality: string;
fps: number;
qualityLabel: string;
projectionType: ProjectionType;
audioQuality: string;
approxDurationMs: string;
audioSampleRate: string;
audioChannels: number;
signatureCipher: string;
}
export interface GetPlayerResponseVideoDetails {
videoId: string;
title: string;
lengthSeconds: string;
channelId: string;
isOwnerViewing: boolean;
isCrawlable: boolean;
thumbnail: ImageClass;
allowRatings: boolean;
viewCount: string;
author: string;
isPrivate: boolean;
isUnpluggedCorpus: boolean;
musicVideoType: string;
isLiveContent: boolean;
elapsedSeconds: number;
isPaused: boolean;
// youtube-music only
album?: string | null;
}

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 ' })
}

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;
}

225
src/types/youtube-player.ts Normal file
View File

@ -0,0 +1,225 @@
// TODO: fully type definitions for youtube-player
import { VideoDetails } from './video-details';
import { GetPlayerResponse } from './get-player-response';
import { PlayerAPIEvents } from './player-api-events';
export interface YoutubePlayer {
getInternalApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getApiInterface: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
cueVideoByPlayerVars: () => void;
loadVideoByPlayerVars: () => void;
preloadVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAdState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
sendAbandonmentPing: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setLoopRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getLoopRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setAutonavState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
seekToLiveHead: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
requestSeekToWallTimeSeconds: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
seekToStreamTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
startSeekCsiAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStreamTimeOffset: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getVideoData: () => VideoDetails;
setInlinePreview: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateDownloadState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
queueOfflineAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
pauseVideoDownload: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
resumeVideoDownload: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
refreshAllStaleEntities: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isOrchestrationLeader: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAppState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateLastActiveTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setBlackout: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setUserEngagement: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateSubtitlesUserSettings: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getPresentingPlayerType: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
canPlayType: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updatePlaylist: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateVideoData: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateEnvironmentData: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
sendVideoStatsEngageEvent: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
productsInVideoVisibilityUpdated: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setSafetyMode: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isAtLiveHead: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getVideoAspectRatio: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getPreferredQuality: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getPlaybackQualityLabel: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setPlaybackQualityRange: (quality: string) => void;
onAdUxClicked: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getFeedbackProductData: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStoryboardFrame: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStoryboardFrameIndex: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStoryboardLevel: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getNumberOfStoryboardLevels: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getCaptionWindowContainerId: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAvailableQualityLabels: () => string[];
addUtcCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
showAirplayPicker: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
dispatchReduxAction: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getPlayerResponse: () => GetPlayerResponse;
getHeartbeatResponse: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
changeMarkerVisibility: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setAutonav: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isNotServable: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
channelSubscribed: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
channelUnsubscribed: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
togglePictureInPicture: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
supportsGaplessAudio: () => boolean;
supportsGaplessShorts: () => boolean;
enqueueVideoByPlayerVars: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
clearQueue: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAudioTrack: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setAudioTrack: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAvailableAudioTracks: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getMaxPlaybackQuality: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getUserPlaybackQualityPreference: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getSubtitlesUserSettings: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
resetSubtitlesUserSettings: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setMinimized: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setOverlayVisibility: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
confirmYpcRental: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
toggleSubtitlesOn: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isSubtitlesOn: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
queueNextVideo: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
handleExternalCall: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
logApiCall: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isExternalMethodAvailable: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setScreenLayer: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getCurrentPlaylistSequence: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getPlaylistSequenceForTime: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
shouldSendVisibilityState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
syncVolume: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
highlightSettingsMenuItem: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
openSettingsMenuItem: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getVisibilityState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
isMutedByMutedAutoplay: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setGlobalCrop: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setInternalSize: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
seekBy: (seconds: number) => void;
showControls: () => void;
hideControls: () => void;
cancelPlayback: () => void;
getProgressState: <Return>() => Return;
isInline: () => boolean;
setInline: (isInline: boolean) => void;
setLoopVideo: (value: boolean) => void;
getLoopVideo: () => boolean;
getVideoContentRect: <Return>() => Return;
getVideoStats: <Return>() => Return;
getStoryboardFormat: <Return>() => Return;
toggleFullscreen: <Return>() => Return;
isFullscreen: () => boolean;
getPlayerSize: <Return>() => Return;
toggleSubtitles: () => void;
setCenterCrop: <Parameter>(param: Parameter) => void;
setFauxFullscreen: <Parameter>(param: Parameter) => void;
setSizeStyle: <Parameter>(params: Parameter) => void;
handleGlobalKeyDown: () => void;
handleGlobalKeyUp: () => void;
wakeUpControls: () => void;
cueVideoById: (videoId: string) => void;
loadVideoById: (videoId: string) => void;
cueVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
loadVideoByUrl: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
/**
* Note: This doesn't resume playback, it plays from the start.
*/
playVideo: () => void;
pauseVideo: () => void;
stopVideo: () => void;
clearVideo: () => void;
getVideoBytesLoaded: () => number;
getVideoBytesTotal: () => number;
getVideoLoadedFraction: () => number;
getVideoStartBytes: () => number;
cuePlaylist: () => void;
loadPlaylist: () => void;
nextVideo: () => void;
previousVideo: () => void;
playVideoAt: () => void;
setShuffle: <Parameter>(param: Parameter) => void;
setLoop: <Parameter>(param: Parameter) => void;
getPlaylist: <Return extends unknown[]>() => Return;
getPlaylistIndex: () => number;
getPlaylistId: () => string | undefined;
loadModule: (moduleName: string) => void;
unloadModule: (moduleName: string) => void;
setOption: <T>(optionName: string, key: string, value: T) => void;
getOption: <T>(optionName: string, key: string) => T | null | undefined;
getOptions: () => string[];
mute: () => void;
unMute: () => void;
isMuted: () => boolean;
/**
* @param volume 0-100
*/
setVolume: (volume: number) => void;
getVolume: () => number;
seekTo: (seconds: number) => void;
getPlayerMode: <Return>() => Return;
getPlayerState: () => number;
getAvailablePlaybackRates: () => number[];
getPlaybackQuality: () => string;
setPlaybackQuality: (quality: string) => void;
getAvailableQualityLevels: () => string[];
/**
* @return float between start and end in seconds
*/
getCurrentTime: () => number;
/**
* @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;
removeCueRange: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setSize: (size: { width: number; height: number }) => void;
destroy: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getSphericalProperties: <Return>() => Return;
setSphericalProperties: <Parameter>(param: Parameter) => void;
mutedAutoplay: () => void;
/**
* @return string HTMLIFrameElement
*/
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;
preloadVideoById: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setAccountLinkState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateAccountLinkingConfig: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getAvailableQualityData: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
setCompositeParam: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
getStatsForNerds: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
showVideoInfo: () => void;
hideVideoInfo: () => void;
isVideoInfoVisible: () => boolean;
getPlaybackRate: () => number;
setPlaybackRate: (playbackRate: number) => void;
updateFullerscreenEduButtonSubtleModeState: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
updateFullerscreenEduButtonVisibility: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
addEmbedsConversionTrackingParams: <Parameters extends unknown[], Return>(...params: Parameters) => Return;
}