@@ -2,6 +2,7 @@ import type { IRepository } from "./IRepository";
2
2
import { RawModRepoRelease , ModRepositoryName , ModLoader , ModRepoMetadata , MCVersion } from ".." ;
3
3
import { cf_fingerprint } from 'cf-fingerprint' ;
4
4
import { logger } from "../logger" ;
5
+ import { validateParam } from "../utils" ;
5
6
6
7
// Translation map for Curseforge modloader IDs
7
8
// Source: https://docs.curseforge.com/rest-api/#tocS_ModLoaderType
@@ -25,6 +26,8 @@ export class CurseForgeRepository implements IRepository {
25
26
}
26
27
27
28
async getModReleases ( modId : string ) : Promise < RawModRepoRelease [ ] > {
29
+ validateParam ( modId ) ;
30
+
28
31
const modInfo = await this . fetchModInfo ( Number ( modId ) ) ;
29
32
if ( ! modInfo || ! modInfo . latestFilesIndexes ) return [ ] ;
30
33
@@ -47,6 +50,9 @@ export class CurseForgeRepository implements IRepository {
47
50
}
48
51
49
52
async searchMods ( query : string , maxResults : number ) : Promise < ModRepoMetadata [ ] > {
53
+ validateParam ( query ) ;
54
+ validateParam ( maxResults . toString ( ) ) ;
55
+
50
56
type Data = {
51
57
data : {
52
58
id : number ;
@@ -70,7 +76,7 @@ export class CurseForgeRepository implements IRepository {
70
76
pageSize : maxResults . toString ( ) ,
71
77
sortField : "1" ,
72
78
sortOrder : "desc" ,
73
- searchFilter : query
79
+ searchFilter : query ,
74
80
} ) ) ;
75
81
if ( ! resp . ok ) throw new Error ( "Failed to fetch search results from CurseForge" ) ;
76
82
const jsonResp : Data = ( await resp . json ( ) ) ;
@@ -87,12 +93,16 @@ export class CurseForgeRepository implements IRepository {
87
93
}
88
94
89
95
private async fetchModInfo ( modId : number ) : Promise < ModInfoData | null > {
96
+ validateParam ( modId . toString ( ) ) ;
97
+
90
98
const modResp = await this . fetchClient ( `${ CurseForgeRepository . BASE_URL } /mods/${ modId } ` ) ;
91
99
if ( ! modResp . ok ) return null ;
92
100
return ( await modResp . json ( ) ) . data as ModInfoData ;
93
101
}
94
102
95
103
async getByDataHash ( hash : string ) : Promise < ModRepoMetadata | null > {
104
+ validateParam ( hash ) ;
105
+
96
106
// Use the CurseForge API to get file info by fingerprint
97
107
const resp = await this . fetchClient ( `${ CurseForgeRepository . BASE_URL } /fingerprints` , {
98
108
method : 'POST' ,
0 commit comments