ym-api
Version:
A Node.js wrapper for the Yandex.Music API (Unofficial) http://music.yandex.ru
85 lines (84 loc) • 2.83 kB
JavaScript
"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;