Add period-based license keys alongside fixed expiry dates.

New keys default to validDays with countdown starting on first activation; existing expiresAtSec keys behave unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-01 22:46:10 +08:00
parent e299cfc7dd
commit 4b568ceb56
7 changed files with 458 additions and 17 deletions
+4 -1
View File
@@ -65,7 +65,10 @@ npm test
- `POST /v1/admin/revoke``Authorization: Bearer <LICENSE_ADMIN_TOKEN>`, тело `{ "key": "TTRPG-..." }` (один продуктовый ключ) или `{ "sub": "..." }` (все ключи с этим sub, legacy).
- `POST /v1/admin/issue` — админская выдача (`sub`, `pid`, `iat`, `exp`, `did`).
- `GET /v1/admin/licenses` — список продуктовых ключей с активациями и флагом `revoked`.
- `POST /v1/admin/product-keys` — создание нового продуктового ключа (`pid`, `maxDevices`, `expiresAtSec`, опционально `key`, `sub`).
- `POST /v1/admin/product-keys` — создание нового продуктового ключа (`pid`, `maxDevices`, опционально `key`, `sub`).
- **По умолчанию** — period-лицензия: `validDays: 365` (отсчёт с первой активации).
- **Fixed** (фиксированная дата): явно передайте `expiresAtSec` (unix-секунды).
- Нельзя указывать `expiresAtSec` и `validDays` одновременно.
- `GET /health``{ ok: true }`.
## Клиент