Легковесный агент для интеграции SHM биллинга с Remnawave API.
- Использует @remnawave/backend-contract — типобезопасные API вызовы
- Последовательная обработка — запросы выполняются по очереди через семафор
- Credentials в заголовках —
apiHostиtokenпередаются через HTTP-заголовки
git clone https://github.com/bkeenke/sra
cd sra
Указать версию внутри
docker compose up -dВсе запросы требуют заголовков:
| Заголовок | Описание |
|---|---|
X-Api-Host |
URL Remnawave API (например, https://panel.example.com) |
X-Api-Token |
Bearer токен для авторизации |
Health check endpoint.
{
"status": "ok",
"timestamp": "2026-01-01T21:00:00.000Z",
"service": "sra"
}Статус очереди агента.
{
"success": true,
"response": {
"service": "sra",
"queue": {
"isProcessing": false,
"queueLength": 0
}
}
}Создание нового пользователя.
{
"username": "user123",
"expireAt": "2026-12-31T23:59:59.000Z",
"trafficLimitBytes": 268435456000,
"trafficLimitStrategy": "MONTH_ROLLING",
"hwidDeviceLimit": 2,
"tag": "SHM",
"activeInternalSquads": ["uuid1", "uuid2"],
"externalSquadUuid": "uuid"
}Активация (разблокировка) пользователя.
{
"uuid": "user-uuid",
"expireAt": "2026-12-31T23:59:59.000Z"
}Блокировка пользователя.
{
"uuid": "user-uuid"
}Удаление пользователя.
{
"uuid": "user-uuid"
}Продление подписки.
{
"uuid": "user-uuid",
"expireAt": "2026-12-31T23:59:59.000Z",
"resetTraffic": true
}Получение информации о пользователе.
{
"uuid": "user-uuid"
}Ответ:
{
"success": true,
"response": { ... }
}Пример вызова из SHM шаблона:
# CREATE
curl -sk -XPOST "http://shm-agent:3100/api/create" \
-H "Content-Type: application/json" \
-H "X-Api-Host: $REMNAWAVE_HOST" \
-H "X-Api-Token: $TOKEN" \
-d '{
"username": "shm_{{ us.id }}",
"expireAt": "{{ new_expire }}",
"trafficLimitBytes": {{ data_limit }},
"trafficLimitStrategy": "{{ reset_strategy }}",
"hwidDeviceLimit": {{ HWID_LIMIT }},
"tag": "SHM"
}'
# BLOCK
curl -sk -XPOST "http://shm-agent:3100/api/block" \
-H "Content-Type: application/json" \
-H "X-Api-Host: $REMNAWAVE_HOST" \
-H "X-Api-Token: $TOKEN" \
-d '{"uuid": "{{ uuid }}"}'
# PROLONGATE
curl -sk -XPOST "http://shm-agent:3100/api/prolongate" \
-H "Content-Type: application/json" \
-H "X-Api-Host: $REMNAWAVE_HOST" \
-H "X-Api-Token: $TOKEN" \
-d '{
"uuid": "{{ uuid }}",
"expireAt": "{{ new_expire }}",
"resetTraffic": true
}'| Переменная | Описание | По умолчанию |
|---|---|---|
PORT |
Порт сервиса | 3100 |
NODE_ENV |
Окружение | production |
AGPL-3.0-only