2026-07-09 12:33:53 +08:00
|
|
|
import { curseforgeClient } from "@/services/clients";
|
2026-07-10 06:54:14 +08:00
|
|
|
import { uploadFile, getGameVersions } from "@/lib/curseforge";
|
2026-07-11 09:23:12 +08:00
|
|
|
import { resolveVersionName } from "@/lib/utils/format";
|
2026-07-09 12:33:53 +08:00
|
|
|
import type { UploadMetadata } from "@/types";
|
2026-07-11 09:23:12 +08:00
|
|
|
import { PlatformPublishFn } from "../publish.schemas";
|
2026-07-09 12:33:53 +08:00
|
|
|
|
2026-07-11 09:23:12 +08:00
|
|
|
export const publishCurseForgeVersion: PlatformPublishFn = async (ctx, mcVersion, files) => {
|
2026-07-09 12:33:53 +08:00
|
|
|
const { input, config } = ctx;
|
|
|
|
|
|
2026-07-11 09:23:12 +08:00
|
|
|
const displayName = resolveVersionName(config.curseforge.version_name, config, input.version, mcVersion);
|
2026-07-09 12:33:53 +08:00
|
|
|
|
2026-07-10 06:54:14 +08:00
|
|
|
const gameVersions = await getGameVersions(curseforgeClient);
|
|
|
|
|
|
|
|
|
|
const resolveId = (name: string): number => {
|
|
|
|
|
const found = gameVersions.find((v) => v.name === name);
|
|
|
|
|
if (!found) throw new Error(`Game version "${name}" not found in CurseForge`);
|
|
|
|
|
return found.id;
|
|
|
|
|
};
|
|
|
|
|
|
2026-07-09 12:33:53 +08:00
|
|
|
const metadata: UploadMetadata = {
|
|
|
|
|
changelog: input.changelog,
|
|
|
|
|
changelogType: "markdown",
|
|
|
|
|
displayName,
|
|
|
|
|
releaseType: input.versionType,
|
2026-07-10 06:54:14 +08:00
|
|
|
gameVersions: [
|
|
|
|
|
...config.curseforge.loaders.map(resolveId),
|
|
|
|
|
...config.curseforge.environment.map(resolveId),
|
2026-07-11 09:23:12 +08:00
|
|
|
...mcVersion.range.map(resolveId),
|
2026-07-10 06:54:14 +08:00
|
|
|
],
|
2026-07-09 12:33:53 +08:00
|
|
|
relations: config.curseforge.relations,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
await uploadFile(
|
|
|
|
|
curseforgeClient,
|
|
|
|
|
config.curseforge.project_id,
|
|
|
|
|
metadata,
|
2026-07-11 09:23:12 +08:00
|
|
|
files.primary,
|
2026-07-09 12:33:53 +08:00
|
|
|
);
|
|
|
|
|
}
|