feat(infra): auto-commit con 88 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 00:16:46 +02:00
parent 6bc97df5c0
commit eb8dbf66a1
126 changed files with 10933 additions and 287 deletions
@@ -0,0 +1,69 @@
"""Borra una request REST de una team collection de Hoppscotch.
Invoca la mutation GraphQL deleteRequest del backend self-hosted. Protegida por
GqlAuthGuard: el JWT de sesion viaja en la cookie `access_token`.
"""
import requests
_MUTATION = "mutation($r:ID!){ deleteRequest(requestID:$r) }"
def hoppscotch_delete_request(
request_id: str,
*,
access_token: str,
backend_url: str = "http://localhost:3170",
) -> dict:
"""Borra una request de Hoppscotch por su ID.
Args:
request_id: ID de la request a borrar.
access_token: JWT de sesion (de hoppscotch_login). Viaja en la cookie
`access_token`, NO en el header Authorization.
backend_url: base del backend Hoppscotch (sin barra final).
Returns:
Dict. En exito: ``{"status": "ok", "deleted": str}``. En error (GraphQL
errors, deleteRequest != true, HTTP no 200, transporte):
``{"status": "error", "error": str, "data": ...}``.
"""
payload = {
"query": _MUTATION,
"variables": {"r": request_id},
}
try:
resp = requests.post(
f"{backend_url}/graphql",
json=payload,
cookies={"access_token": access_token},
timeout=30.0,
)
except requests.RequestException as exc:
return {"status": "error", "error": f"transport error: {exc}"}
try:
data = resp.json()
except ValueError:
return {
"status": "error",
"error": f"non-JSON response (HTTP {resp.status_code})",
}
if data.get("errors"):
return {
"status": "error",
"error": "graphql errors",
"data": data,
}
deleted = (data.get("data") or {}).get("deleteRequest")
if deleted is not True:
return {
"status": "error",
"error": "deleteRequest did not return true",
"data": data,
}
return {"status": "ok", "deleted": request_id}