mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-11-28 19:31:03 -05:00
Refactored modrinth-utils
This commit is contained in:
parent
36b3d69f46
commit
1aaf662cc2
1 changed files with 26 additions and 17 deletions
|
@ -1,5 +1,5 @@
|
||||||
import FormData from "form-data";
|
import FormData from "form-data";
|
||||||
import fetch from "node-fetch";
|
import fetch, { Response } from "node-fetch";
|
||||||
import { File } from "./file";
|
import { File } from "./file";
|
||||||
import SoftError from "./soft-error";
|
import SoftError from "./soft-error";
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ interface ModrinthVersion {
|
||||||
id: string;
|
id: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createVersion(modId: string, data: Record<string, any>, files: File[], token: string): Promise<ModrinthVersion> {
|
export function createVersion(modId: string, data: Record<string, any>, files: File[], token: string): Promise<ModrinthVersion> {
|
||||||
data = {
|
data = {
|
||||||
featured: true,
|
featured: true,
|
||||||
dependencies: [],
|
dependencies: [],
|
||||||
|
@ -31,7 +31,7 @@ export async function createVersion(modId: string, data: Record<string, any>, fi
|
||||||
form.append(i.toString(), file.getStream(), file.name);
|
form.append(i.toString(), file.getStream(), file.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await fetch(`${baseUrl}/version`, {
|
const response = fetch(`${baseUrl}/version`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: form.getHeaders({
|
headers: form.getHeaders({
|
||||||
Authorization: token,
|
Authorization: token,
|
||||||
|
@ -39,28 +39,37 @@ export async function createVersion(modId: string, data: Record<string, any>, fi
|
||||||
body: <any>form
|
body: <any>form
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
return processResponse(response, undefined, (x, msg) => new SoftError(x, `Failed to upload file: ${msg}`));
|
||||||
let errorText = response.statusText;
|
}
|
||||||
try {
|
|
||||||
errorText += `, ${await response.text()}`;
|
|
||||||
} catch { }
|
|
||||||
const isServerError = response.status >= 500;
|
|
||||||
throw new SoftError(isServerError, `Failed to upload file: ${response.status} (${errorText})`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
export function getProject(idOrSlug: string): Promise<ModrinthProject> {
|
||||||
|
return processResponse(fetch(`${baseUrl}/project/${idOrSlug}`), { 404: () => <ModrinthProject>null });
|
||||||
return await response.json();
|
return await response.json();
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getProject(idOrSlug: string): Promise<ModrinthProject> {
|
async function processResponse<T>(response: Response | Promise<Response>, mappers?: Record<number, (response: Response) => T | Promise<T>>, errorFactory?: (isServerError: boolean, message: string, response: Response) => Error | Promise<Error>): Promise<T | never> {
|
||||||
const response = await fetch(`${baseUrl}/project/${idOrSlug}`);
|
response = await response;
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
return await response.json();
|
return <T>await response.json();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.status === 404) {
|
const mapper = mappers?.[response.status];
|
||||||
return null;
|
if (mapper) {
|
||||||
|
const mapped = await mapper(response);
|
||||||
|
if (mapped !== undefined) {
|
||||||
|
return mapped;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let errorText = response.statusText;
|
||||||
|
try {
|
||||||
|
errorText += `, ${await response.text()}`;
|
||||||
|
} catch { }
|
||||||
|
errorText = `${response.status} (${errorText})`;
|
||||||
const isServerError = response.status >= 500;
|
const isServerError = response.status >= 500;
|
||||||
throw new SoftError(isServerError, `${response.status} (${response.statusText})`);
|
if (errorFactory) {
|
||||||
|
throw errorFactory(isServerError, errorText, response);
|
||||||
|
} else {
|
||||||
|
throw new SoftError(isServerError, errorText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue