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

    Архитектура и конфигурация

    • Плоский интерфейс клиента. Методы лежат прямо на клиенте (client.tracks(...), client.tracksDownloadInfo(...)), повторяя исходный API. Внутри клиент собирается из миксинов по доменам — каждая область в своём файле.
    • Модели в camelCase. API уже возвращает ключи в camelCase, поэтому модели хранят их как есть — без слоя нормализации snake_case. У каждой модели есть статический deJson(raw, client), который строит типизированный экземпляр и рекурсивно разбирает вложенные модели; массивы обрабатывает deList(Model.deJson, raw, client).
    • Модели несут клиент. Удобные методы вроде Track.getDownloadInfo() или DownloadInfo.download() переиспользуют клиент-владелец, так что вручную его прокидывать почти не нужно.
    • Типизированные ошибки. Любая ошибка наследует YandexMusicError; сетевые дополнительно наследуют NetworkError (BadRequestError, NotFoundError, TimedOutError, UnauthorizedError).
    • Никогда не JSON.stringify модель — она держит обратную ссылку на клиент (циклическая структура). Читайте поля напрямую.

    Всё, чем клиент представляется API, задаётся через конструктор:

    const client = new Client({
    token: process.env.YM_TOKEN,
    userAgent: 'my-app/1.0', // по умолчанию — UA библиотеки
    headers: { 'X-Yandex-Music-Client': 'custom' }, // мержатся с дефолтными
    device: 'os=Linux; model=my-app; ...', // device-дескриптор для очередей
    language: 'en', // язык ответов: en/uz/uk/us/ru/kk/hy
    fetch: myFetch, // свой транспорт (напр. node-wreq)
    });

    userAgent и headers влияют только на автоматически создаваемый транспорт — если передаёшь свой request, задавай их прямо в нём. Идентичность устройства для realtime настраивается отдельно через client.realtime({ deviceInfo }).

    Опция Назначение
    token OAuth-токен
    baseUrl переопределить origin API
    language язык ответов: en/uz/uk/us/ru/kk/hy (по умолчанию ru)
    userAgent переопределить User-Agent
    headers доп. заголовки, мержатся с дефолтными
    device device-дескриптор для запросов очереди
    fetch свой fetch (прокси, моки, ретраи)
    reportUnknownFields подсветить поля API, которые модели ещё не маппят
    request полностью преднастроенный транспорт (перекрывает userAgent/headers/fetch)