intermediate: sync

This commit is contained in:
Julian Krauser 2025-02-27 15:08:51 +01:00
parent 87f078a80e
commit 1646d0d6ca
5 changed files with 61 additions and 7 deletions

44
package-lock.json generated
View file

@ -9,6 +9,7 @@
"version": "0.0.0", "version": "0.0.0",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"dependencies": { "dependencies": {
"@socket.io/admin-ui": "^0.5.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"express": "^5.0.0-beta.3", "express": "^5.0.0-beta.3",
@ -223,6 +224,37 @@
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/@socket.io/admin-ui": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/@socket.io/admin-ui/-/admin-ui-0.5.1.tgz",
"integrity": "sha512-1dlGL2FGm6T+uL1e6iDvbo2eCINwvW7iVbjIblwh5kPPRM1SP8lmZrbFZf4QNJ/cqQ+JLcx49eXGM9WAB4TK7w==",
"license": "MIT",
"dependencies": {
"@types/bcryptjs": "^2.4.2",
"bcryptjs": "^2.4.3",
"debug": "~4.3.1"
},
"peerDependencies": {
"socket.io": ">=3.1.0"
}
},
"node_modules/@socket.io/admin-ui/node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/@socket.io/component-emitter": { "node_modules/@socket.io/component-emitter": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
@ -267,6 +299,12 @@
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"devOptional": true "devOptional": true
}, },
"node_modules/@types/bcryptjs": {
"version": "2.4.6",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz",
"integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==",
"license": "MIT"
},
"node_modules/@types/body-parser": { "node_modules/@types/body-parser": {
"version": "1.19.5", "version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
@ -701,6 +739,12 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
"license": "MIT"
},
"node_modules/better-sqlite3": { "node_modules/better-sqlite3": {
"version": "9.6.0", "version": "9.6.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-9.6.0.tgz", "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-9.6.0.tgz",

View file

@ -24,6 +24,7 @@
"author": "JK Effects", "author": "JK Effects",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"dependencies": { "dependencies": {
"@socket.io/admin-ui": "^0.5.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"express": "^5.0.0-beta.3", "express": "^5.0.0-beta.3",

View file

@ -8,7 +8,7 @@ export default (io: Server, socket: Socket) => {
"mission:join", "mission:join",
handleEvent( handleEvent(
{ type: "read", section: "operation", module: "mission" }, { type: "read", section: "operation", module: "mission" },
async (data: any) => { async (data: string, initialized: boolean) => {
socket.rooms.forEach((room) => { socket.rooms.forEach((room) => {
if (room !== socket.id && room != "home") { if (room !== socket.id && room != "home") {
socket.leave(room); socket.leave(room);
@ -40,10 +40,14 @@ export default (io: Server, socket: Socket) => {
const mission = MissionMap.read(data); const mission = MissionMap.read(data);
socket.join(data); socket.join(data);
socket.emit("status-mission:join", { status: "success" });
if (!initialized) {
socket.emit("package-mission", Y.encodeStateAsUpdate(mission.doc));
}
return { return {
type: "package-mission", type: "status-mission:join",
answer: Y.encodeStateAsUpdate(mission.doc), answer: { status: "success" },
}; };
} catch (error) { } catch (error) {
return { type: "status-join:join", answer: { status: "failed", msg: error.message } }; return { type: "status-join:join", answer: { status: "failed", msg: error.message } };

View file

@ -27,10 +27,10 @@ type PermissionPass =
export let handleEvent = ( export let handleEvent = (
permissions: PermissionPass, permissions: PermissionPass,
handler: (params: any) => Promise<EventResponseType>, handler: (...args: any[]) => Promise<EventResponseType>,
socket: Socket socket: Socket
) => { ) => {
return async (args: any) => { return async (...args: any[]) => {
try { try {
const socketData = SocketMap.read(socket.id); const socketData = SocketMap.read(socket.id);
if (permissions == "admin") { if (permissions == "admin") {
@ -46,7 +46,7 @@ export let handleEvent = (
} }
} }
const { answer, type, room } = await handler(args); const { answer, type, room } = await handler(...args);
if (room === undefined || room == "") { if (room === undefined || room == "") {
socket.emit(type, answer); socket.emit(type, answer);
} else { } else {

View file

@ -5,6 +5,7 @@ import authenticateSocket from "./middleware/authenticateSocket";
import base from "./endpoints/base"; import base from "./endpoints/base";
import perRequestCheck from "./middleware/perRequestCheck"; import perRequestCheck from "./middleware/perRequestCheck";
import missionManagement from "./endpoints/missionManagement"; import missionManagement from "./endpoints/missionManagement";
import { instrument } from "@socket.io/admin-ui";
export default abstract class SocketServer { export default abstract class SocketServer {
private static io: Server; private static io: Server;
@ -17,6 +18,10 @@ export default abstract class SocketServer {
credentials: true, credentials: true,
}, },
}); });
instrument(this.io, {
auth: false,
mode: "development",
});
this.io.engine.use(helmet()); this.io.engine.use(helmet());