@dvxch/yandex-music
    Preparing search index...

    Начало работы

    npm install @dvxch/yandex-music
    

    Для realtime («сейчас играет») дополнительно нужен опциональный пакет ws:

    npm install ws
    
    import { Client } from '@dvxch/yandex-music';

    // Создаём с OAuth-токеном и один раз вызываем init() для загрузки данных аккаунта.
    const client = await new Client({ token: process.env.YM_TOKEN }).init();

    // Получаем трек по id.
    const [track] = await client.tracks(2);
    console.log(track?.title, '—', track?.artists?.[0]?.name);

    // Получаем прямую ссылку и скачиваем.
    const [info] = await track!.getDownloadInfo();
    await info.download('track.mp3');

    // Текст песни (TEXT или LRC).
    const lyrics = await client.tracksLyrics(2, 'LRC');
    console.log(await lyrics?.fetchLyrics());

    new Client({ token }) дёшев. await client.init() один раз подгружает данные аккаунта, чтобы методы, подставляющие user id по умолчанию (usersLikes*, usersPlaylists*, pins, presaves), работали без явного userId. Каталожные read-only запросы (tracks, albums, search, …) работают и без init().

    Любая ошибка наследует YandexMusicError; сетевые дополнительно наследуют NetworkError. Ловите по классу, а не по строке.

    import { NotFoundError, UnauthorizedError, NetworkError } from '@dvxch/yandex-music';

    try {
    await client.tracks(2);
    } catch (e) {
    if (e instanceof UnauthorizedError) { /* переавторизация */ }
    else if (e instanceof NotFoundError) { /* нет такого */ }
    else if (e instanceof NetworkError) { /* ретрай; e.cause — исходная ошибка fetch */ }
    else throw e;
    }