# SMM Panel Node.js + Express SMM panel with wallet integrity, manual deposits, provider API sync, order creation, status tracking, admin APIs, and a static frontend. ## Quick Start ```bash npm install docker compose up -d db cp .env.example .env npm run migrate npm start ``` Open: ```text http://127.0.0.1:3000 ``` ## Docker App For the full app stack: ```bash docker compose up --build ``` The compose defaults are for local testing. Before production, set `NODE_ENV=production` and replace `JWT_SECRET`, `PROVIDER_API_URL`, `PROVIDER_API_KEY`, and `CORS_ORIGIN` through your deployment environment. Apply migrations against the compose database: ```bash DATABASE_URL=mysql://smm:smm_password@127.0.0.1:3306/smm npm run migrate ``` Migrations are intentionally run as an explicit command, not automatically when the container starts. ## Environment Important variables: ```text PORT=3000 DATABASE_URL=mysql://smm:smm_password@127.0.0.1:3306/smm JWT_SECRET=replace_with_a_long_random_secret PROVIDER_API_URL=https://provider.example/api/v2 PROVIDER_API_KEY=replace_with_provider_key CORS_ORIGIN=https://panel.example.com DEFAULT_MARKUP_PERCENT=25 ENABLE_JOBS=false ``` For production, replace all placeholder values. The server refuses weak or placeholder production settings, and requires `CORS_ORIGIN` so browsers can only call the API from your real site origin. ## Create Admin ```bash ADMIN_USERNAME=admin \ ADMIN_EMAIL=admin@example.com \ ADMIN_PASSWORD='StrongPass123' \ DATABASE_URL=mysql://smm:smm_password@127.0.0.1:3306/smm \ npm run admin:create ``` Then sign in from the web UI. ## Scripts ```bash npm run dev # watch mode npm start # run server npm run migrate # apply migrations npm run reconcile # wallet reconciliation npm run sync:order-status # manually sync provider order statuses npm test # lint + all tests + reconciliation ``` ## Make Commands ```bash make db-up make migrate make start APP_PORT=3000 make test make backup ``` Create an admin through `make`: ```bash ADMIN_USERNAME=admin \ ADMIN_EMAIL=admin@example.com \ ADMIN_PASSWORD='StrongPass123' \ make admin-create ``` ## Backups Create a database dump: ```bash make backup ``` Restore requires an explicit confirmation: ```bash BACKUP_FILE=backups/smm-YYYYMMDD-HHMMSS.sql CONFIRM_RESTORE=yes make restore ``` ## Provider The provider integration is Perfect Panel-compatible: - `services` - `add` - `status` - `balance` Configure the real provider using `PROVIDER_API_URL` and `PROVIDER_API_KEY`. Provider keys are never exposed to the frontend. ## Notes - All wallet balance changes go through `wallet.service.js`. - Money is stored as SQL `DECIMAL` and calculated using fixed-scale `BigInt` helpers. - Partial provider orders are recorded for admin review; no automatic partial refund is performed until provider semantics are confirmed.