diff --git a/server/routes.ts b/server/routes.ts index eacc850..0b8c1b1 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -304,9 +304,16 @@ export async function registerRoutes(app: Express): Promise { // IUCN API Status check endpoint - v4 only app.get("/api/iucn/status", async (req: Request, res: Response) => { try { - const activeToken = await storage.getActiveToken(); + // First try to use environment variable for API key + let iucnToken = process.env.IUCN_API_KEY || null; - if (!activeToken?.iucnToken) { + // If not available in env, try to get from storage + if (!iucnToken) { + const activeToken = await storage.getActiveToken(); + iucnToken = activeToken?.iucnToken || null; + } + + if (!iucnToken) { return res.status(401).json({ success: false, connected: false, @@ -318,10 +325,12 @@ export async function registerRoutes(app: Express): Promise { // Check if the API is working by hitting the version endpoint const response = await axios.get("https://apiv4.iucnredlist.org/api/v4/version", { headers: { - "Authorization": `Bearer ${activeToken.iucnToken}` + "Authorization": `Bearer ${iucnToken}` } }); + console.log("IUCN API v4 version check response:", response.data); + return res.json({ success: true, connected: true, @@ -373,9 +382,16 @@ export async function registerRoutes(app: Express): Promise { const nameParts = String(name).split(' '); const [genusName, speciesName] = nameParts; - // Get IUCN token - const activeToken = await storage.getActiveToken(); - if (!activeToken?.iucnToken) { + // Try to get IUCN token from environment variable first + let iucnToken = process.env.IUCN_API_KEY || null; + + // If not available in env, try to get from storage + if (!iucnToken) { + const activeToken = await storage.getActiveToken(); + iucnToken = activeToken?.iucnToken || null; + } + + if (!iucnToken) { return res.status(401).json({ success: false, message: "IUCN API v4 token is not configured. Please set your token in the API Token panel." @@ -386,7 +402,7 @@ export async function registerRoutes(app: Express): Promise { // Use the v4 API with scientific name endpoint const response = await axios.get("https://apiv4.iucnredlist.org/api/v4/taxa/scientific_name", { headers: { - "Authorization": `Bearer ${activeToken.iucnToken}` + "Authorization": `Bearer ${iucnToken}` }, params: { genus_name: genusName, @@ -444,9 +460,16 @@ export async function registerRoutes(app: Express): Promise { const nameParts = String(name).split(' '); const [genusName, speciesName] = nameParts; - // Get IUCN token - const activeToken = await storage.getActiveToken(); - if (!activeToken?.iucnToken) { + // Try to get IUCN token from environment variable first + let iucnToken = process.env.IUCN_API_KEY || null; + + // If not available in env, try to get from storage + if (!iucnToken) { + const activeToken = await storage.getActiveToken(); + iucnToken = activeToken?.iucnToken || null; + } + + if (!iucnToken) { return res.status(401).json({ success: false, message: "IUCN API v4 token is not configured. Please set your token in the API Token panel." @@ -457,7 +480,7 @@ export async function registerRoutes(app: Express): Promise { // First, we need to find the species taxon ID using scientific name lookup const taxaResponse = await axios.get("https://apiv4.iucnredlist.org/api/v4/taxa/scientific_name", { headers: { - "Authorization": `Bearer ${activeToken.iucnToken}` + "Authorization": `Bearer ${iucnToken}` }, params: { genus_name: genusName, @@ -478,7 +501,7 @@ export async function registerRoutes(app: Express): Promise { // Now retrieve the threats using the taxon ID const threatsResponse = await axios.get(`https://apiv4.iucnredlist.org/api/v4/threats`, { headers: { - "Authorization": `Bearer ${activeToken.iucnToken}` + "Authorization": `Bearer ${iucnToken}` }, params: { taxonid: taxonId