client.tracks(...), client.tracksDownloadInfo(...)), повторяя исходный API.
Внутри клиент собирается из миксинов по доменам — каждая область в своём файле.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 }).
ClientOptions| Опция | Назначение |
|---|---|
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) |