fix: resolve JSON parsing error and standardize HTTP client usage

- Fix JSON parsing error in getOrCreateGiteaOrg function (#19)
  - Add content-type validation before JSON parsing
  - Add response cloning for better error debugging
  - Enhance error messages with actual response content
  - Add comprehensive logging for troubleshooting

- Standardize HTTP client usage across codebase
  - Create new http-client.ts utility with consistent error handling
  - Replace all superagent calls with fetch-based functions
  - Replace all axios calls with fetch-based functions
  - Remove superagent, axios, and @types/superagent dependencies
  - Update tests to mock new HTTP client
  - Maintain backward compatibility

- Benefits:
  - Smaller bundle size (removed 3 HTTP client libraries)
  - Better performance (leveraging Bun's optimized fetch)
  - Consistent error handling across all HTTP operations
  - Improved debugging with detailed error messages
  - Easier maintenance with single HTTP client pattern
This commit is contained in:
Arunavo Ray
2025-05-28 09:56:59 +05:30
parent 22a4b71653
commit 38e0fb33b9
10 changed files with 550 additions and 627 deletions

View File

@@ -1,7 +1,6 @@
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
import axios from "axios";
import type { AxiosError, AxiosRequestConfig } from "axios";
import { httpRequest, HttpError } from "@/lib/http-client";
import type { RepoStatus } from "@/types/Repository";
export const API_BASE = "/api";
@@ -41,10 +40,10 @@ export function safeParse<T>(value: unknown): T | undefined {
export async function apiRequest<T>(
endpoint: string,
options: AxiosRequestConfig = {}
options: RequestInit = {}
): Promise<T> {
try {
const response = await axios<T>(`${API_BASE}${endpoint}`, {
const response = await httpRequest<T>(`${API_BASE}${endpoint}`, {
headers: {
"Content-Type": "application/json",
...(options.headers || {}),
@@ -54,10 +53,10 @@ export async function apiRequest<T>(
return response.data;
} catch (err) {
const error = err as AxiosError<{ message?: string }>;
const error = err as HttpError;
const message =
error.response?.data?.message ||
error.response ||
error.message ||
"An unknown error occurred";