forked from SamsTheNerd/hexaddons
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodrinth_api.js
More file actions
85 lines (80 loc) · 2.91 KB
/
modrinth_api.js
File metadata and controls
85 lines (80 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var fetchFullModData = (modid) => {
return fetch(`https://api.modrinth.com/v2/project/${modid}`)
.then((response) => response.json());
}
const modrinthRE = new RegExp(".*modrinth\.com\/(?:(?:mod)|(?:resourcepack))\/([0-9a-zA-Z\-]+).*");
var slugsToNames = {};
var idFromUrl = (url) => {
// console.log(url);
return url.match(modrinthRE)[1];
}
// takes an array of addons, returns a promise with a map of addon ids -> modrinth data
var getModDataMulti =(addons) => {
var addonSlugs = [];
// console.log(addons)
for(const addon of addons){
// console.log(addon);
if(addon.modrinth_url != null){
var slug = idFromUrl(addon.modrinth_url);
slugsToNames[slug] = addon.name;
addonSlugs.push(slug);
}
}
var addonSlugsStr = addonSlugs.map(s => `"${s}"`).join(",");
return fetch(`https://api.modrinth.com/v2/projects?ids=[${addonSlugsStr}]`)
.then(response => response.json())
.then(datas => {
var dataObj = {};
for(const data of datas){
dataObj[slugsToNames[data.slug]] = {
team_id: data["team"],
icon_url: data["icon_url"],
platforms: data["loaders"],
source_url: data["source_url"],
book_url: data["wiki_url"],
downloads: data["downloads"],
game_versions: data["game_versions"],
published_date: Date.parse(data["approved"] || data["published"]),
updated_date: Date.parse(data["updated"]),
description: data["description"],
}
}
return dataObj;
})
}
var getTeamDataMulti =(teamIds) => {
var teamIdsStr = teamIds.map(s => `"${s}"`).join(",");
return fetch(`https://api.modrinth.com/v2/teams?ids=[${teamIdsStr}]`)
.then(response => response.json())
.then(datas => {
var dataObj = {};
for(const data of datas){
if(data.length == 0) continue;
teamId = data[0].team_id
dataObj[teamId] = data.flatMap(role => role.user.username);
}
return dataObj;
})
}
// returns a promise with the parsed data that we actually want
var getModData = (addon) => {
if(addon.modrinth_url != null){
return fetchFullModData(idFromUrl(addon.modrinth_url)).then((data) => {
return {
icon_url: data["icon_url"],
platforms: data["loaders"],
source_url: data["source_url"],
book_url: data["wiki_url"],
downloads: data["downloads"],
game_versions: data["game_versions"],
published_date: Date.parse(data["published"]),
updated_date: Date.parse(data["updated"]),
description: data["description"],
};
});
} else {
return new Promise((resolve, reject) => {
resolve({});
});
}
}