22
33import * as vscode from 'vscode' ;
44import { ApiClient } from './apiClient' ;
5-
65import { CourseResponse , LoginResponse , GradableResponse } from '../interfaces/Responses' ;
76import { AutoGraderDetails } from '../interfaces/AutoGraderDetails' ;
87
8+ function getErrorMessage ( error : unknown , fallback : string ) : string {
9+ if ( error instanceof Error ) {
10+ return error . message || fallback ;
11+ }
12+ if ( typeof error === 'object' && error ) {
13+ const maybeAxiosError = error as { response ?: { data ?: { message ?: unknown } } } ;
14+ const msg = maybeAxiosError . response ?. data ?. message ;
15+ if ( typeof msg === 'string' && msg . trim ( ) ) {
16+ return msg ;
17+ }
18+ }
19+ return fallback ;
20+ }
921
1022export class ApiService {
1123 private client : ApiClient ;
@@ -16,12 +28,12 @@ export class ApiService {
1628 }
1729
1830 // set token for local api client
19- setAuthorizationToken ( token : string ) {
31+ setAuthorizationToken ( token : string ) : void {
2032 this . client . setToken ( token ) ;
2133 }
2234
2335 // set base URL for local api client
24- setBaseUrl ( baseUrl : string ) {
36+ setBaseUrl ( baseUrl : string ) : void {
2537 this . client . setBaseURL ( baseUrl ) ;
2638 }
2739
@@ -43,31 +55,31 @@ export class ApiService {
4355
4456 const token : string = response . data . data . token ;
4557 return token ;
46- } catch ( error : any ) {
47- throw new Error ( error . response ?. data ?. message || error . message || 'Login failed.' ) ;
58+ } catch ( error : unknown ) {
59+ throw new Error ( getErrorMessage ( error , 'Login failed.' ) ) ;
4860 }
4961 }
5062
5163 async fetchMe ( ) : Promise < any > {
5264 try {
5365 const response = await this . client . get < any > ( '/api/me' ) ;
5466 return response . data ;
55- } catch ( error : any ) {
56- throw new Error ( error . response ?. data ?. message || 'Failed to fetch me.' ) ;
67+ } catch ( error : unknown ) {
68+ throw new Error ( getErrorMessage ( error , 'Failed to fetch me.' ) ) ;
5769 }
5870 }
5971
6072
6173 /**
6274 * Fetch all courses for the authenticated user
6375 */
64- async fetchCourses ( token ?: string ) : Promise < CourseResponse > {
76+ async fetchCourses ( _token ?: string ) : Promise < CourseResponse > {
6577 try {
6678 const response = await this . client . get < CourseResponse > ( '/api/courses' ) ;
6779 return response . data ;
68- } catch ( error : any ) {
80+ } catch ( error : unknown ) {
6981 console . error ( 'Error fetching courses:' , error ) ;
70- throw new Error ( error . response ?. data ?. message || 'Failed to fetch courses.' ) ;
82+ throw new Error ( getErrorMessage ( error , 'Failed to fetch courses.' ) ) ;
7183 }
7284 }
7385
@@ -76,9 +88,9 @@ export class ApiService {
7688 const url = `/api/${ term } /${ courseId } /gradeables` ;
7789 const response = await this . client . get < GradableResponse > ( url ) ;
7890 return response . data ;
79- } catch ( error : any ) {
91+ } catch ( error : unknown ) {
8092 console . error ( 'Error fetching gradables:' , error ) ;
81- throw new Error ( error . response ?. data ?. message || 'Failed to fetch gradables.' ) ;
93+ throw new Error ( getErrorMessage ( error , 'Failed to fetch gradables.' ) ) ;
8294 }
8395 }
8496
@@ -89,9 +101,9 @@ export class ApiService {
89101 try {
90102 const response = await this . client . get < AutoGraderDetails > ( `/api/${ term } /${ courseId } /gradeable/${ gradeableId } /values` ) ;
91103 return response . data ;
92- } catch ( error : any ) {
104+ } catch ( error : unknown ) {
93105 console . error ( 'Error fetching grade details:' , error ) ;
94- throw new Error ( error . response ?. data ?. message || 'Failed to fetch grade details.' ) ;
106+ throw new Error ( getErrorMessage ( error , 'Failed to fetch grade details.' ) ) ;
95107 }
96108 }
97109
@@ -140,24 +152,24 @@ export class ApiService {
140152 const url = `/api/${ term } /${ courseId } /gradeable/${ gradeableId } /upload?vcs_upload=true&git_repo_id=true` ;
141153 const response = await this . client . post < any > ( url ) ;
142154 return response . data ;
143- } catch ( error : any ) {
144- console . error ( 'Error submitting VCS gradable:' , error ) ;
145- throw new Error ( error . response ?. data ?. message || 'Failed to submit VCS gradable.' ) ;
155+ } catch ( error : unknown ) {
156+ console . error ( 'Error submitt`ing VCS gradable:' , error ) ;
157+ throw new Error ( getErrorMessage ( error , 'Failed to submit VCS gradable.' ) ) ;
146158 }
147159 }
148160
149161
150162 /**
151163 * Fetch previous attempts for a specific homework assignment
152164 */
153- async fetchPreviousAttempts ( term : string , courseId : string , gradeableId : string ) : Promise < any [ ] > {
165+ async fetchPreviousAttempts ( term : string , courseId : string , gradeableId : string ) : Promise < unknown [ ] > {
154166 try {
155167 const url = `/api/${ term } /${ courseId } /gradeable/${ gradeableId } /attempts` ;
156- const response = await this . client . get < any > ( url ) ;
168+ const response = await this . client . get < unknown [ ] > ( url ) ;
157169 return response . data ;
158- } catch ( error : any ) {
170+ } catch ( error : unknown ) {
159171 console . error ( 'Error fetching previous attempts:' , error ) ;
160- throw new Error ( error . response ?. data ?. message || 'Failed to fetch previous attempts.' ) ;
172+ throw new Error ( getErrorMessage ( error , 'Failed to fetch previous attempts.' ) ) ;
161173 }
162174 }
163175
0 commit comments