@creeperhost/modlens-mcp 1.6.17 → 1.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -10
- package/TESTING.md +69 -0
- package/dist/cli.js +21 -5
- package/dist/cli.js.map +1 -1
- package/dist/curseforge.d.ts +9 -7
- package/dist/curseforge.d.ts.map +1 -1
- package/dist/curseforge.js +48 -55
- package/dist/curseforge.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +34 -3
- package/dist/db.js.map +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +1 -0
- package/dist/embeddings.js.map +1 -1
- package/dist/feed-the-beast.d.ts +5 -5
- package/dist/feed-the-beast.d.ts.map +1 -1
- package/dist/feed-the-beast.js +5 -21
- package/dist/feed-the-beast.js.map +1 -1
- package/dist/generated/sqlite/internal/class.js +2 -2
- package/dist/generated/sqlite/internal/class.js.map +1 -1
- package/dist/java-tools.d.ts +1 -0
- package/dist/java-tools.d.ts.map +1 -1
- package/dist/java-tools.js +31 -7
- package/dist/java-tools.js.map +1 -1
- package/dist/launcher.js +15 -0
- package/dist/launcher.js.map +1 -1
- package/dist/mappings.d.ts +4 -1
- package/dist/mappings.d.ts.map +1 -1
- package/dist/mappings.js +120 -52
- package/dist/mappings.js.map +1 -1
- package/dist/minecraft.d.ts +0 -4
- package/dist/minecraft.d.ts.map +1 -1
- package/dist/minecraft.js +7 -23
- package/dist/minecraft.js.map +1 -1
- package/dist/mod-artifacts.d.ts +4 -0
- package/dist/mod-artifacts.d.ts.map +1 -0
- package/dist/mod-artifacts.js +58 -0
- package/dist/mod-artifacts.js.map +1 -0
- package/dist/modpacks-ch.d.ts +72 -46
- package/dist/modpacks-ch.d.ts.map +1 -1
- package/dist/modpacks-ch.js +134 -20
- package/dist/modpacks-ch.js.map +1 -1
- package/dist/modrinth.d.ts +14 -6
- package/dist/modrinth.d.ts.map +1 -1
- package/dist/modrinth.js +70 -55
- package/dist/modrinth.js.map +1 -1
- package/dist/platform-adapter.d.ts +1 -0
- package/dist/platform-adapter.d.ts.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +20 -44
- package/dist/platform.js.map +1 -1
- package/dist/processor.d.ts +5 -0
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +166 -46
- package/dist/processor.js.map +1 -1
- package/dist/registry-submission.d.ts +34 -0
- package/dist/registry-submission.d.ts.map +1 -0
- package/dist/registry-submission.js +128 -0
- package/dist/registry-submission.js.map +1 -0
- package/dist/repositories/array-fields.d.ts +3 -0
- package/dist/repositories/array-fields.d.ts.map +1 -0
- package/dist/repositories/array-fields.js +8 -0
- package/dist/repositories/array-fields.js.map +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts.map +1 -1
- package/dist/repositories/embeddings-sqlite.js +26 -58
- package/dist/repositories/embeddings-sqlite.js.map +1 -1
- package/dist/repositories/embeddings.d.ts.map +1 -1
- package/dist/repositories/embeddings.js +26 -3
- package/dist/repositories/embeddings.js.map +1 -1
- package/dist/repositories/index.d.ts +1 -1
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/mod.d.ts +8 -5
- package/dist/repositories/mod.d.ts.map +1 -1
- package/dist/repositories/mod.js +25 -11
- package/dist/repositories/mod.js.map +1 -1
- package/dist/repositories/packs.d.ts.map +1 -1
- package/dist/repositories/packs.js +10 -2
- package/dist/repositories/packs.js.map +1 -1
- package/dist/search-adapter.d.ts +2 -0
- package/dist/search-adapter.d.ts.map +1 -1
- package/dist/search-adapter.js +21 -9
- package/dist/search-adapter.js.map +1 -1
- package/dist/security.d.ts +2 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +5 -1
- package/dist/security.js.map +1 -1
- package/dist/server.js +63 -25
- package/dist/server.js.map +1 -1
- package/dist/sqlite-json.d.ts +3 -0
- package/dist/sqlite-json.d.ts.map +1 -0
- package/dist/sqlite-json.js +78 -0
- package/dist/sqlite-json.js.map +1 -0
- package/dist/sqlite-parameters.d.ts +3 -0
- package/dist/sqlite-parameters.d.ts.map +1 -0
- package/dist/sqlite-parameters.js +19 -0
- package/dist/sqlite-parameters.js.map +1 -0
- package/dist/sqlite-schema.d.ts +4 -0
- package/dist/sqlite-schema.d.ts.map +1 -0
- package/dist/sqlite-schema.js +76 -0
- package/dist/sqlite-schema.js.map +1 -0
- package/dist/tools/catalog.d.ts +1 -6
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/catalog.js +10 -14
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/compat-check.d.ts.map +1 -1
- package/dist/tools/compat-check.js +18 -30
- package/dist/tools/compat-check.js.map +1 -1
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/docs.d.ts.map +1 -1
- package/dist/tools/docs.js +8 -3
- package/dist/tools/docs.js.map +1 -1
- package/dist/tools/embed-registry.d.ts +20 -4
- package/dist/tools/embed-registry.d.ts.map +1 -1
- package/dist/tools/embed-registry.js +30 -19
- package/dist/tools/embed-registry.js.map +1 -1
- package/dist/tools/graphify.d.ts +19 -4
- package/dist/tools/graphify.d.ts.map +1 -1
- package/dist/tools/graphify.js +61 -13
- package/dist/tools/graphify.js.map +1 -1
- package/dist/tools/ingest.d.ts.map +1 -1
- package/dist/tools/ingest.js +4 -4
- package/dist/tools/ingest.js.map +1 -1
- package/dist/tools/kubejs.js +1 -1
- package/dist/tools/kubejs.js.map +1 -1
- package/dist/tools/mc-fts.d.ts.map +1 -1
- package/dist/tools/mc-fts.js +9 -4
- package/dist/tools/mc-fts.js.map +1 -1
- package/dist/tools/mcmeta.d.ts +10 -1
- package/dist/tools/mcmeta.d.ts.map +1 -1
- package/dist/tools/mcmeta.js +43 -29
- package/dist/tools/mcmeta.js.map +1 -1
- package/dist/tools/mixin-scan.d.ts +12 -6
- package/dist/tools/mixin-scan.d.ts.map +1 -1
- package/dist/tools/mixin-scan.js +12 -7
- package/dist/tools/mixin-scan.js.map +1 -1
- package/dist/tools/mod-data.d.ts.map +1 -1
- package/dist/tools/mod-data.js +40 -27
- package/dist/tools/mod-data.js.map +1 -1
- package/dist/tools/modpacks-ch.d.ts +9 -5
- package/dist/tools/modpacks-ch.d.ts.map +1 -1
- package/dist/tools/modpacks-ch.js +54 -33
- package/dist/tools/modpacks-ch.js.map +1 -1
- package/dist/tools/packtools.js +3 -3
- package/dist/tools/packtools.js.map +1 -1
- package/dist/tools/platform.d.ts +2 -2
- package/dist/tools/platform.d.ts.map +1 -1
- package/dist/tools/platform.js +33 -23
- package/dist/tools/platform.js.map +1 -1
- package/dist/tools/project.d.ts +342 -0
- package/dist/tools/project.d.ts.map +1 -0
- package/dist/tools/project.js +519 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/reports.d.ts.map +1 -1
- package/dist/tools/reports.js +5 -3
- package/dist/tools/reports.js.map +1 -1
- package/dist/tools/vanilla-data.d.ts.map +1 -1
- package/dist/tools/vanilla-data.js +3 -33
- package/dist/tools/vanilla-data.js.map +1 -1
- package/dist/tools/vanilla.d.ts +3 -1
- package/dist/tools/vanilla.d.ts.map +1 -1
- package/dist/tools/vanilla.js +26 -12
- package/dist/tools/vanilla.js.map +1 -1
- package/dist/tools/version-diff.d.ts.map +1 -1
- package/dist/tools/version-diff.js +4 -24
- package/dist/tools/version-diff.js.map +1 -1
- package/dist/version-ranges.d.ts +5 -0
- package/dist/version-ranges.d.ts.map +1 -0
- package/dist/version-ranges.js +93 -0
- package/dist/version-ranges.js.map +1 -0
- package/package.json +8 -3
- package/prisma/backends/template.db +0 -0
- package/scripts/build-template-db.mjs +5 -2
- package/scripts/enable-sqlite-vec.mjs +2 -106
- package/scripts/gradle/modlens.init.gradle +154 -0
- package/scripts/project-upload.mjs +74 -0
- package/scripts/test-minecraft-eras.mjs +202 -0
- package/scripts/test-package.mjs +217 -0
- package/scripts/test-project-gradle.mjs +76 -0
- package/scripts/test-project-http.mjs +98 -0
- package/scripts/test-setup.mjs +18 -0
package/dist/minecraft.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/** Versions with SRG mappings that we explicitly support even before 1.14 */
|
|
2
|
-
export declare const LEGACY_SRG_VERSIONS: Set<string>;
|
|
3
|
-
/** Pre-1.7.10 release versions with RetroMCP Tiny v2 mappings */
|
|
4
|
-
export declare const LEGACY_RETROMCP_VERSIONS: Set<string>;
|
|
5
1
|
export interface McVersionEntry {
|
|
6
2
|
id: string;
|
|
7
3
|
type: "release" | "snapshot" | "old_beta" | "old_alpha";
|
package/dist/minecraft.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minecraft.d.ts","sourceRoot":"","sources":["../src/minecraft.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"minecraft.d.ts","sourceRoot":"","sources":["../src/minecraft.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACvB;AAID,wBAAsB,kBAAkB,CAAC,gBAAgB,UAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAY5F;AAED,0DAA0D;AAC1D,eAAO,MAAM,OAAO;mBACQ,MAAM;qBACN,MAAM;0BACN,MAAM;yBACN,MAAM,aAAa,MAAM;CAEpD,CAAC;AAEF,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBnE"}
|
package/dist/minecraft.js
CHANGED
|
@@ -7,24 +7,8 @@ import { pipeline } from "stream/promises";
|
|
|
7
7
|
import { join } from "path";
|
|
8
8
|
import { CACHE_ROOT, ensureDir, exists } from "./cache.js";
|
|
9
9
|
import { fetchWithRetry, DOWNLOAD_OPTS } from "./fetch-utils.js";
|
|
10
|
+
import { hasRetroMcpMappings, hasSrgMappings } from "./mappings.js";
|
|
10
11
|
const VERSIONS_URL = "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json";
|
|
11
|
-
/** Versions with SRG mappings that we explicitly support even before 1.14 */
|
|
12
|
-
export const LEGACY_SRG_VERSIONS = new Set([
|
|
13
|
-
"1.7.2", "1.7.10",
|
|
14
|
-
"1.8", "1.8.8", "1.8.9",
|
|
15
|
-
"1.9", "1.9.2", "1.9.4",
|
|
16
|
-
"1.10", "1.10.2",
|
|
17
|
-
"1.11", "1.11.1", "1.11.2",
|
|
18
|
-
"1.12", "1.12.1", "1.12.2",
|
|
19
|
-
"1.13", "1.13.1", "1.13.2",
|
|
20
|
-
]);
|
|
21
|
-
/** Pre-1.7.10 release versions with RetroMCP Tiny v2 mappings */
|
|
22
|
-
export const LEGACY_RETROMCP_VERSIONS = new Set([
|
|
23
|
-
"1.5.2",
|
|
24
|
-
"1.2.5", "1.2.4", "1.2.3",
|
|
25
|
-
"1.1",
|
|
26
|
-
"1.0",
|
|
27
|
-
]);
|
|
28
12
|
let manifestCache = null;
|
|
29
13
|
export async function fetchMcVersionList(includeSnapshots = false) {
|
|
30
14
|
if (!manifestCache) {
|
|
@@ -32,9 +16,9 @@ export async function fetchMcVersionList(includeSnapshots = false) {
|
|
|
32
16
|
if (!res.ok)
|
|
33
17
|
throw new Error(`Failed to fetch MC version manifest: ${res.status}`);
|
|
34
18
|
const data = await res.json();
|
|
35
|
-
//
|
|
36
|
-
manifestCache = data.versions.filter(
|
|
37
|
-
(
|
|
19
|
+
// Use the remapper's catalog so supported alpha/beta releases remain reachable.
|
|
20
|
+
manifestCache = data.versions.filter(v => hasSrgMappings(v.id) || hasRetroMcpMappings(v.id)
|
|
21
|
+
|| (v.type !== "old_beta" && v.type !== "old_alpha" && Date.parse(v.releaseTime) >= Date.parse("2019-04-23")));
|
|
38
22
|
}
|
|
39
23
|
return includeSnapshots
|
|
40
24
|
? manifestCache
|
|
@@ -43,9 +27,9 @@ export async function fetchMcVersionList(includeSnapshots = false) {
|
|
|
43
27
|
/** Paths under ~/.modlens-cache for vanilla MC assets. */
|
|
44
28
|
export const mcPaths = {
|
|
45
29
|
jar: (version) => join(CACHE_ROOT, "mc-jars", `${version}.jar`),
|
|
46
|
-
index: (version) => join(CACHE_ROOT, "mc-index", `${version}.json`),
|
|
47
|
-
decompiled: (version) => join(CACHE_ROOT, "mc-decompiled", version),
|
|
48
|
-
classFile: (version, className) => join(CACHE_ROOT, "mc-decompiled", version, `${className}.java`),
|
|
30
|
+
index: (version) => join(CACHE_ROOT, "mc-index", `${version}-named-v2.json`),
|
|
31
|
+
decompiled: (version) => join(CACHE_ROOT, "mc-decompiled-named", version),
|
|
32
|
+
classFile: (version, className) => join(CACHE_ROOT, "mc-decompiled-named", version, `${className}.java`),
|
|
49
33
|
};
|
|
50
34
|
/** Download the MC client JAR for a version if not cached, return local path. */
|
|
51
35
|
export async function getMcJarPath(version) {
|
package/dist/minecraft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minecraft.js","sourceRoot":"","sources":["../src/minecraft.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"minecraft.js","sourceRoot":"","sources":["../src/minecraft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ModVersion } from "./modpacks-ch.js";
|
|
2
|
+
/** Share downloaded artifacts between metadata inspection and ingestion. */
|
|
3
|
+
export declare function downloadModVersion(projectId: string | number, version: ModVersion, force?: boolean): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=mod-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod-artifacts.d.ts","sourceRoot":"","sources":["../src/mod-artifacts.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKrF,4EAA4E;AAC5E,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCxH"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { createWriteStream } from "fs";
|
|
3
|
+
import { rename, unlink } from "fs/promises";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { pipeline } from "stream/promises";
|
|
6
|
+
import { CACHE_ROOT, ensureDir, exists } from "./cache.js";
|
|
7
|
+
import { DOWNLOAD_OPTS, fetchWithRetry } from "./fetch-utils.js";
|
|
8
|
+
import { resolveModVersionUrl, USER_AGENT } from "./modpacks-ch.js";
|
|
9
|
+
import { fileSha1, validatePath } from "./security.js";
|
|
10
|
+
const downloads = new Map();
|
|
11
|
+
/** Share downloaded artifacts between metadata inspection and ingestion. */
|
|
12
|
+
export async function downloadModVersion(projectId, version, force = false) {
|
|
13
|
+
const sha1 = version.sha1?.toLowerCase();
|
|
14
|
+
if (sha1 && !/^[a-f0-9]{40}$/.test(sha1))
|
|
15
|
+
throw new Error(`Invalid SHA-1 for ${version.name}`);
|
|
16
|
+
const directory = validatePath(String(projectId), join(CACHE_ROOT, "mods"));
|
|
17
|
+
const destination = validatePath(`${sha1 || version.id}.jar`, directory);
|
|
18
|
+
const pending = downloads.get(destination);
|
|
19
|
+
if (pending) {
|
|
20
|
+
if (!force)
|
|
21
|
+
return pending;
|
|
22
|
+
await pending;
|
|
23
|
+
return downloadModVersion(projectId, version, true);
|
|
24
|
+
}
|
|
25
|
+
const download = async () => {
|
|
26
|
+
if (!force && await exists(destination) && (!sha1 || await fileSha1(destination) === sha1))
|
|
27
|
+
return destination;
|
|
28
|
+
const url = resolveModVersionUrl(version);
|
|
29
|
+
if (!url)
|
|
30
|
+
throw new Error(`No download URL available for ${version.name}`);
|
|
31
|
+
await ensureDir(destination);
|
|
32
|
+
const temporary = `${destination}.${randomUUID()}.tmp`;
|
|
33
|
+
try {
|
|
34
|
+
// Fetch errors can contain a URL with a configured download key.
|
|
35
|
+
const response = await fetchWithRetry(url, { headers: { "User-Agent": USER_AGENT } }, DOWNLOAD_OPTS)
|
|
36
|
+
.catch(() => { throw new Error(`Download failed for ${version.name}`); });
|
|
37
|
+
if (!response.ok)
|
|
38
|
+
throw new Error(`Download failed for ${version.name}: HTTP ${response.status}`);
|
|
39
|
+
await pipeline(response.body, createWriteStream(temporary));
|
|
40
|
+
if (sha1 && await fileSha1(temporary) !== sha1)
|
|
41
|
+
throw new Error(`SHA-1 mismatch for ${version.name}`);
|
|
42
|
+
await rename(temporary, destination);
|
|
43
|
+
return destination;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await unlink(temporary).catch(() => { });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const task = download();
|
|
50
|
+
downloads.set(destination, task);
|
|
51
|
+
try {
|
|
52
|
+
return await task;
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
downloads.delete(destination);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=mod-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod-artifacts.js","sourceRoot":"","sources":["../src/mod-artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/modpacks-ch.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const MODPACKS_CH_API = "https://api.modpacks.ch/public";
|
|
2
2
|
/** User-Agent as requested by the modpacks.ch (CreeperHost) team for usage tracking. */
|
|
3
3
|
export declare const USER_AGENT = "modlens-mcp/1.0 (github.com/CreeperHost/modlens-mcp)";
|
|
4
|
-
export interface
|
|
4
|
+
export interface Artwork {
|
|
5
5
|
id: number;
|
|
6
6
|
url: string;
|
|
7
7
|
type: string;
|
|
@@ -12,17 +12,17 @@ export interface FtbArt {
|
|
|
12
12
|
size: number;
|
|
13
13
|
updated: number;
|
|
14
14
|
}
|
|
15
|
-
export interface
|
|
15
|
+
export interface Link {
|
|
16
16
|
id: number;
|
|
17
17
|
name: string;
|
|
18
18
|
link: string;
|
|
19
19
|
type: string;
|
|
20
20
|
}
|
|
21
|
-
export interface
|
|
21
|
+
export interface Tag {
|
|
22
22
|
id: number;
|
|
23
23
|
name: string;
|
|
24
24
|
}
|
|
25
|
-
export interface
|
|
25
|
+
export interface Author {
|
|
26
26
|
id: number;
|
|
27
27
|
name: string;
|
|
28
28
|
type: string;
|
|
@@ -33,8 +33,8 @@ export interface FtbAuthor {
|
|
|
33
33
|
* A single version/file entry inside GET /mod/{id}.
|
|
34
34
|
* Contains full file metadata and CDN download URL — no CF API key required.
|
|
35
35
|
*/
|
|
36
|
-
export interface
|
|
37
|
-
id: number;
|
|
36
|
+
export interface ModVersion {
|
|
37
|
+
id: number | string;
|
|
38
38
|
name: string;
|
|
39
39
|
version: string;
|
|
40
40
|
type: string;
|
|
@@ -45,10 +45,12 @@ export interface FtbModVersion {
|
|
|
45
45
|
size: number;
|
|
46
46
|
clientonly: boolean;
|
|
47
47
|
updated: number;
|
|
48
|
-
targets:
|
|
49
|
-
dependencies:
|
|
48
|
+
targets: Target[];
|
|
49
|
+
dependencies: ModDependency[];
|
|
50
|
+
/** Present only when missing loader targets were recovered from the artifact. */
|
|
51
|
+
loaderSource?: "jar";
|
|
50
52
|
}
|
|
51
|
-
export interface
|
|
53
|
+
export interface ModDependency {
|
|
52
54
|
id: number | string;
|
|
53
55
|
name: string;
|
|
54
56
|
type: string;
|
|
@@ -56,34 +58,40 @@ export interface FtbModDependency {
|
|
|
56
58
|
updated: number;
|
|
57
59
|
}
|
|
58
60
|
/** Response from GET /mod/{id} */
|
|
59
|
-
export interface
|
|
61
|
+
export interface ModMetadata {
|
|
60
62
|
id: number | string;
|
|
61
63
|
name: string;
|
|
62
64
|
synopsis: string;
|
|
63
|
-
art:
|
|
64
|
-
links:
|
|
65
|
-
versions:
|
|
65
|
+
art: Artwork[];
|
|
66
|
+
links: Link[];
|
|
67
|
+
versions: ModVersion[];
|
|
66
68
|
installs: number;
|
|
67
69
|
plays: number;
|
|
68
70
|
status: string;
|
|
69
71
|
updated: number;
|
|
70
72
|
refreshed: number;
|
|
73
|
+
description?: string;
|
|
74
|
+
provider?: string;
|
|
75
|
+
slug?: string;
|
|
76
|
+
tags?: Tag[] | null;
|
|
77
|
+
targets?: Target[] | null;
|
|
78
|
+
loaderSource?: "jar";
|
|
71
79
|
}
|
|
72
80
|
/** Response from GET /mod/search/{limit}?term={q} */
|
|
73
|
-
export interface
|
|
81
|
+
export interface ModSearchResult {
|
|
74
82
|
mods: (number | string)[];
|
|
75
83
|
total: number;
|
|
76
84
|
limit: number;
|
|
77
85
|
term: string;
|
|
78
86
|
}
|
|
79
|
-
export interface
|
|
87
|
+
export interface PackVersionRef {
|
|
80
88
|
id: number;
|
|
81
89
|
name: string;
|
|
82
90
|
type: string;
|
|
83
91
|
updated: number;
|
|
84
|
-
targets:
|
|
92
|
+
targets: Target[];
|
|
85
93
|
}
|
|
86
|
-
export interface
|
|
94
|
+
export interface Target {
|
|
87
95
|
id: number;
|
|
88
96
|
name: string;
|
|
89
97
|
version: string;
|
|
@@ -91,18 +99,18 @@ export interface FtbTarget {
|
|
|
91
99
|
updated: number;
|
|
92
100
|
}
|
|
93
101
|
/** Response from GET /modpack/{id} */
|
|
94
|
-
export interface
|
|
102
|
+
export interface PackMetadata {
|
|
95
103
|
id: number;
|
|
96
104
|
name: string;
|
|
97
105
|
synopsis: string;
|
|
98
106
|
description: string;
|
|
99
|
-
art:
|
|
100
|
-
links:
|
|
101
|
-
authors:
|
|
102
|
-
versions:
|
|
107
|
+
art: Artwork[];
|
|
108
|
+
links: Link[];
|
|
109
|
+
authors: Author[];
|
|
110
|
+
versions: PackVersionRef[];
|
|
103
111
|
installs: number;
|
|
104
112
|
plays: number;
|
|
105
|
-
tags:
|
|
113
|
+
tags: Tag[];
|
|
106
114
|
status: string;
|
|
107
115
|
provider: string;
|
|
108
116
|
updated: number;
|
|
@@ -115,7 +123,7 @@ export interface FtbPack {
|
|
|
115
123
|
} | null;
|
|
116
124
|
}
|
|
117
125
|
/** Response from GET /modpack/search/{limit}?term={q} */
|
|
118
|
-
export interface
|
|
126
|
+
export interface PackSearchResult {
|
|
119
127
|
packs: number[];
|
|
120
128
|
curseforge?: number[];
|
|
121
129
|
total: number;
|
|
@@ -123,7 +131,7 @@ export interface FtbPackSearchResult {
|
|
|
123
131
|
term?: string;
|
|
124
132
|
refreshed?: number;
|
|
125
133
|
}
|
|
126
|
-
export interface
|
|
134
|
+
export interface ManifestFile {
|
|
127
135
|
id: number;
|
|
128
136
|
name: string;
|
|
129
137
|
/**
|
|
@@ -151,14 +159,14 @@ export interface FtbManifestFile {
|
|
|
151
159
|
};
|
|
152
160
|
}
|
|
153
161
|
/** Response from GET /modpack/{packId}/{versionId} */
|
|
154
|
-
export interface
|
|
162
|
+
export interface PackManifest {
|
|
155
163
|
id: number;
|
|
156
164
|
parent: number;
|
|
157
165
|
name: string;
|
|
158
166
|
type: string;
|
|
159
167
|
version: string;
|
|
160
|
-
targets:
|
|
161
|
-
files:
|
|
168
|
+
targets: Target[];
|
|
169
|
+
files: ManifestFile[];
|
|
162
170
|
specs: {
|
|
163
171
|
id: number;
|
|
164
172
|
minimum: number;
|
|
@@ -170,34 +178,34 @@ export interface FtbManifest {
|
|
|
170
178
|
refreshed: number;
|
|
171
179
|
status: string;
|
|
172
180
|
}
|
|
173
|
-
export declare function
|
|
174
|
-
export declare function
|
|
181
|
+
export declare function modpacksChGet<T>(path: string): Promise<T | null>;
|
|
182
|
+
export declare function searchMods(term: string, limit?: number): Promise<ModSearchResult | null>;
|
|
183
|
+
export declare function getMod(id: number | string): Promise<ModMetadata | null>;
|
|
175
184
|
/**
|
|
176
185
|
* Batch-fetch multiple mods by their IDs. Useful after a search to enrich
|
|
177
186
|
* result IDs into full mod objects. Runs requests in parallel.
|
|
178
187
|
*/
|
|
179
|
-
export declare function getModsBatch(ids: (number | string)[]): Promise<
|
|
188
|
+
export declare function getModsBatch(ids: (number | string)[]): Promise<ModMetadata[]>;
|
|
180
189
|
/**
|
|
181
190
|
* Resolve the download URL for a mod version.
|
|
182
191
|
* Some entries have url="" — in that case the CDN URL is constructed from
|
|
183
192
|
* the file ID using the same cfCdnUrl pattern as pack manifests.
|
|
184
193
|
*/
|
|
185
|
-
export declare function resolveModVersionUrl(version:
|
|
186
|
-
export declare function searchPacks(term: string, limit?: number): Promise<
|
|
194
|
+
export declare function resolveModVersionUrl(version: ModVersion): string | null;
|
|
195
|
+
export declare function searchPacks(term: string, limit?: number): Promise<PackSearchResult | null>;
|
|
187
196
|
export declare function getFeaturedPacks(limit?: number): Promise<{
|
|
188
197
|
packs: number[];
|
|
189
198
|
total: number;
|
|
190
199
|
} | null>;
|
|
191
|
-
export declare function getPack(packId: number): Promise<
|
|
192
|
-
export declare function getPackManifest(packId: number, versionId: number): Promise<
|
|
200
|
+
export declare function getPack(packId: number): Promise<PackMetadata | null>;
|
|
201
|
+
export declare function getPackManifest(packId: number, versionId: number): Promise<PackManifest | null>;
|
|
193
202
|
/**
|
|
194
|
-
* Search CurseForge packs via the unified
|
|
195
|
-
*
|
|
196
|
-
* in the `curseforge` array of the main /modpack/search/ response.
|
|
203
|
+
* Search CurseForge packs via the unified modpacks.ch search endpoint.
|
|
204
|
+
* Provider-specific browsing is also available through providerSearch.
|
|
197
205
|
*/
|
|
198
|
-
export declare function searchCfPacks(term: string, limit?: number): Promise<
|
|
199
|
-
export declare function getCfPack(packId: number): Promise<
|
|
200
|
-
export declare function getCfPackManifest(packId: number, versionId: number): Promise<
|
|
206
|
+
export declare function searchCfPacks(term: string, limit?: number): Promise<PackSearchResult | null>;
|
|
207
|
+
export declare function getCfPack(packId: number): Promise<PackMetadata | null>;
|
|
208
|
+
export declare function getCfPackManifest(packId: number, versionId: number): Promise<PackManifest | null>;
|
|
201
209
|
/**
|
|
202
210
|
* Build a direct CurseForge CDN download URL for a manifest file whose `url`
|
|
203
211
|
* is empty (CF packs return url: "" for mod-type files).
|
|
@@ -205,9 +213,27 @@ export declare function getCfPackManifest(packId: number, versionId: number): Pr
|
|
|
205
213
|
* Pattern: https://edge.forgecdn.net/files/{fileId÷1000}/{fileId%1000}/{name}
|
|
206
214
|
*/
|
|
207
215
|
export declare function cfCdnUrl(fileId: number, filename: string): string;
|
|
216
|
+
export declare function providerSearch(provider: "modrinth" | "curseforge", kind: "mod" | "modpack", term: string, opts?: {
|
|
217
|
+
loader?: string;
|
|
218
|
+
mcVersion?: string;
|
|
219
|
+
limit?: number;
|
|
220
|
+
}): Promise<ModMetadata[]>;
|
|
221
|
+
export declare function providerVersions(namespace: "mod" | "modrinth" | "modpack" | "ftb" | "curseforge", id: string | number, opts?: {
|
|
222
|
+
loader?: string;
|
|
223
|
+
mcVersion?: string;
|
|
224
|
+
mcVersionRange?: string;
|
|
225
|
+
limit?: number;
|
|
226
|
+
force?: boolean;
|
|
227
|
+
}): Promise<ModVersion[]>;
|
|
228
|
+
export declare function packVersions(namespace: "modpack" | "ftb" | "curseforge", id: number): Promise<PackVersionRef[]>;
|
|
229
|
+
export declare function loaderVersions(mcVersion: string, loader: string): Promise<{
|
|
230
|
+
version: string;
|
|
231
|
+
gameVersion: string;
|
|
232
|
+
type: string;
|
|
233
|
+
}[]>;
|
|
234
|
+
export declare function providerLink(record: ModMetadata, type: string): string | undefined;
|
|
208
235
|
/**
|
|
209
|
-
*
|
|
210
|
-
* Keep non-CurseForge URLs untouched so Modrinth/FTB mirrors are not polluted.
|
|
236
|
+
* Attach an optional configured key only to CurseForge's own download hosts.
|
|
211
237
|
*/
|
|
212
238
|
export declare function withCurseForgeApiKey(rawUrl: string): string;
|
|
213
239
|
/**
|
|
@@ -219,11 +245,11 @@ export declare function withCurseForgeApiKey(rawUrl: string): string;
|
|
|
219
245
|
* overrides ZIPs that have their own url should still be fine, this only
|
|
220
246
|
* returns null if there is genuinely no URL to construct).
|
|
221
247
|
*/
|
|
222
|
-
export declare function resolveFileUrl(file:
|
|
248
|
+
export declare function resolveFileUrl(file: ManifestFile): string | null;
|
|
223
249
|
/**
|
|
224
250
|
* Download a single FTB/CF manifest file to a local destination path.
|
|
225
251
|
* Handles both FTB packs (direct CDN `url`) and CurseForge packs (empty `url`
|
|
226
252
|
* → reconstruct via cfCdnUrl from embedded curseforge metadata).
|
|
227
253
|
*/
|
|
228
|
-
export declare function downloadManifestFile(file:
|
|
254
|
+
export declare function downloadManifestFile(file: ManifestFile, destPath: string): Promise<void>;
|
|
229
255
|
//# sourceMappingURL=modpacks-ch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modpacks-ch.d.ts","sourceRoot":"","sources":["../src/modpacks-ch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modpacks-ch.d.ts","sourceRoot":"","sources":["../src/modpacks-ch.ts"],"names":[],"mappings":"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"}
|