NE-DOS Store - fullstack-магазин команд для NE-DOS:
- NodeJS backend (реестр, install payload, модерация, отзывы, install history)
- React frontend (каталог, submit-форма, админка)
Что уже реализовано:
- 72 core-команды из ветки
big-reload-1.3.0репозиторияne-dos - 10 community-команд/программ, хранящихся внутри магазина
- SHA-256 для install payload
- локальная авторизация
.nedos Passport - вход через Sculk ID для связанных аккаунтов
- публичная отправка команд на модерацию только для авторизованных пользователей
- RBAC: uploader / moderator / admin
- PostgreSQL-ready схема + файловый fallback
- Docker-образ для fullstack-развёртывания
- GitHub workflows: test, build, integration, deploy
- Клонировать репозиторий:
git clone https://github.com/PRO100BYTE/ne-dos-store - Установить зависимости:
npm install - Запустить backend + frontend вместе:
npm run dev
После запуска:
- Frontend:
http://localhost:3055 - API:
http://localhost:8787
Bootstrap-админ .nedos Passport по умолчанию в dev-режиме:
- username:
admin - password:
admin123
Sculk Callback URL для Strict URL Check:
http://localhost:8787/api/auth/sculk/callback
Для production:
- выставить
PASSPORT_BOOTSTRAP_ADMIN - выставить
PASSPORT_BOOTSTRAP_PASSWORD - выставить
SCULK_CALLBACK_URL(если callback не локальный) - при необходимости выставить
DATABASE_URL
npm run dev- одновременно запускает API и React (WEB на3055)npm run server- только NodeJS backendnpm run start:prod- backend + выдача собранного frontend изbuild/npm start/npm run frontend- только React frontend (порт3055)npm run build/npm run build:frontend- production build frontendnpm run test:ci- запуск unit tests без watchnpm run test:integration- smoke/integration проверки API
GET /api/health- health checkGET /api/meta- категории, теги, происхождение, размер реестра, moderation statsGET /api/auth/sculk/config- конфиг Sculk + callback URLGET /api/auth/sculk/callback- callback endpointPOST /api/auth/sculk/login- вход через Sculk IDPOST /api/auth/passport/register- регистрация.nedos PassportPOST /api/auth/passport/login- вход.nedos PassportPOST /api/auth/passport/link-existing- связка Sculk ID с существующим.nedos PassportGET /api/auth/session- информация о текущей сессииGET /api/commands- список команд- query params:
query,category,tag,sort,verified,origin,status
- query params:
GET /api/commands/:slug- карточка командыGET /api/commands/:slug/install- install payload + SHA-256 + verification sourcePOST /api/commands/:slug/install-track- фиксация установкиGET /api/commands/:slug/reviews- отзывыPOST /api/commands/:slug/reviews- оставить отзывPOST /api/submissions- отправка community-команды (uploader/moderator/admin)GET /api/admin/overview- обзор магазина (moderator/admin)GET /api/admin/submissions- очередь модерации (moderator/admin)POST /api/admin/submissions/:id/approve- одобрить команду (moderator/admin)POST /api/admin/submissions/:id/reject- отклонить команду (moderator/admin)GET /api/admin/moderation-history- история модерации (admin)GET /api/admin/accounts- список аккаунтов (admin)POST /api/admin/accounts- создание аккаунта (admin)PATCH /api/admin/accounts/:username- изменение аккаунта (admin)DELETE /api/admin/accounts/:username- удаление аккаунта (admin)GET /api/admin/apps- список приложений (admin)POST /api/admin/apps- добавление приложения (admin)PATCH /api/admin/commands/:slug- изменение/скрытие community-приложения (admin)DELETE /api/admin/apps/:slug- удаление приложения (admin)GET /api/packages/core/:group/:file- выдача core-пакетов из локального snapshotGET /api/packages/:scope/:file- выдача локальных JS-пакетов магазина
server/data/coreCommands.generated.json- core-команды изne-dosbranchbig-reload-1.3.0server/data/communityCommands.json- встроенные community-командыserver/data/submissions.json- пользовательские отправки
Скрипт:
server/scripts/generate-core-registry.jsserver/scripts/sync-core-packages.js
Он:
- читает список команд из соседнего локального репозитория
../ne-dos - забирает содержимое из ветки
big-reload-1.3.0 - считает
sha256 - генерирует
server/data/coreCommands.generated.json - синхронизирует локальный snapshot в
server/packages/core/
Это дает fallback-модель: установка команд не зависит от доступности GitHub в runtime.
Файл:
server/db/schema.sql
Таблицы:
command_reviewsinstall_historycommand_submissions
Если DATABASE_URL не задан, backend работает через JSON-файлы в server/data/.
- Документация по авторизации:
docs/passport-auth.md - Документация по ролям:
docs/roles-and-access.md
- Пользователь отправляет команду через вкладку
Публикация - Скрипт сохраняется в
server/packages/submitted/ - Backend считает SHA-256 и ставит статус
pending - Модератор/админ заходит во вкладку
Админка - После
approveкоманда сразу попадает в каталог
Собрать контейнер локально:
docker build -t ne-dos-store .
Запустить:
docker run -p 8787:8787 -e ADMIN_TOKEN=your-token ne-dos-store
Контейнер публикует fullstack-магазин:
- Express API
- статический frontend из
build/
-
.github/workflows/ci.yml- unit tests
- production frontend build
- smoke по артефактам
-
.github/workflows/integration.yml- поднимает backend
- гоняет integration script
- проверяет submission -> approve -> publish flow
-
.github/workflows/deploy.yml- собирает Docker image
- публикует контейнер в GHCR
- Интеграция PRO100ID (PRO100BYTE Team ID) как SSO-провайдера
- Подключение Authentik как внешнего Identity Provider
- Автоматическая подпись пакетов
- PostgreSQL-only режим без JSON fallback
- Публичные страницы авторов и changelog команд
