diff --git a/elydora/async_client.py b/elydora/async_client.py index 222bc38..0c4fe90 100644 --- a/elydora/async_client.py +++ b/elydora/async_client.py @@ -3,6 +3,7 @@ from __future__ import annotations import warnings +from urllib.parse import quote from typing import Any, Dict, List, Optional, Union import aiohttp @@ -212,19 +213,19 @@ class AsyncElydoraClient: return await self._request("POST", "/v1/agents/register", json_body=request) async def get_agent(self, agent_id: str) -> GetAgentResponse: - return await self._request("GET", f"/v1/agents/{agent_id}") + return await self._request("GET", f"/v1/agents/{quote(agent_id, safe='')}") async def list_agents(self) -> ListAgentsResponse: return await self._request("GET", "/v1/agents") async def freeze_agent(self, agent_id: str, reason: str) -> FreezeAgentResponse: return await self._request( - "POST", f"/v1/agents/{agent_id}/freeze", json_body={"reason": reason} + "POST", f"/v1/agents/{quote(agent_id, safe='')}/freeze", json_body={"reason": reason} ) async def unfreeze_agent(self, agent_id: str, reason: str) -> UnfreezeAgentResponse: return await self._request( - "POST", f"/v1/agents/{agent_id}/unfreeze", json_body={"reason": reason} + "POST", f"/v1/agents/{quote(agent_id, safe='')}/unfreeze", json_body={"reason": reason} ) async def update_agent( @@ -232,15 +233,15 @@ class AsyncElydoraClient: ) -> UpdateAgentResponse: require_integration_type(integration_type) return await self._request( - "PATCH", f"/v1/agents/{agent_id}", json_body={"integration_type": integration_type} + "PATCH", f"/v1/agents/{quote(agent_id, safe='')}", json_body={"integration_type": integration_type} ) async def delete_agent(self, agent_id: str) -> DeleteAgentResponse: - return await self._request("DELETE", f"/v1/agents/{agent_id}") + return await self._request("DELETE", f"/v1/agents/{quote(agent_id, safe='')}") async def revoke_key(self, agent_id: str, kid: str, reason: str) -> None: await self._request( - "POST", f"/v1/agents/{agent_id}/revoke", json_body={"kid": kid, "reason": reason} + "POST", f"/v1/agents/{quote(agent_id, safe='')}/revoke", json_body={"kid": kid, "reason": reason} ) def create_operation( diff --git a/elydora/client.py b/elydora/client.py index feb54a3..c32b2d9 100644 --- a/elydora/client.py +++ b/elydora/client.py @@ -3,6 +3,7 @@ from __future__ import annotations import warnings +from urllib.parse import quote from typing import Any, Dict, List, Optional, Union import requests @@ -198,29 +199,29 @@ class ElydoraClient: return self._request("POST", "/v1/agents/register", json_body=request) def get_agent(self, agent_id: str) -> GetAgentResponse: - return self._request("GET", f"/v1/agents/{agent_id}") + return self._request("GET", f"/v1/agents/{quote(agent_id, safe='')}") def list_agents(self) -> ListAgentsResponse: return self._request("GET", "/v1/agents") def freeze_agent(self, agent_id: str, reason: str) -> FreezeAgentResponse: - return self._request("POST", f"/v1/agents/{agent_id}/freeze", json_body={"reason": reason}) + return self._request("POST", f"/v1/agents/{quote(agent_id, safe='')}/freeze", json_body={"reason": reason}) def unfreeze_agent(self, agent_id: str, reason: str) -> UnfreezeAgentResponse: - return self._request("POST", f"/v1/agents/{agent_id}/unfreeze", json_body={"reason": reason}) + return self._request("POST", f"/v1/agents/{quote(agent_id, safe='')}/unfreeze", json_body={"reason": reason}) def update_agent(self, agent_id: str, integration_type: IntegrationType) -> UpdateAgentResponse: require_integration_type(integration_type) return self._request( - "PATCH", f"/v1/agents/{agent_id}", json_body={"integration_type": integration_type} + "PATCH", f"/v1/agents/{quote(agent_id, safe='')}", json_body={"integration_type": integration_type} ) def delete_agent(self, agent_id: str) -> DeleteAgentResponse: - return self._request("DELETE", f"/v1/agents/{agent_id}") + return self._request("DELETE", f"/v1/agents/{quote(agent_id, safe='')}") def revoke_key(self, agent_id: str, kid: str, reason: str) -> None: self._request( - "POST", f"/v1/agents/{agent_id}/revoke", json_body={"kid": kid, "reason": reason} + "POST", f"/v1/agents/{quote(agent_id, safe='')}/revoke", json_body={"kid": kid, "reason": reason} ) def create_operation( diff --git a/elydora/types.py b/elydora/types.py index d43e82f..af5e79d 100644 --- a/elydora/types.py +++ b/elydora/types.py @@ -359,6 +359,7 @@ class RotateApiTokenResponse(TypedDict): token: str expires_at: Optional[int] token_id: str + previous_token_grace_until: int class HealthResponse(TypedDict):