- /licenses/activate now enforces in-memory IP lockout window for failed attempts
- Device limit enforcement now reads from product config by plan (deviceLimits)
- Successful activation returns { license, accessToken, refreshToken }
- Re-activation on existing device also returns tokens
- Keeps existing license validity checks (status, expiry)
- Verified: tsc --noEmit clean, 19 test files / 178 tests passing
|
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| Dockerfile | ||
| package.json | ||
| tsconfig.json | ||
| vitest.config.ts | ||