Integration
Licensing được tách rời bất thường: nó không gọi HTTP ra ngoài tới service anh em nào và không consume sự kiện nào. Toàn bộ hợp đồng xuyên service của nó là chứng chỉ đã ký mà nó ghi vào Redis, được
LicenseMiddlewarecủa@nx/core(chạy bên trong mọi service khác) đọc.
1. Service anh em
Direction:→gọi /←được gọi /↔hai chiều.
| Anh em | Hướng | Bề mặt | Hợp đồng | Auth | Failure Mode | Idempotency |
|---|---|---|---|---|---|---|
@nx/identity | → | Endpoint JWKS (APP_ENV_JWKS_REST_PATH) | Xác minh JWT (VerifierApplication) | — (public key) | request 401 nếu JWKS không tới được | n/a |
@nx/core | ↔ | Thư viện in-process — schema, repository, LicenseCertSignerHelper (ký), LicenseMiddleware (xác minh) | phụ thuộc compile-time | — | n/a | n/a |
| Mọi service verifier (sale, commerce, inventory, …) | ← | Key Redis lic:certs:<type>:<id> | cert envelope | chữ ký Ed25519 + secret AES | fail-open → license context null | last-write-wins |
Không có SDK client licensing được anh em gọi lúc runtime.
APP_ENV_LICENSING_SERVICE_BASE_URLtồn tại trong env registry của core nhưng kiểm tra runtime licensing được làm từ cert cache, không phải bằng cách gọi licensing.
2. Hệ thống ngoài
| Hệ thống | Hướng | Bề mặt | Auth | Failure Mode |
|---|---|---|---|---|
| Redis | → (ghi) / ← (consumer đọc) | SET/GET lic:certs:* | Password Redis | lỗi ghi được log; cert vẫn lưu trên hàng License.certificate |
| PostgreSQL | ↔ | schema licensing qua Drizzle | DB credential | transactional; rollback khi lỗi |
3. Luồng xuyên service quan trọng
3.1 Thay đổi trạng thái license lan toả tới mọi consumer
| Bước | Chi tiết |
|---|---|
| 1–2 | Transaction suspend commit, rồi publishCertificate() ký lại với status mới |
| 3 | Cert mới ghi đè key Redis (last-write-wins) |
| 4–6 | Request consumer tiếp theo kéo cert tươi; không cần gọi licensing |
Độ trễ lan toả = chỉ tới TTL còn lại của cert hiện có nếu re-publish bị bỏ qua (vd key chưa cấu hình). Với key đã cấu hình, lan toả tức thì ở request consumer tiếp theo.
4. Độ ổn định hợp đồng
| Bề mặt | Độ ổn định | Versioning |
|---|---|---|
REST /v1/api/licensing/* | ổn định | URL /v1/ |
Key cert Redis lic:certs:<type>:<id> | ổn định | — (hình dạng key cố định ở cả signer + middleware) |
Trường alg của cert envelope | ổn định | aes-256-gcm+ed25519; verifier từ chối alg lạ |
Payload cert ILicenseCertificatePayload | ổn định | chỉ thêm (không trường version — phối hợp thay đổi qua @nx/core) |