diff --git a/apps/api/scripts/rotate-abha-secret.ts b/apps/api/scripts/rotate-abha-secret.ts
index 9875733af..22a29ec23 100644
--- a/apps/api/scripts/rotate-abha-secret.ts
+++ b/apps/api/scripts/rotate-abha-secret.ts
@@ -53,8 +53,8 @@ async function main() {
encryption_iv: iv,
encryption_salt: salt,
});
- } catch (err: any) {
- logger.error(`Failed to rotate secret for user ${record.user_id}: ${err.message}`);
+ } catch (err: unknown) {
+ logger.error(`Failed to rotate secret for user ${record.user_id}: ${err instanceof Error ? err.message : String(err)}`);
}
}
diff --git a/apps/api/src/routes/abha.ts b/apps/api/src/routes/abha.ts
index 06df04873..4e1f96602 100644
--- a/apps/api/src/routes/abha.ts
+++ b/apps/api/src/routes/abha.ts
@@ -125,10 +125,9 @@ router.get(
const result = await getAbhaStatus(userId);
res.status(200).json(result);
- } catch (error) {
- res.status(500).json({
- error: error instanceof Error ? error.message : "Failed to check ABHA status",
- });
+ } catch (error: unknown) {
+ console.error("ABHA linking error:", error);
+ res.status(500).json({ error: error instanceof Error ? error.message : "Failed to link ABHA address" });
}
}
);
@@ -294,9 +293,9 @@ router.get(
const metricsResult = await downloadHealthRecords(userId);
res.status(200).json(metricsResult);
- } catch (error: any) {
+ } catch (error: unknown) {
res.status(500).json({
- error: error.message || "Records processing engine encountered an error",
+ error: error instanceof Error ? error.message : "Records processing engine encountered an error",
});
}
}
diff --git a/apps/api/src/routes/compare.ts b/apps/api/src/routes/compare.ts
index cbd23ed6b..4a9d75ffa 100644
--- a/apps/api/src/routes/compare.ts
+++ b/apps/api/src/routes/compare.ts
@@ -84,9 +84,9 @@ router.post(
}
res.status(200).json(resultData);
- } catch (mlError: any) {
+ } catch (mlError: unknown) {
clearTimeout(timeoutId);
- logger.error(`Failed to connect or fetch from ML Service: ${mlError.message}`);
+ logger.error("ML service failed, falling back to basic matching", { error: mlError instanceof Error ? mlError.message : String(mlError) });
res.status(502).json({ error: "ML service comparison failed or timed out." });
}
} catch (error) {
diff --git a/apps/api/src/routes/eligibility.ts b/apps/api/src/routes/eligibility.ts
index 163085bfb..b7bdaecd4 100644
--- a/apps/api/src/routes/eligibility.ts
+++ b/apps/api/src/routes/eligibility.ts
@@ -192,10 +192,10 @@ router.post("/", eligibilityLimiter, async (req: Request, res: Response): Promis
});
res.status(200).json({ eligible_schemes });
return;
- } catch (err: any) {
+ } catch (err: unknown) {
logger.error("Error calling PM-JAY eligibility service", {
- error: err.message || String(err),
- name: err.name,
+ error: err instanceof Error ? err.message : String(err),
+ name: err instanceof Error ? err.name : "Unknown",
});
if (err instanceof PmjayAuthError) {
diff --git a/apps/api/src/routes/map.ts b/apps/api/src/routes/map.ts
index 17f87cb79..5d5b79de7 100644
--- a/apps/api/src/routes/map.ts
+++ b/apps/api/src/routes/map.ts
@@ -153,7 +153,7 @@ router.get(
pharmacies = Array.isArray(rpcData)
? (rpcData as PharmacyRpcResult[]).map(formatNearbyPharmacy)
: [];
- } catch (err: any) {
+ } catch (err: unknown) {
logger.warn({
message: "get_nearest_pharmacies RPC failed, falling back to db query",
error: err,
@@ -219,7 +219,7 @@ router.get(
if (rpcError) throw rpcError;
ashaWorkers = Array.isArray(rpcData) ? rpcData : [];
- } catch (err: any) {
+ } catch (err: unknown) {
logger.warn({
message: "get_nearest_asha_workers RPC failed, falling back to db query",
error: err,
diff --git a/apps/api/src/routes/notifications.ts b/apps/api/src/routes/notifications.ts
index 2b4c8b15a..8b339a2fa 100644
--- a/apps/api/src/routes/notifications.ts
+++ b/apps/api/src/routes/notifications.ts
@@ -362,9 +362,9 @@ router.get("/status", limiter, optionalAuth, async (req: AuthenticatedRequest, r
} else {
subscriber = data;
}
- } catch (dbError: any) {
+ } catch (dbError: unknown) {
dbFailed = true;
- const msg = dbError?.message || String(dbError);
+ const msg = dbError instanceof Error ? dbError.message : String(dbError);
if (
msg.includes("fetch failed") ||
msg.includes("refused") ||
@@ -467,9 +467,9 @@ router.post(
} else {
existing = data;
}
- } catch (dbError: any) {
+ } catch (dbError: unknown) {
dbFailed = true;
- const msg = dbError?.message || String(dbError);
+ const msg = dbError instanceof Error ? dbError.message : String(dbError);
if (
msg.includes("fetch failed") ||
msg.includes("refused") ||
@@ -706,9 +706,9 @@ router.post(
} else {
subscriber = data;
}
- } catch (dbError: any) {
+ } catch (dbError: unknown) {
dbFailed = true;
- const msg = dbError?.message || String(dbError);
+ const msg = dbError instanceof Error ? dbError.message : String(dbError);
if (
msg.includes("fetch failed") ||
msg.includes("refused") ||
@@ -991,9 +991,9 @@ router.patch(
} else {
data = dbData;
}
- } catch (dbError: any) {
+ } catch (dbError: unknown) {
dbFailed = true;
- const msg = dbError?.message || String(dbError);
+ const msg = dbError instanceof Error ? dbError.message : String(dbError);
if (
msg.includes("fetch failed") ||
msg.includes("refused") ||
@@ -1074,9 +1074,9 @@ router.delete("/phone", limiter, optionalAuth, async (req: AuthenticatedRequest,
} else {
data = dbData;
}
- } catch (dbError: any) {
+ } catch (dbError: unknown) {
dbFailed = true;
- const msg = dbError?.message || String(dbError);
+ const msg = dbError instanceof Error ? dbError.message : String(dbError);
if (
msg.includes("fetch failed") ||
msg.includes("refused") ||
diff --git a/apps/api/src/routes/pharmacies.ts b/apps/api/src/routes/pharmacies.ts
index f6c1e1672..b729c3da3 100644
--- a/apps/api/src/routes/pharmacies.ts
+++ b/apps/api/src/routes/pharmacies.ts
@@ -367,9 +367,10 @@ router.post(
const pharmacy = await pharmacyService.registerPharmacy(parsed.data, req.user.id);
res.status(201).json({ pharmacy });
- } catch (err: any) {
- if (err.status) {
- res.status(err.status).json({ error: err.message });
+ } catch (err: unknown) {
+ const status = err && typeof err === 'object' && 'status' in err ? (err as any).status : null;
+ if (status) {
+ res.status(status).json({ error: err instanceof Error ? err.message : String(err) });
return;
}
next(err);
@@ -601,12 +602,13 @@ router.get(
const result = await pharmacyService.searchByMedicine(rawQuery);
res.json(result);
- } catch (err: any) {
- if (err.status) {
- res.status(err.status).json({ error: err.message });
+ } catch (err: unknown) {
+ const status = err && typeof err === 'object' && 'status' in err ? (err as any).status : null;
+ if (status) {
+ res.status(status).json({ error: err instanceof Error ? err.message : String(err) });
return;
}
- logger.error("Pharmacy medicine search failed", { error: err.message });
+ logger.error("Pharmacy medicine search failed", { error: err instanceof Error ? err.message : String(err) });
res.status(500).json({ error: "Database query failed" });
}
}
@@ -979,7 +981,7 @@ router.post(
);
res.end();
}
- } catch (err: any) {
+ } catch (err: unknown) {
const message = err instanceof Error ? err.message : "Unknown error";
logger.error(`Exception in bulk operations handler: ${message}`);
if (!res.headersSent) {
@@ -1018,9 +1020,10 @@ router.put(
req.body
);
res.status(200).json({ pharmacy });
- } catch (err: any) {
- if (err.status) {
- res.status(err.status).json({ error: err.message });
+ } catch (err: unknown) {
+ const status = err && typeof err === 'object' && 'status' in err ? (err as any).status : null;
+ if (status) {
+ res.status(status).json({ error: err instanceof Error ? err.message : String(err) });
return;
}
next(err);
@@ -1045,9 +1048,10 @@ router.delete(
const pharmacyId = String(req.params.id);
await pharmacyService.deletePharmacy(pharmacyId, req.user!.id, req.user!.role);
res.status(200).json({ message: "Pharmacy deleted successfully" });
- } catch (err: any) {
- if (err.status) {
- res.status(err.status).json({ error: err.message });
+ } catch (err: unknown) {
+ const status = err && typeof err === 'object' && 'status' in err ? (err as any).status : null;
+ if (status) {
+ res.status(status).json({ error: err instanceof Error ? err.message : String(err) });
return;
}
next(err);
@@ -1079,12 +1083,13 @@ router.post(
fileContent
);
res.status(200).json(result);
- } catch (err: any) {
- if (err.status) {
- res.status(err.status).json({ error: err.message });
+ } catch (err: unknown) {
+ const status = err && typeof err === 'object' && 'status' in err ? (err as any).status : null;
+ if (status) {
+ res.status(status).json({ error: err instanceof Error ? err.message : String(err) });
return;
}
- logger.error(`Exception in specific pharmacy upload handler: ${err.message}`);
+ logger.error(`Exception in specific pharmacy upload handler: ${err instanceof Error ? err.message : String(err)}`);
next(err);
}
}
diff --git a/apps/api/src/services/governmentEligibility.ts b/apps/api/src/services/governmentEligibility.ts
index 4b72fe3d4..9530a852b 100644
--- a/apps/api/src/services/governmentEligibility.ts
+++ b/apps/api/src/services/governmentEligibility.ts
@@ -268,9 +268,9 @@ export async function fetchPmjayEligibility(
how_to_apply: s.how_to_apply,
link: s.link,
}));
- } catch (err: any) {
+ } catch (err: unknown) {
logger.error("Error evaluating eligibility: ", err);
- const errName = err?.name;
+ const errName = err instanceof Error ? err.name : null;
if (
err instanceof PmjayAuthError ||
errName === "PmjayAuthError" ||
diff --git a/apps/web/app/[locale]/(dashboard)/pharmacy/inventory/bulk-upload/page.tsx b/apps/web/app/[locale]/(dashboard)/pharmacy/inventory/bulk-upload/page.tsx
index dd7d513bf..27b1d9cfd 100644
--- a/apps/web/app/[locale]/(dashboard)/pharmacy/inventory/bulk-upload/page.tsx
+++ b/apps/web/app/[locale]/(dashboard)/pharmacy/inventory/bulk-upload/page.tsx
@@ -148,19 +148,14 @@ export default function BulkUploadPage() {
errors: data.errors,
});
}
- } catch (parseErr: any) {
- if (
- parseErr.message !== "Unexpected end of JSON input" &&
- !parseErr.message.includes("JSON")
- ) {
- throw parseErr;
- }
+ } catch (parseErr: unknown) {
+ throw parseErr;
}
}
}
}
- } catch (err: any) {
- setApiError(err.message || "An unexpected error occurred.");
+ } catch (err: unknown) {
+ setApiError(err instanceof Error ? err.message : "An unexpected error occurred.");
} finally {
setIsLoading(false);
setProgressStats(null);
diff --git a/apps/web/app/[locale]/admin/dashboard/page.tsx b/apps/web/app/[locale]/admin/dashboard/page.tsx
index 8144b79bc..68d98a426 100644
--- a/apps/web/app/[locale]/admin/dashboard/page.tsx
+++ b/apps/web/app/[locale]/admin/dashboard/page.tsx
@@ -262,11 +262,11 @@ export default function AdminDashboard() {
keys!
>
);
- } catch (err: any) {
+ } catch (err: unknown) {
notify(
<>
{" "}
- {err.message || "Cache flush failed"}
+ {err instanceof Error ? err.message : "Cache flush failed"}
>,
false
);
diff --git a/apps/web/app/[locale]/admin/synonyms/page.tsx b/apps/web/app/[locale]/admin/synonyms/page.tsx
index 2cecb1b58..5a506769a 100644
--- a/apps/web/app/[locale]/admin/synonyms/page.tsx
+++ b/apps/web/app/[locale]/admin/synonyms/page.tsx
@@ -94,8 +94,8 @@ export default function AdminSynonymsPage() {
if (error) throw error;
setSynonyms(data as OcrSynonym[]);
- } catch (err: any) {
- setError(err.message || t("fetchError"));
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : t("fetchError"));
} finally {
setLoading(false);
}
@@ -136,8 +136,8 @@ export default function AdminSynonymsPage() {
setNormalizedTerm("");
await fetchSynonyms();
await invalidateCache();
- } catch (err: any) {
- setError(err.message || t("addError"));
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : t("addError"));
} finally {
setActionLoading(null);
}
@@ -154,8 +154,8 @@ export default function AdminSynonymsPage() {
await fetchSynonyms();
await invalidateCache();
- } catch (err: any) {
- setError(err.message || t("deleteError"));
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : t("deleteError"));
} finally {
setActionLoading(null);
}
@@ -220,8 +220,8 @@ export default function AdminSynonymsPage() {
await fetchSynonyms();
await invalidateCache();
toast.success(t("uploadSuccess", { count: payload.length }));
- } catch (err: any) {
- setError(err.message || t("uploadError"));
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : t("uploadError"));
if (fileInputRef.current) fileInputRef.current.value = "";
} finally {
setActionLoading(null);
diff --git a/apps/web/app/[locale]/calculator/page.tsx b/apps/web/app/[locale]/calculator/page.tsx
index 774c6cd82..cae4380dd 100644
--- a/apps/web/app/[locale]/calculator/page.tsx
+++ b/apps/web/app/[locale]/calculator/page.tsx
@@ -44,8 +44,8 @@ async function searchMedicines(query: string): Promise {
composition: row.composition,
cdsco_approval_status: row.cdsco_approval_status || "approved",
}));
- } catch (error: any) {
- console.error(error.message || error);
+ } catch (error: unknown) {
+ console.error(error instanceof Error ? error.message : error);
return [];
}
}
diff --git a/apps/web/app/[locale]/components/Chatbot.tsx b/apps/web/app/[locale]/components/Chatbot.tsx
index d29525689..ab16fc6ad 100644
--- a/apps/web/app/[locale]/components/Chatbot.tsx
+++ b/apps/web/app/[locale]/components/Chatbot.tsx
@@ -192,7 +192,7 @@ export default function Chatbot() {
msg.id === typingMessage.id ? { id: msg.id, text: finalText, isBot: true } : msg
);
});
- } catch (error: any) {
+ } catch (error: unknown) {
if (isAbortError(error)) return;
console.error("Chatbot API Error:", error);
diff --git a/apps/web/app/[locale]/interaction-checker/page.tsx b/apps/web/app/[locale]/interaction-checker/page.tsx
index 1b0951288..ccaa91e21 100644
--- a/apps/web/app/[locale]/interaction-checker/page.tsx
+++ b/apps/web/app/[locale]/interaction-checker/page.tsx
@@ -229,8 +229,8 @@ export default function InteractionCheckerPage() {
setInteractions(sorted);
setIsOfflineResult(response.verified === false);
setHasChecked(true);
- } catch (err: any) {
- setError(err.message || t("errorMessage"));
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : t("errorMessage"));
} finally {
setIsLoading(false);
}
diff --git a/apps/web/app/[locale]/scan/page.tsx b/apps/web/app/[locale]/scan/page.tsx
index 55e5d246b..8ca72aabf 100644
--- a/apps/web/app/[locale]/scan/page.tsx
+++ b/apps/web/app/[locale]/scan/page.tsx
@@ -248,8 +248,8 @@ export default function ScanPage() {
try {
await handleVerify(scannedText);
- } catch (error: any) {
- setApiError(error.message || "Failed to verify medicine with CDSCO.");
+ } catch (error: unknown) {
+ setApiError(error instanceof Error ? error.message : "Failed to verify medicine with CDSCO.");
} finally {
setIsVerifying(false);
}
diff --git a/apps/web/hooks/useAshaDashboard.ts b/apps/web/hooks/useAshaDashboard.ts
index 2c4f82fe8..cc88901be 100644
--- a/apps/web/hooks/useAshaDashboard.ts
+++ b/apps/web/hooks/useAshaDashboard.ts
@@ -36,8 +36,8 @@ export function useAshaDashboard() {
setStats(statsData);
setLeaderboard(leaderboardData.leaderboard);
- } catch (err: any) {
- setError(err.message || "An error occurred");
+ } catch (err: unknown) {
+ setError(err instanceof Error ? err.message : "An error occurred");
} finally {
setLoading(false);
}
@@ -66,7 +66,7 @@ export function useAshaDashboard() {
setLeaderboard(leaderboardData.leaderboard);
return data;
- } catch (err: any) {
+ } catch (err: unknown) {
console.error(err);
throw err;
}
diff --git a/apps/web/hooks/useLASAChecker.ts b/apps/web/hooks/useLASAChecker.ts
index 18f1d5206..b651e49e3 100644
--- a/apps/web/hooks/useLASAChecker.ts
+++ b/apps/web/hooks/useLASAChecker.ts
@@ -28,8 +28,8 @@ export function useLASAChecker() {
try {
const result = await checkLasaConflicts(query, controller.signal);
setData(result);
- } catch (err: any) {
- if (err.name === "AbortError") {
+ } catch (err: unknown) {
+ if (err instanceof Error && err.name === "AbortError") {
return;
}
console.error("useLASAChecker error:", err);
diff --git a/apps/web/lib/workers/imageEnhancer.worker.ts b/apps/web/lib/workers/imageEnhancer.worker.ts
index 7f262a02b..b41155181 100644
--- a/apps/web/lib/workers/imageEnhancer.worker.ts
+++ b/apps/web/lib/workers/imageEnhancer.worker.ts
@@ -256,7 +256,7 @@ ctx.onmessage = async (event: MessageEvent) => {
);
ctx.postMessage({ id, pixels: enhancedPixels }, [enhancedPixels.buffer]);
}
- } catch (error: any) {
+ } catch (error: unknown) {
ctx.postMessage({
id,
error: error instanceof Error ? error.message : "Image enhancement worker failed.",