Неофициальная Go библиотека для работы с MAX через WebSocket API.
Проект не связан с MAX, VK и любыми другими правообладателями. Автор проекта не является сотрудником или представителем MAX. Все торговые марки принадлежат их владельцам.
Библиотека предоставляет минимальный набор компонентов для построения собственных приложений и сервисов поверх протокола MAX.
- WebSocket транспорт с автоматическим переподключением;
- Поддержка heartbeat и контроля соединения;
- RPC слой поверх MAX протокола;
- Авторизация по токену;
- Авторизация через QR-код;
- Поддержка аккаунтов с облачным паролем (2FA);
- Хранение сессии;
- Получение событий протокола;
- Независимые переиспользуемые пакеты transport, rpc, statestore и events.
go get github.com/szonov/maxПримеры использования доступны в отдельном репозитории:
https://github.com/szonov/max-cli-example
Там можно найти:
- авторизацию через QR-код;
- сохранение сессии;
- получение входящих событий;
- консольные утилиты на основе библиотеки.
Проект состоит из нескольких независимых пакетов.
Универсальный JSON WebSocket транспорт.
Возможности:
- автоматическое переподключение;
- heartbeat;
- ограничение размера сообщений;
- события подключения и отключения.
Пакет не содержит логики MAX протокола и может использоваться отдельно в других проектах.
RPC слой поверх transport.
Возможности:
- запрос/ответ;
- ожидание ответа по
(opcode, seq); - таймауты;
- обработка ошибок протокола.
Универсальное хранилище состояния.
В комплекте поставляется файловая реализация:
store := statestore.NewFileStore[Session]("session.json")При необходимости можно реализовать собственный Store.
Минимальная реализация типизированных событий.
Используется внутри библиотеки, но может применяться и в других проектах.
Минимальная реализация клиента MAX.
Поддерживает:
- Hello;
- LoginViaToken;
- LoginViaQr;
- Logout;
- хранение сессии;
- события авторизации;
- получение входящих сообщений протокола.
Библиотека сознательно не содержит готовой реализации контактов, чатов и сообщений.
Данные протокола передаются приложению в виде json.RawMessage, а решение о том, какие структуры использовать и какие данные сохранять, остаётся за разработчиком.
Библиотека находится в активной разработке.
До версии v1.0.0 публичный API может изменяться без сохранения обратной совместимости.
MIT