Volver a la wiki

Endpoint /api/tools/deps — API REST de Dependencias

Propósito

Endpoint Pages Function (Cloudflare Workers) que expone el estado de frescura de dependencias del sistema: lee la tabla deps_freshness ([[entity—migrations—table—deps-freshness]]) y permite que el colector (scripts/deps_freshness.py en CreaRack-Pro) publique nuevos snapshots vía POST.

Ubicación

Autenticación

Métodos

GET /api/tools/deps

Propósito: Obtener el snapshot actual de frescura de dependencias, ordenado por avisos de seguridad primero y luego por mayor desfase.

Response (JSON):

{
  "checked_at": "2026-08-28T13:00:00Z",
  "count": 147,
  "items": [
    {
      "repo": "crearack-pro",
      "ecosystem": "pypi",
      "manifest": "requirements.txt",
      "package": "redis",
      "pinned": "==7.4.1",
      "installed": "7.4.1",
      "latest": "8.2.0",
      "lag_kind": "major",
      "is_dev": 0,
      "vuln_count": 0,
      "vuln_ids": null,
      "vuln_severity": null,
      "manifests": "requirements.txt",
      "resolved": "7.4.1",
      "installed_source": "prod",
      "unbounded": 0,
      "unbounded_major": 0,
      "fix_within_spec": null,
      "hold_reason": "La serie 8.x corta el channel layer en vivo",
      "hold_since": "2026-08-28",
      "hold_ref": "task #204 · redis-py #2807",
      "hold_until": "cuando redis-py #2807 se cierre",
      "checked_at": "2026-08-28T13:00:00Z"
    }
  ]
}

Campos de respuesta:

Orden interno (ORDER BY, en este orden): 1) filas con vuln_count > 0 primero, 2) vuln_severity (critical → high → moderate/medium → low → resto), 3) lag_kind (major → minor → patch → unknown → resto), 4) repo, 5) lower(package) (alfabético, sin distinguir mayúsculas). El orden no distingue retenidas — eso lo filtra la UI (pestaña «Retenidas»).

POST /api/tools/deps

Propósito: Reemplazar completamente el snapshot (operación idempotente: DELETE + INSERT batch).

Request (JSON): mismo shape que un item del GET (ver arriba), dentro de {"items": [...]}.

Campos requeridos por fila: repo, ecosystem, manifest, package. Las filas sin alguno de los cuatro se ignoran silenciosamente (continue).

Campos opcionales (admiten null/ausente):

Response (JSON): {"inserted": N, "checked_at": "..."}. 400 si body.items no es array, o si trae más de 5000 filas (cap de tamaño, WS6 B5: el snapshot real ronda unos cientos de paquetes, así que 5000 es margen amplio y evita un batch D1 desmesurado — DELETE + N INSERT atómicos — si llegara un body gigante).

Comportamiento: DELETE FROM deps_freshness → INSERT batch (env.DB.batch()) → responde inserts + timestamp.

Dependencias

Consumidores

Notas de diseño


Véase también

Subir