interface ChannelIconInterface { url?: string; width: number; height: number; } declare class Channel { name?: string; verified: boolean; id?: string; url?: string; icon: ChannelIconInterface; subscribers?: string; constructor(data: any); private _patch; iconURL(options?: { size: number; }): string; get type(): "channel"; toString(): string; toJSON(): { name: string; verified: boolean; id: string; url: string; iconURL: string; type: "channel"; subscribers: string; }; } type ThumbnailType = "default" | "hqdefault" | "mqdefault" | "sddefault" | "maxresdefault" | "ultrares"; declare class Thumbnail { id?: string; width: number; height: number; url?: string; constructor(data: any); private _patch; displayThumbnailURL(thumbnailType?: ThumbnailType): string; defaultThumbnailURL(id: "0" | "1" | "2" | "3" | "4"): string; toString(): string; toJSON(): { id: string; width: number; height: number; url: string; }; } interface VideoStreamingData { expiresInSeconds: string; formats: VideoStreamingFormat[]; adaptiveFormats: VideoStreamingFormatAdaptive[]; } interface VideoStreamingFormat { itag: number; mimeType: string; bitrate: number; width: number; height: number; lastModified: string; contentLength: string; quality: string; fps: number; qualityLabel: string; projectionType: string; averageBitrate: number; audioQuality: string; approxDurationMs: string; audioSampleRate: string; audioChannels: number; signatureCipher: string; } interface VideoStreamingFormatAdaptive extends VideoStreamingFormat { initRange?: { start: string; end: string; }; indexRange?: { start: string; end: string; }; colorInfo?: { primaries: string; transferCharacteristics?: string; matrixCoefficients?: string; }; highReplication?: boolean; loudnessDb?: number; } interface MusicInfo { title: string; cover: string; artist: string; album: string; } declare class Video { id?: string; title?: string; description?: string; durationFormatted: string; duration: number; uploadedAt?: string; views: number; thumbnail?: Thumbnail; channel?: Channel; videos?: Video[]; likes: number; dislikes: number; live: boolean; private: boolean; tags: string[]; nsfw: boolean; shorts: boolean; unlisted: boolean; streamingData?: VideoStreamingData | null; music: MusicInfo[]; constructor(data: any); private _patch; get formats(): VideoStreamingFormat[]; get adaptiveFormats(): VideoStreamingFormatAdaptive[]; get url(): string; get shortsURL(): string; embedHTML(options?: { id: string; width: number; height: number; }): string; createMixURL(): string; get embedURL(): string; get type(): "video"; toString(): string; toJSON(): { id: string; url: string; shorts_url: string; title: string; description: string; duration: number; duration_formatted: string; uploadedAt: string; unlisted: boolean; nsfw: boolean; thumbnail: { id: string; width: number; height: number; url: string; }; channel: { name: string; id: string; icon: string; }; views: number; type: "video"; tags: string[]; ratings: { likes: number; dislikes: number; }; shorts: boolean; live: boolean; private: boolean; music: MusicInfo[]; }; } declare class Playlist { id?: string; title?: string; videoCount: number; lastUpdate?: string; views?: number; url?: string; link?: string; channel?: Channel; thumbnail?: Thumbnail; videos: Video[]; mix?: boolean; fake: boolean; private _continuation; constructor(data?: {}, searchResult?: boolean); private _patch; private _patchSearch; next(limit?: number): Promise; fetch(max?: number): Promise; get type(): "playlist"; [Symbol.iterator](): IterableIterator