Initial SMM panel implementation
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user