feat: add UE4SS DLL runtime extension

This commit is contained in:
npc0-hue
2026-07-23 09:49:14 +08:00
parent 8e34c8762a
commit 1caf40565c
30 changed files with 1179 additions and 70 deletions
+47
View File
@@ -173,6 +173,53 @@ describe("plugin manifest validation", () => {
expect(validateManifestFile("examples/scum-server-plugin/manifest.json")).toEqual([]);
});
it("accepts a pinned ready SCUM UE4SS DLL release and lifecycle reference", () => {
const errors = validateTemporaryScumCompanionManifest((manifest) => {
const extension = manifest.runtimeProfiles.dllExtensions[0];
extension.releaseState = "ready";
extension.version = "0.1.0";
extension.checksum = `sha256:${"a".repeat(64)}`;
extension.sizeBytes = 1048576;
extension.scumExecutableChecksum = `sha256:${"b".repeat(64)}`;
extension.ue4ssAbi = "ue4ss-3.0";
manifest.runtimeProfiles.lifecycleProfiles[0].dllExtensionRefs = [extension.key];
});
expect(errors).toEqual([]);
});
it("rejects unpinned, unsafe, or unpublished SCUM UE4SS DLL activation", () => {
const missingPins = validateTemporaryScumCompanionManifest((manifest) => {
const extension = manifest.runtimeProfiles.dllExtensions[0];
extension.releaseState = "ready";
manifest.runtimeProfiles.lifecycleProfiles[0].dllExtensionRefs = [extension.key];
});
expect(missingPins.some((error) => error.includes("checksum") || error.includes("sizeBytes") || error.includes("ue4ssAbi"))).toBe(true);
const unsafeURL = validateTemporaryScumCompanionManifest((manifest) => {
const extension = manifest.runtimeProfiles.dllExtensions[0];
extension.releaseState = "ready";
extension.releaseUrl = "https://127.0.0.1/scum.exe";
extension.checksum = `sha256:${"a".repeat(64)}`;
extension.sizeBytes = 1048576;
extension.scumExecutableChecksum = `sha256:${"b".repeat(64)}`;
extension.ue4ssAbi = "ue4ss-3.0";
});
expect(unsafeURL.some((error) => error.includes("releaseUrl"))).toBe(true);
const queryURL = validateTemporaryScumCompanionManifest((manifest) => {
manifest.runtimeProfiles.dllExtensions[0].releaseUrl = "https://cdn.npc0.com/scum_simple_rcon_ue4s.dll?release=.dll";
});
expect(queryURL.some((error) => error.includes("releaseUrl"))).toBe(true);
const unpublishedReference = validateTemporaryScumCompanionManifest((manifest) => {
const extension = manifest.runtimeProfiles.dllExtensions[0];
manifest.runtimeProfiles.lifecycleProfiles[0].dllExtensionRefs = [extension.key];
manifest.runtimeProfiles.lifecycleProfiles[0].platforms = ["windows", "linux"];
});
expect(unpublishedReference.some((error) => error.includes("not ready for activation"))).toBe(true);
expect(unpublishedReference.some((error) => error.includes("windows local-process"))).toBe(true);
});
it("defines a generated SCUM companion config without inline proof or session material", () => {
const pluginDir = path.join(pluginsRoot, "examples/scum-server-plugin");
const manifest = JSON.parse(fs.readFileSync(path.join(pluginDir, "manifest.json"), "utf8")) as {