Módulo API Key
src/app/modules/api-key/
Gestiona las API Keys para clientes externos (integraciones de terceros).
Modelo — ApiKey
| Campo | Tipo | Descripción |
|---|---|---|
_id | ObjectId | ID de MongoDB |
code | string | Hash bcrypt de la key real |
isActive | boolean | Estado activo/inactivo |
dateExpiration | Date | Fecha de expiración |
tenantId | ObjectId → Tenant | Tenant propietario |
createdAt | Date | — |
updatedAt | Date | — |
caution
La key real nunca se almacena. Solo se guarda el hash. Al crear una API Key, la key en texto plano solo se retorna una vez en la respuesta de creación.
Endpoints
:::warning Sin autenticación en el controlador
ApiKeyController no declara @Auth(), @UseGuards ni @RequirePermission, y el snapshot no registra ningún guard global (APP_GUARD). Según el código, estas rutas no exigen sesión. Conviene confirmar si la protección ocurre fuera de la aplicación.
:::
| Método | Ruta | Permiso | Descripción |
|---|---|---|---|
POST | /api/v1/api-keys/create | Ninguno | Crea una API key |
GET | /api/v1/api-keys/get-all | Ninguno | Lista API keys |
GET | /api/v1/api-keys/get-one/:id | Ninguno | Obtiene una key |
GET | /api/v1/api-keys/by-tenant/:tenantId | Ninguno | Lista las keys de un tenant |
PATCH | /api/v1/api-keys/update/:id | Ninguno | Actualiza (activar/desactivar, cambiar expiración) |
DELETE | /api/v1/api-keys/remove/:id | Ninguno | Elimina una key |
DTOs
CreateApiKeyDto
{
tenantId: string // UUID del tenant
dateExpiration: Date
}
UpdateApiKeyDto
{
isActive?: boolean
dateExpiration?: Date
}
Cómo usa el cliente la API Key
El cliente envía la key en el body de cada request protegido por @ApiKeyAuth():
{ "apiKey": "key-en-texto-plano" }
El ApiKeyGuard la hashea y busca en BD.