Historia de usuario
Como administrador de un proyecto, quiero generar credenciales de servidor (machine-to-machine) scoped a ese proyecto, para que integraciones automatizadas (CLI, backends de state-iac, CI/CD) puedan autenticarse y operar solo dentro de ese proyecto, sin usar una sesión de usuario personal.
Contexto
Depende de la Issue 3 (Project Settings) para la ubicación en UI, y de la Issue 5 (Project Roles) para definir qué permisos tiene la key dentro del proyecto. Como la tabla api_keys ya existe (ligada a userId) pero el mecanismo de autenticación por key nunca se implementó, esta issue cubre ambas cosas: el scoping a proyecto y la validación real de la key en las peticiones.
Extendemos ApiKeyEntity con un projectId opcional (mutuamente excluyente con userId), reutilizando toda la lógica de prefix/hash/rotación ya modelada.
Criterios de aceptación
Notas técnicas
Reutilizar/completar ApiKeysService y ApiKeyRepository (apikeys.service.ts, apikey.repository.ts), ambos scaffoldeados pero sin implementación.
Extender ApiKeyEntity en schemas.ts con projectId nullable + constraint de que exactamente uno de userId/projectId esté presente.
El nuevo path de autenticación en hooks.server.ts convive con el de cookie de sesión existente, sin romperlo.
Fuera de alcance
Completar las Server Access Keys de usuario (global) si quedan pendientes — posible issue conjunta ya que comparten infraestructura.
UI de scopes granulares por key más allá del Project Role asignado (p.ej. limitar a un solo módulo) — se podría añadir después si hace falta.
Historia de usuario
Como administrador de un proyecto, quiero generar credenciales de servidor (machine-to-machine) scoped a ese proyecto, para que integraciones automatizadas (CLI, backends de state-iac, CI/CD) puedan autenticarse y operar solo dentro de ese proyecto, sin usar una sesión de usuario personal.
Contexto
Depende de la Issue 3 (Project Settings) para la ubicación en UI, y de la Issue 5 (Project Roles) para definir qué permisos tiene la key dentro del proyecto. Como la tabla api_keys ya existe (ligada a userId) pero el mecanismo de autenticación por key nunca se implementó, esta issue cubre ambas cosas: el scoping a proyecto y la validación real de la key en las peticiones.
Extendemos ApiKeyEntity con un projectId opcional (mutuamente excluyente con userId), reutilizando toda la lógica de prefix/hash/rotación ya modelada.
Criterios de aceptación
Notas técnicas
Reutilizar/completar ApiKeysService y ApiKeyRepository (apikeys.service.ts, apikey.repository.ts), ambos scaffoldeados pero sin implementación.
Extender ApiKeyEntity en schemas.ts con projectId nullable + constraint de que exactamente uno de userId/projectId esté presente.
El nuevo path de autenticación en hooks.server.ts convive con el de cookie de sesión existente, sin romperlo.
Fuera de alcance
Completar las Server Access Keys de usuario (global) si quedan pendientes — posible issue conjunta ya que comparten infraestructura.
UI de scopes granulares por key más allá del Project Role asignado (p.ej. limitar a un solo módulo) — se podría añadir después si hace falta.