From d268e548f58089270f30f28924044adbde0c3d45 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Tue, 29 Sep 2026 07:09:26 +0000 Subject: [PATCH] Upload via GUI (50 Dateien) --- package-lock.json | 104 +++- package.json | 6 +- src/friends.js | 70 +++ src/index.html | 63 ++- src/main.js | 454 +++++++++++++++++- src/preload.js | 23 +- src/renderer.js | 379 ++++++++++++++- src/store.js | 2 + src/styles.css | 25 +- .../aeromc-friends/aeromc-friends.php | 56 +++ .../aeromc-friends/includes/routes.php | 303 ++++++++++++ 11 files changed, 1436 insertions(+), 49 deletions(-) create mode 100644 src/friends.js create mode 100644 wordpress-plugin/aeromc-friends/aeromc-friends.php create mode 100644 wordpress-plugin/aeromc-friends/includes/routes.php diff --git a/package-lock.json b/package-lock.json index e7e51f3..3b9d659 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "aeromc", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aeromc", - "version": "1.1.2", + "version": "1.1.3", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@xhayper/discord-rpc": "^1.3.4", "archiver": "^7.0.1", + "ffmpeg-static": "^5.3.0", "loopback-capture": "^3.0.2", "node-window-manager": "^2.2.4", "skinview3d": "^3.4.2", @@ -22,6 +23,21 @@ "electron-builder": "^24.0.0" } }, + "node_modules/@derhuerst/http-basic": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.4.tgz", + "integrity": "sha512-F9rL9k9Xjf5blCz8HsJRO4diy111cayL2vkY2XE4r4t3n0yPXVYy3KD3nJ1qbrSn9743UWSXH4IwuCa/HWlGFw==", + "license": "MIT", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^2.0.0", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@develar/schema-utils": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", @@ -793,7 +809,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "license": "MIT", "dependencies": { "debug": "4" @@ -1350,7 +1365,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, "node_modules/builder-util": { @@ -1473,6 +1487,12 @@ "node": ">= 0.4" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1643,6 +1663,35 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/config-file-ts": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", @@ -1762,7 +1811,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2488,7 +2536,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2693,6 +2740,22 @@ "integrity": "sha512-3JyEFWGjFn7zHmoa9+zG1BmW7X2okcmAB+0Cnu9UFbVs/jCBnl2A8o065ZlXiw145K3eBM3uLuzrYXC0RK7eDg==", "license": "MIT" }, + "node_modules/ffmpeg-static": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-5.3.0.tgz", + "integrity": "sha512-H+K6sW6TiIX6VGend0KQwthe+kaceeH/luE8dIZyOP35ik7ahYojDuqlTV1bOrtEwl01sy2HFNGQfi5IDJvotg==", + "hasInstallScript": true, + "license": "GPL-3.0-or-later", + "dependencies": { + "@derhuerst/http-basic": "^8.2.0", + "env-paths": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "progress": "^2.0.3" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -3116,6 +3179,21 @@ "node": ">= 6" } }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "license": "MIT", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -3134,7 +3212,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -3677,7 +3754,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/node-addon-api": { @@ -3782,6 +3858,11 @@ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3871,7 +3952,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -4530,6 +4610,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", diff --git a/package.json b/package.json index ae20405..4620438 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "aeromc", "productName": "AeroMC", - "version": "1.1.2", + "version": "1.1.3", "description": "AeroMC – Instanz-basierter Minecraft-Launcher (à la MultiMC/Prism)", "homepage": "https://m-viper.de", "launcherWebsite": "https://aeromc.viper.ipv64.net", @@ -28,7 +28,8 @@ ], "asarUnpack": [ "node_modules/loopback-capture/**/*", - "node_modules/node-window-manager/**/*" + "node_modules/node-window-manager/**/*", + "node_modules/ffmpeg-static/**/*" ], "win": { "target": "nsis", @@ -46,6 +47,7 @@ "dependencies": { "@xhayper/discord-rpc": "^1.3.4", "archiver": "^7.0.1", + "ffmpeg-static": "^5.3.0", "loopback-capture": "^3.0.2", "node-window-manager": "^2.2.4", "skinview3d": "^3.4.2", diff --git a/src/friends.js b/src/friends.js new file mode 100644 index 0000000..a86a20d --- /dev/null +++ b/src/friends.js @@ -0,0 +1,70 @@ +'use strict'; + +/* + * friends.js – Anbindung an das AeroMC-Freundesystem (WordPress-Plugin) + * ----------------------------------------------------------------------------- + * Schlanke Fetch-Wrapper gegen die REST-Routen des "AeroMC Freunde"-Plugins + * (siehe wordpress-plugin/aeromc-friends/). Keine eigene Anmeldung - jeder + * Aufruf trägt einfach die Minecraft-UUID des aktiven Kontos. + * + * Genau wie bei discordpresence.js: jeder Fehler (Plugin nicht installiert, + * kein Internet, Seite down) wird abgefangen und nach oben als { ok:false, + * message } gereicht statt den Launcher zu stören - ein soziales Extra darf + * nie den Spielstart oder die Bedienung blockieren. + */ + +const BASIS_URL = 'https://viper-network.de/wp-json/aeromc/v1'; + +async function anfrage(pfad, { method = 'GET', body } = {}) { + try { + const url = method === 'GET' && body + ? `${BASIS_URL}${pfad}?${new URLSearchParams(body).toString()}` + : `${BASIS_URL}${pfad}`; + const res = await fetch(url, { + method, + headers: { 'Content-Type': 'application/json' }, + body: method === 'GET' ? undefined : JSON.stringify(body || {}), + }); + const daten = await res.json().catch(() => null); + if (!res.ok) return { ok: false, message: (daten && daten.message) || `Fehler ${res.status}` }; + return { ok: true, data: daten }; + } catch (err) { + return { ok: false, message: 'Freundesystem nicht erreichbar: ' + err.message }; + } +} + +function heartbeat({ uuid, username, instance, server }) { + return anfrage('/presence', { method: 'POST', body: { uuid, username, instance, server } }); +} + +function getFriends(uuid) { + return anfrage('/friends', { method: 'GET', body: { uuid } }); +} + +function getRequests(uuid) { + return anfrage('/friends/requests', { method: 'GET', body: { uuid } }); +} + +function getSentRequests(uuid) { + return anfrage('/friends/sent', { method: 'GET', body: { uuid } }); +} + +function sendRequest(uuid, username, targetUsername) { + return anfrage('/friends/request', { method: 'POST', body: { uuid, username, targetUsername } }); +} + +function respond(uuid, otherUuid, accept) { + return anfrage('/friends/respond', { method: 'POST', body: { uuid, otherUuid, accept } }); +} + +function cancelRequest(uuid, otherUuid) { + return anfrage('/friends/cancel', { method: 'POST', body: { uuid, otherUuid } }); +} + +function removeFriend(uuid, otherUuid) { + return anfrage('/friends/remove', { method: 'POST', body: { uuid, otherUuid } }); +} + +module.exports = { + heartbeat, getFriends, getRequests, getSentRequests, sendRequest, respond, cancelRequest, removeFriend, +}; diff --git a/src/index.html b/src/index.html index 3ec5169..05aee94 100644 --- a/src/index.html +++ b/src/index.html @@ -17,6 +17,7 @@ +
@@ -285,6 +286,14 @@ Erscheint nur, während das Launcher-Fenster nicht im Vordergrund ist. +
+
Freundesystem
+ + Ausgeschaltet: du bist für niemanden sichtbar und kannst von niemandem als Freund gefunden/hinzugefügt werden. Bestehende Freundschaften bleiben erhalten, zeigen dich aber als offline. +
+
Autostart
+ + +