diff --git a/client/src/lib/api.ts b/client/src/lib/api.ts index 4e91fdf..d28791d 100644 --- a/client/src/lib/api.ts +++ b/client/src/lib/api.ts @@ -177,13 +177,8 @@ export const apiClient = { async checkCitesApiStatus(): Promise { try { - // We'll use the token endpoint to check if the CITES API is accessible - const token = await this.getToken(); - return { - success: true, - connected: !!token, - message: token ? "CITES API is connected" : "CITES API token not found" - }; + const response = await axios.get("/api/cites/status"); + return response.data; } catch (error: any) { return { success: false, diff --git a/server/routes.ts b/server/routes.ts index 16021e8..5b4a2aa 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -213,6 +213,56 @@ export async function registerRoutes(app: Express): Promise { } }); + // CITES API Status check endpoint + app.get("/api/cites/status", async (req: Request, res: Response) => { + try { + const activeToken = await storage.getActiveToken(); + + if (!activeToken || !activeToken.token) { + return res.status(401).json({ + success: false, + connected: false, + message: "CITES API token is not configured" + }); + } + + try { + // Make a request to the CITES API to verify the token + const response = await axios.get(`${CITES_BASE_URL}/taxon_concepts/search`, { + params: { + page: 1, + per_page: 1 + }, + headers: { + 'X-Authentication-Token': activeToken.token + } + }); + + res.json({ + success: true, + connected: true, + message: "CITES API is connected and responding" + }); + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + return res.status(error.response.status).json({ + success: false, + connected: false, + message: "Failed to connect to CITES API or invalid token", + status: error.response.status + }); + } + throw error; + } + } catch (error) { + res.status(500).json({ + success: false, + connected: false, + message: "Error checking CITES API status" + }); + } + }); + // IUCN API Status check endpoint app.get("/api/iucn/status", async (req: Request, res: Response) => { try { @@ -220,13 +270,14 @@ export async function registerRoutes(app: Express): Promise { if (!apiKey) { return res.status(401).json({ success: false, + connected: false, message: "IUCN API key is not configured" }); } - // Use a region endpoint which is simpler and less prone to errors + // Use the version endpoint which is the simplest endpoint try { - const response = await axios.get(`${IUCN_BASE_URL}/region/list`, { + const response = await axios.get(`${IUCN_BASE_URL}/version`, { params: { token: apiKey } });