UNPKG

ym-api

Version:

A Node.js wrapper for the Yandex.Music API (Unofficial) http://music.yandex.ru

85 lines (84 loc) 2.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("./types"); const YMApi_1 = __importDefault(require("./YMApi")); const UrlExtractor_1 = __importDefault(require("./UrlExtractor")); class WrappedYMApi { constructor(api = new YMApi_1.default(), urlExtractor = new UrlExtractor_1.default()) { this.api = api; this.urlExtractor = urlExtractor; } init(config) { return this.api.init(config); } getApi() { return this.api; } getTrackId(track) { if (typeof track === "string") { return this.urlExtractor.extractTrackId(track); } else { return track; } } getAlbumId(album) { if (typeof album === "string") { return this.urlExtractor.extractAlbumId(album); } else { return album; } } getArtistId(artist) { if (typeof artist === "string") { return this.urlExtractor.extractArtistId(artist); } else { return artist; } } getPlaylistId(playlist, user) { if (typeof playlist === "string") { return this.urlExtractor.extractPlaylistId(playlist); } else { return { id: playlist, user: String(user) }; } } async getConcreteDownloadInfo(track, codec, quality) { const infos = await this.api.getTrackDownloadInfo(this.getTrackId(track)); return infos .filter((i) => i.codec === codec) .sort((a, b) => quality === "high" ? a.bitrateInKbps - b.bitrateInKbps : b.bitrateInKbps - a.bitrateInKbps) .pop(); } getMp3DownloadInfo(track, quality = types_1.DownloadTrackQuality.High) { return this.getConcreteDownloadInfo(track, types_1.DownloadTrackCodec.MP3, quality); } async getMp3DownloadUrl(track, quality = types_1.DownloadTrackQuality.High) { return this.api.getTrackDirectLink((await this.getMp3DownloadInfo(track, quality)).downloadInfoUrl); } getPlaylist(playlist, user) { const pl = this.getPlaylistId(playlist, user); return this.api.getPlaylist(pl.id, pl.user); } getTrack(track) { return this.api.getSingleTrack(this.getTrackId(track)); } getAlbum(album, withTracks = false) { return this.api.getAlbum(this.getAlbumId(album), withTracks); } getAlbumWithTracks(album) { return this.api.getAlbumWithTracks(this.getAlbumId(album)); } getArtist(artist) { return this.api.getArtist(this.getArtistId(artist)); } } exports.default = WrappedYMApi;