DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

YurinKonstantin /

YurinKonstantin/dsh-rustore

Verified

RuStore Publishing API for DeepSeek Harness: draft, upload, moderation tools, standalone MCP server and the rustore skill

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@79ea6224

dsh-rustore

RuStore Publishing API для DeepSeek Harness — плагин DSH, отдельный MCP-сервер и навык rustore для публикации Android-приложения: черновик версии, загрузка AAB/APK, иконки и скриншотов, настройки публикации, модерация, ручная публикация, архивирование и удаление черновика.

Плагин регистрирует 22 инструмента rustore_*; тот же набор доступен как самостоятельный MCP-сервер (stdio, без внешних зависимостей) — его можно подключить к Cursor, Claude Desktop, собственному агенту или в DSH через @deepseek-ai/dsh-mcp-client.

Установка

Из GitHub (в свой DSH)

dsh plugin --profile <профиль> add github:YurinKonstantin/dsh-rustore

или из локальной копии репозитория:

git clone https://github.com/YurinKonstantin/dsh-rustore
dsh plugin --profile <профиль> add link:<абсолютный путь к клону>

После установки плагин подключается строкой в cordis.patch.yml профиля — готовая строка лежит в cordis.patch.yml пакета, её нужно перенести в профиль (так делает менеджер плагинов при установке bundle).

Через магазин плагинов DSH

DSH читает индексы магазина, которые добавляет сам пользователь. Индекс этого плагина — market.json в этом репозитории:

https://raw.githubusercontent.com/YurinKonstantin/dsh-rustore/main/market.json

Добавить: Settings → Plugins → Discover → Добавить индекс (или в конфигурации строки plugin-market указать indexes: [<URL>]). В индексе версия привязана к конкретному коммиту, поэтому установка воспроизводима.

Настройка токена

RuStore не выдаёт долгоживущий токен: JWE живёт 900 секунд и выпускается из keyId + приватного ключа. Поэтому в настройках плагина хранят ключ, а токен плагин выпускает сам и обновляет за минуту до истечения.

Ключ: RuStore Консоль → вкладка «Компания» (для физлица — «Разработчик») → API RuStore → «Создать ключ» → отметить приложения и методы публикации → «Сгенерировать ключ» → скопировать приватный ключ (Base64, показывается один раз). Рядом в таблице — ID ключа (keyId).

Через интерфейс (основной способ)

Откройте Plugins в боковой панели → пакет RuStore → строка rustore → кнопка настройки (страница также доступна из раздела конфигурации пакета). Поля:

  • ID ключа (keyId);
  • Приватный ключ — поле пароля: сохранённый ключ не показывается, пустое поле означает «не менять», для замены введите новый;
  • готовый JWE-токен (необязательно) и адреса API;
  • кнопки Сохранить, Проверить авторизацию, Удалить ключ.

Значения сохраняются в %USERPROFILE%\.dsh\rustore.json (права 0600) и применяются сразу. «Проверить авторизацию» выпускает токен и читает список приложений, показывая их число.

Через конфигурацию профиля

- id: rustore
  name: dsh-rustore
  config:
    token: ""                       # необязательно: готовый JWE
    keyId: "354751"                 # ID ключа из консоли
    privateKey: ""                  # Base64; лучше держать в credentials, а не здесь
    privateKeyRef: RUSTORE_PRIVATE_KEY
    apiBase: https://public-api-m.rustore.ru
    mirrorBase: https://public-api.rustore.ru
    authUrl: https://public-api-m.rustore.ru/public/auth/
    timeoutMs: 120000
    settingsFile: ""                # по умолчанию %USERPROFILE%\.dsh\rustore.json

Порядок источников: конфигурация плагина → секрет DSH (RUSTORE_PRIVATE_KEY в Settings → credentials) → переменные окружения RUSTORE_* → файл ~/.dsh/rustore.json. Тот же файл пишет инструмент rustore_settings_set, поэтому ключ можно задать и из чата. Секреты в ответах инструментов маскируются.

Проверка: rustore_settings_get (режим авторизации) и rustore_auth_check (выпуск токена + список приложений).

Инструменты

Инструмент Что делает
rustore_apps_list приложения, доступные ключу; поиск, сортировка, пагинация
rustore_app_versions версии приложения с фильтром по статусам
rustore_version_info детали версии (API v2)
rustore_version_status статус версии и причина отклонения
rustore_draft_create создать черновик версии с карточкой
rustore_draft_update изменить черновик (PATCH v2)
rustore_draft_delete удалить черновик (необратимо)
rustore_upload_aab / rustore_upload_apk загрузить сборку
rustore_upload_icon иконка 512×512
rustore_upload_screens / rustore_screens_list / rustore_screenshot_delete скриншоты (API v2)
rustore_publish_settings тип публикации: INSTANTLY / DELAYED / MANUAL
rustore_send_to_moderation отправить на модерацию (приоритет 0…5)
rustore_manual_publish опубликовать прошедшую модерацию версию вручную
rustore_version_archive архивировать версию
rustore_categories_list справочник категорий (MAIN/GAMES)
rustore_app_tags теги приложения
rustore_settings_get / rustore_settings_set / rustore_auth_check настройки и авторизация

Порядок публикации, ограничения карточки (80/4000/500/180 символов, 512×512, ≥3 скриншота и т. д.) и разбор ошибок — в навыке skills/rustore/SKILL.md.

MCP-сервер без DSH

$env:RUSTORE_KEY_ID = "354751"
$env:RUSTORE_PRIVATE_KEY = "MIIEvgIBADANBgkq..."
node mcp/server.mjs

Транспорт — stdio, построчные JSON-RPC сообщения. Подключение в DSH:

- id: rustore-mcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: rustore
    transport: stdio
    command: node
    args: ['<путь>/dsh-rustore/mcp/server.mjs']
    env:
      RUSTORE_KEY_ID: ''
      RUSTORE_PRIVATE_KEY: ''
    failOnStartupError: true

Инструменты появятся как mcp__rustore__<имя>.

Проверка

node test/core.test.mjs     # авторизация RSA-SHA512, клиент, пути методов
node test/mcp.test.mjs      # протокол MCP: initialize, tools/list, tools/call
node test/plugin.test.mjs   # регистрация инструментов в DSH
node test/routes.test.mjs   # HTTP-маршруты страницы настроек

39 тестов, сеть не используется: транспорт и HTTP-маршруты подменяются заглушками.

Документация RuStore

docs/rustore-api-reference.md — конспект официальной документации RuStore с параметрами методов, ограничениями полей и адресами эндпоинтов.

Ограничения

  • Publishing API работает с версиями уже существующего приложения: само приложение, контакты разработчика, политика конфиденциальности, тестовые доступы и ТВ-иконка задаются в веб-консоли RuStore.
  • Документация RuStore разносит методы по двум хостам (public-api.rustore.ru и public-api-m.rustore.ru); для чтения клиент автоматически пробует второй при 404.

Лицензия

MIT — см. LICENSE.

—/ 5

No ratings yet

Verified DSH bundle

Commit 79ea6224ba5e

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout