Skip to content

v0.13.0

Choose a tag to compare

@ami-facturadirecta ami-facturadirecta released this 30 Sep 15:18
· 1 commit to main since this release

Añadido

  • Empresas y permisos por conexión (ADR-0006 del monorepo): tras el login
    OAuth, el CLI abre una página de FacturaDirecta para elegir a qué empresas
    accede y con qué permisos en cada área, espera a que lo confirmes y guarda
    la conexión en el perfil (id, secreto, URL de gestión y nombre; permisos
    0600). Cada petición a la API lleva la cabecera FD-Connection. Con
    --device o --no-browser la URL solo se imprime. Si cancelas o la
    solicitud caduca, el login falla sin guardar nada (el perfil anterior queda
    como estaba); si el servidor aún no admite conexiones, avisa y sigue sin
    ella. Con --api-key no hay paso de conexión.
  • login --no-connection: se salta la conexión (acceso a todas tus empresas
    con los permisos de tu rol) e inicia sesión con el cliente OAuth
    facturadirecta-api, el único con el que la API admite peticiones sin
    conexión.
  • facturadirecta auth permissions: abre (o imprime, con --no-browser) la
    página para cambiar las empresas y permisos de la conexión del perfil, sin
    volver a iniciar sesión. Sin conexión, falla con connection_required y la
    pista de login.
  • auth status y auth profile muestran la conexión (aplicación, id y URL de
    gestión); auth profile, además, los permisos de la conexión en cada
    empresa.
  • whoami muestra la conexión y los permisos de la conexión en cada empresa.
    En JSON (whoami --json, la llamada inicial de los agentes) añade
    connection (id, clientName y manageUrl: la de /profile o, si no
    la trae, la del perfil guardado; nunca el secreto) y, en cada empresa de
    companies y en company, permissions (área → read, full…) y
    manageUrl. Sin conexión esos campos no aparecen.
  • Nuevos códigos de error para los 401/403 de la API con conexiones, los
    mismos que el MCP (exit 3): connection_permission_insufficient y
    company_not_in_connection (pista facturadirecta auth permissions, con
    data.manageUrl y data.companyId), user_role_insufficient,
    plan_api_not_available, token_scope_missing (pista login --scope full),
    connection_required y connection_revoked (pista login). Con estos
    códigos, el texto para humanos es HTTP 403: <mensaje> en vez del cuerpo
    JSON. Sin code, todo sigue igual.
  • Variables de entorno para probar contra otro entorno:
    FACTURADIRECTA_SERVER (servidor de la API que el login guarda en el
    perfil) y FACTURADIRECTA_OAUTH_CLIENT_ID (fuerza el cliente OAuth del
    login; por defecto facturadirecta-cli y, con --no-connection,
    facturadirecta-api).
  • Comando oculto facturadirecta __surface: imprime en JSON el árbol completo
    de comandos visibles (ruta, padre, textos, uso, subcomandos y flags propias),
    las flags globales y los grupos de la ayuda raíz. make surface-json lo
    escribe en dist/commands.json.
  • Cada release adjunta ese JSON como asset commands.json en
    facturadirecta/cli, con URL estable
    https://github.com/facturadirecta/cli/releases/latest/download/commands.json.
    La web de desarrolladores genera con él la referencia del CLI.

Cambiado

  • El login OAuth usa por defecto el cliente propio del CLI,
    facturadirecta-cli (antes facturadirecta-api, compartido con Zapier y
    las integraciones): con él, la API exige la conexión (connection_required
    sin ella). Necesita ese cliente en el realm de Keycloak (tarea 6 de
    tools/mcp-connect-clients.sh del repo keycloak) y la API con conexiones.
    Los perfiles existentes siguen funcionando con facturadirecta-api hasta el
    siguiente login. --no-connection usa facturadirecta-api.
  • logout revoca la conexión del perfil en FacturaDirecta antes de borrarlo;
    si no puede, avisa y cierra la sesión igualmente. Volver a iniciar sesión
    sobre un perfil con otra conexión también la revoca.
  • El perfil guarda el cliente OAuth del login y el token se renueva siempre
    con él (los perfiles anteriores, con facturadirecta-api).