MiniShop3 1.13.0 (Август 2026)
1.13.0-beta1 — самый крупный релиз компонента за долгое время: больше сотни коммитов, публичный Web API для headless-витрины, дальнейший переезд админки на Vue и большая партия security-фиксов в обоих API. Разберу по порядку.
Каталог товаров теперь доступен без авторизации: список и карточка товара отдаются напрямую, без токена. Это открывает дорогу headless-витринам — фронт может тянуть каталог с любого домена, не поднимая сессию MODX.
Для клиента добавили полноценный кабинет через Web API: история заказов, карточка заказа, отмена заказа, logout, восстановление пароля по email. Восстановление пароля защищено от перебора email — ответ одинаковый независимо от того, существует адрес или нет, плюс rate limit по IP и по email.
Важно для интеграторов. Ответы Web API по клиенту теперь формируются по белому списку полей — токен и пароль из ответа исключены гарантированно, а добавление/обновление профиля принимает только разрешённые поля.
Заказы, клиенты с уведомлениями, настройки и утилиты — теперь чистый Vue без ExtJS-обёрток, как раньше уже сделали с товарами и категориями. Каждая страница монтируется одним Vite-бандлом, без костылей с ожиданием готовности DOM от ExtJS.
В карточке товара туда же переехали вкладки «Категории» (раньше — дерево на ExtJS) и «Связи» — обе на переиспользуемых Vue-компонентах.
Контроллер заказов и реестр сервисов разобрали на более мелкие куски — раньше это были одни из самых больших файлов в проекте. Расчёт стоимости заказа на витрине и в админке теперь считается одним и тем же кодом, а не двумя параллельными реализациями, которые время от времени расходились. Ответы API на границе HTTP унифицировали под один формат.
Большая пачка фиксов в обоих API. На Web API — закрыли захват сессии через email до её верификации, токен теперь надёжно перевыпускается при входе — заранее подготовленный чужой токен использовать после авторизации нельзя, CORS больше не разрешает любой домен (*) вместе с credentials, истёкшие токены теперь отклоняются, а не тихо продлеваются. На Manager API — донастроили права на запись заказов и настроек, закрыли пару уязвимостей, где можно было получить доступ к товару или категории по чужому ID в обход текущей категории, убрали утечку служебного токена и части данных клиента в ответах API.
И снова — почти весь релиз сделан руками Ивана Бочкарева (@Иван Бочкарев): Web API, переезд админки на Vue, декомпозиция сервисов, security-фиксы. Огромная работа за один цикл.
Полный список изменений — в CHANGELOG на GitHub, релиз — на странице v1.13.0-beta1. Нашли баг или есть пожелание — пишите в issues.
0
Публичный Web API — витрина и кабинет клиента
Каталог товаров теперь доступен без авторизации: список и карточка товара отдаются напрямую, без токена. Это открывает дорогу headless-витринам — фронт может тянуть каталог с любого домена, не поднимая сессию MODX.
Для клиента добавили полноценный кабинет через Web API: история заказов, карточка заказа, отмена заказа, logout, восстановление пароля по email. Восстановление пароля защищено от перебора email — ответ одинаковый независимо от того, существует адрес или нет, плюс rate limit по IP и по email.
Важно для интеграторов. Ответы Web API по клиенту теперь формируются по белому списку полей — токен и пароль из ответа исключены гарантированно, а добавление/обновление профиля принимает только разрешённые поля.
Админка: ещё четыре страницы без ExtJS
Заказы, клиенты с уведомлениями, настройки и утилиты — теперь чистый Vue без ExtJS-обёрток, как раньше уже сделали с товарами и категориями. Каждая страница монтируется одним Vite-бандлом, без костылей с ожиданием готовности DOM от ExtJS.
В карточке товара туда же переехали вкладки «Категории» (раньше — дерево на ExtJS) и «Связи» — обе на переиспользуемых Vue-компонентах.
Что ещё нового
- Новый тип extra-поля «ключ-значение» — настраиваемые пары с режимами «фиксированный набор» и «свободный ввод»
- В галерее товара можно назначить любое фото главным превью, не трогая порядок сортировки самой галереи
- Импорт CSV подхватывает колонки extra fields — раньше терялись при маппинге
- Программное создание заказов без сессии — для интеграций и cron, с защитой от повторного создания одного и того же заказа
- Хранилище для rate limit можно вынести в Redis или Memcached — по умолчанию по-прежнему файловое, менять ничего не нужно
Под капотом
Контроллер заказов и реестр сервисов разобрали на более мелкие куски — раньше это были одни из самых больших файлов в проекте. Расчёт стоимости заказа на витрине и в админке теперь считается одним и тем же кодом, а не двумя параллельными реализациями, которые время от времени расходились. Ответы API на границе HTTP унифицировали под один формат.
Безопасность
Большая пачка фиксов в обоих API. На Web API — закрыли захват сессии через email до её верификации, токен теперь надёжно перевыпускается при входе — заранее подготовленный чужой токен использовать после авторизации нельзя, CORS больше не разрешает любой домен (*) вместе с credentials, истёкшие токены теперь отклоняются, а не тихо продлеваются. На Manager API — донастроили права на запись заказов и настроек, закрыли пару уязвимостей, где можно было получить доступ к товару или категории по чужому ID в обход текущей категории, убрали утечку служебного токена и части данных клиента в ответах API.
Стабильность и фиксы
- Заказ больше нельзя оформить с несовместимой парой доставка/оплата — проверка теперь одна на все пути (сабмит, checkout, админка, финализация)
- Смена опции товара в корзине наконец доведена до конца на всех уровнях — Web API и витрина
- Вес черновика заказа считается как вес единицы товара, умноженный на количество — раньше могло разъезжаться
- Защита от дублей номера заказа при одновременном сабмите
- Починены кракозябры вместо символа рубля в настройке валюты по умолчанию
- Уже перед самым релизом поймал и починил несколько свежих Vue-регрессий: дублирующиеся диалоги подтверждения на паре страниц админки, зависание вкладки «Опции» в настройках и гонку токена на холодной загрузке Vue-страниц
Спасибо
И снова — почти весь релиз сделан руками Ивана Бочкарева (@Иван Бочкарев): Web API, переезд админки на Vue, декомпозиция сервисов, security-фиксы. Огромная работа за один цикл.
Что дальше
Полный список изменений — в CHANGELOG на GitHub, релиз — на странице v1.13.0-beta1. Нашли баг или есть пожелание — пишите в issues.
Комментарии: 0