From ba7e6eed7cc88b27cde911cae1eb2461058289c1 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Thu, 10 Jul 2025 19:27:26 +0300 Subject: [PATCH] Use axios for fetching challenges --- .../tools/challenges/queryChallenges.tool.ts | 68 +++++++++---------- src/shared/topcoder/challenges.service.ts | 7 +- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/mcp/tools/challenges/queryChallenges.tool.ts b/src/mcp/tools/challenges/queryChallenges.tool.ts index 9c980d9..b5f3ec9 100644 --- a/src/mcp/tools/challenges/queryChallenges.tool.ts +++ b/src/mcp/tools/challenges/queryChallenges.tool.ts @@ -50,12 +50,12 @@ export class QueryChallengesTool { accessToken, ); - if (!challenges.ok) { + if (challenges.status < 200 || challenges.status >= 300) { this.logger.error( `Failed to fetch challenges from Topcoder API: ${challenges.statusText}`, ); try { - this.logger.error(await challenges.json()); + this.logger.error(challenges.data); } catch (e) { this.logger.error('Failed to log challenge error'); } @@ -63,53 +63,53 @@ export class QueryChallengesTool { // Return an error response if the API call fails return { content: [ - { - type: 'text', - text: `Error fetching challenges: ${challenges.statusText}`, - }, + { + type: 'text', + text: `Error fetching challenges: ${challenges.statusText}`, + }, ], isError: true, }; } - // Parse the response as JSON - const challengesData = await challenges.json(); + // Axios response: data is already parsed, headers are plain object + const challengesData = challenges.data; return { content: [ { - type: 'text', - text: JSON.stringify({ - page: Number(challenges.headers.get('x-page')) || 1, - pageSize: - Number(challenges.headers.get('x-per-page')) || - challengesData.length || - 0, - total: - Number(challenges.headers.get('x-total')) || - challengesData.length || - 0, - nextPage: challenges.headers.get('x-next-page') - ? Number(challenges.headers.get('x-next-page')) - : null, - data: challengesData, - }), - }, - ], - structuredContent: { - page: Number(challenges.headers.get('x-page')) || 1, + type: 'text', + text: JSON.stringify({ + page: Number(challenges.headers['x-page']) || 1, pageSize: - Number(challenges.headers.get('x-per-page')) || - challengesData.length || + Number(challenges.headers['x-per-page']) || + (Array.isArray(challengesData) ? challengesData.length : 0) || 0, total: - Number(challenges.headers.get('x-total')) || - challengesData.length || + Number(challenges.headers['x-total']) || + (Array.isArray(challengesData) ? challengesData.length : 0) || 0, - nextPage: challenges.headers.get('x-next-page') - ? Number(challenges.headers.get('x-next-page')) + nextPage: challenges.headers['x-next-page'] + ? Number(challenges.headers['x-next-page']) : null, data: challengesData, + }), + }, + ], + structuredContent: { + page: Number(challenges.headers['x-page']) || 1, + pageSize: + Number(challenges.headers['x-per-page']) || + (Array.isArray(challengesData) ? challengesData.length : 0) || + 0, + total: + Number(challenges.headers['x-total']) || + (Array.isArray(challengesData) ? challengesData.length : 0) || + 0, + nextPage: challenges.headers['x-next-page'] + ? Number(challenges.headers['x-next-page']) + : null, + data: challengesData, }, }; } catch (error) { diff --git a/src/shared/topcoder/challenges.service.ts b/src/shared/topcoder/challenges.service.ts index 372d829..1d16171 100644 --- a/src/shared/topcoder/challenges.service.ts +++ b/src/shared/topcoder/challenges.service.ts @@ -3,6 +3,7 @@ import { ENV_CONFIG } from 'src/config'; import { Logger } from 'src/shared/global'; import { QUERY_CHALLENGES_TOOL_PARAMETERS } from 'src/mcp/tools/challenges/queryChallenges.parameters'; import { z } from 'zod'; +import axios from 'axios'; const { TOPCODER_API_BASE_URL } = ENV_CONFIG; @@ -40,10 +41,8 @@ export class TopcoderChallengesService { ); try { - return await fetch(stringUrl, { - method: 'GET', - headers, - }); + const response = await axios.get(stringUrl, { headers }); + return response; } catch (error) { this.logger.error(`Error fetching challenges: ${JSON.stringify(error)}`, error); throw error;