import { curseforgeClient } from "@/services/clients"; import { uploadFile, getGameVersions } from "@/lib/curseforge"; import { resolveVersionName } from "@/lib/utils/format"; import type { UploadMetadata } from "@/types"; import { PlatformPublishFn } from "../publish.schemas"; export const publishCurseForgeVersion: PlatformPublishFn = async (ctx, mcVersion, files) => { const { input, config } = ctx; const displayName = resolveVersionName(config.curseforge.version_name, config, input.version, mcVersion); 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; }; const metadata: UploadMetadata = { changelog: input.changelog, changelogType: "markdown", displayName, releaseType: input.versionType, gameVersions: [ ...config.curseforge.loaders.map(resolveId), ...config.curseforge.environment.map(resolveId), ...mcVersion.range.map(resolveId), ], relations: config.curseforge.relations, }; await uploadFile( curseforgeClient, config.curseforge.project_id, metadata, files.primary, ); }