fix: create fresh gql client per request to avoid transport state issues

This commit is contained in:
0xallam
2026-01-17 21:54:56 -08:00
committed by Ahmed Allam
parent 2ebfd20db5
commit 7ff0e68466

View File

@@ -28,10 +28,12 @@ class ProxyManager:
"https": f"http://{host}:{CAIDO_PORT}", "https": f"http://{host}:{CAIDO_PORT}",
} }
self.auth_token = auth_token or os.getenv("CAIDO_API_TOKEN") self.auth_token = auth_token or os.getenv("CAIDO_API_TOKEN")
self.transport = RequestsHTTPTransport(
def _get_client(self) -> Client:
transport = RequestsHTTPTransport(
url=self.base_url, headers={"Authorization": f"Bearer {self.auth_token}"} url=self.base_url, headers={"Authorization": f"Bearer {self.auth_token}"}
) )
self.client = Client(transport=self.transport, fetch_schema_from_transport=False) return Client(transport=transport, fetch_schema_from_transport=False)
def list_requests( def list_requests(
self, self,
@@ -90,7 +92,7 @@ class ProxyManager:
} }
try: try:
result = self.client.execute(query, variable_values=variables) result = self._get_client().execute(query, variable_values=variables)
data = result.get("requestsByOffset", {}) data = result.get("requestsByOffset", {})
nodes = [edge["node"] for edge in data.get("edges", [])] nodes = [edge["node"] for edge in data.get("edges", [])]
@@ -137,7 +139,9 @@ class ProxyManager:
return {"error": f"Invalid part '{part}'. Use 'request' or 'response'"} return {"error": f"Invalid part '{part}'. Use 'request' or 'response'"}
try: try:
result = self.client.execute(gql(queries[part]), variable_values={"id": request_id}) result = self._get_client().execute(
gql(queries[part]), variable_values={"id": request_id}
)
request_data = result.get("request", {}) request_data = result.get("request", {})
if not request_data: if not request_data:
@@ -435,7 +439,9 @@ class ProxyManager:
} }
def _handle_scope_list(self) -> dict[str, Any]: def _handle_scope_list(self) -> dict[str, Any]:
result = self.client.execute(gql("query { scopes { id name allowlist denylist indexed } }")) result = self._get_client().execute(
gql("query { scopes { id name allowlist denylist indexed } }")
)
scopes = result.get("scopes", []) scopes = result.get("scopes", [])
return {"scopes": scopes, "count": len(scopes)} return {"scopes": scopes, "count": len(scopes)}
@@ -443,7 +449,7 @@ class ProxyManager:
if not scope_id: if not scope_id:
return self._handle_scope_list() return self._handle_scope_list()
result = self.client.execute( result = self._get_client().execute(
gql( gql(
"query GetScope($id: ID!) { scope(id: $id) { id name allowlist denylist indexed } }" "query GetScope($id: ID!) { scope(id: $id) { id name allowlist denylist indexed } }"
), ),
@@ -472,7 +478,7 @@ class ProxyManager:
} }
""") """)
result = self.client.execute( result = self._get_client().execute(
mutation, mutation,
variable_values={ variable_values={
"input": { "input": {
@@ -512,7 +518,7 @@ class ProxyManager:
} }
""") """)
result = self.client.execute( result = self._get_client().execute(
mutation, mutation,
variable_values={ variable_values={
"id": scope_id, "id": scope_id,
@@ -535,7 +541,7 @@ class ProxyManager:
if not scope_id: if not scope_id:
return {"error": "scope_id required for delete"} return {"error": "scope_id required for delete"}
result = self.client.execute( result = self._get_client().execute(
gql("mutation DeleteScope($id: ID!) { deleteScope(id: $id) { deletedId } }"), gql("mutation DeleteScope($id: ID!) { deleteScope(id: $id) { deletedId } }"),
variable_values={"id": scope_id}, variable_values={"id": scope_id},
) )
@@ -612,7 +618,7 @@ class ProxyManager:
} }
} }
""") """)
result = self.client.execute( result = self._get_client().execute(
query, variable_values={"parentId": parent_id, "depth": depth} query, variable_values={"parentId": parent_id, "depth": depth}
) )
data = result.get("sitemapDescendantEntries", {}) data = result.get("sitemapDescendantEntries", {})
@@ -629,7 +635,7 @@ class ProxyManager:
} }
} }
""") """)
result = self.client.execute(query, variable_values={"scopeId": scope_id}) result = self._get_client().execute(query, variable_values={"scopeId": scope_id})
data = result.get("sitemapRootEntries", {}) data = result.get("sitemapRootEntries", {})
all_nodes = [edge["node"] for edge in data.get("edges", [])] all_nodes = [edge["node"] for edge in data.get("edges", [])]
@@ -736,7 +742,7 @@ class ProxyManager:
} }
""") """)
result = self.client.execute(query, variable_values={"id": entry_id}) result = self._get_client().execute(query, variable_values={"id": entry_id})
entry = result.get("sitemapEntry") entry = result.get("sitemapEntry")
if not entry: if not entry: