From 5fbc189884d2514aee7e0b6e37bf27a5c56d0404 Mon Sep 17 00:00:00 2001
From: Julian Krauser <jkrauser209@gmail.com>
Date: Mon, 3 Mar 2025 17:05:55 +0100
Subject: [PATCH] remove y-protcol

---
 package-lock.json                            | 21 ------------
 package.json                                 |  1 -
 src/helpers/missionDocHelper.ts              | 24 ++++++++++---
 src/storage/missionMap.ts                    |  9 ++---
 src/types/y-protocols.d.ts                   |  3 --
 src/websocket/endpoints/base.ts              | 12 ++++---
 src/websocket/endpoints/missionManagement.ts | 36 ++++++++------------
 7 files changed, 45 insertions(+), 61 deletions(-)
 delete mode 100644 src/types/y-protocols.d.ts

diff --git a/package-lock.json b/package-lock.json
index 0297ca2..bd591f5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -37,7 +37,6 @@
         "sqlite3": "^5.1.7",
         "typeorm": "^0.3.20",
         "uuid": "^10.0.0",
-        "y-protocols": "^1.0.6",
         "yjs": "^13.6.23"
       },
       "devDependencies": {
@@ -4832,26 +4831,6 @@
         "node": ">=0.4"
       }
     },
-    "node_modules/y-protocols": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz",
-      "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==",
-      "license": "MIT",
-      "dependencies": {
-        "lib0": "^0.2.85"
-      },
-      "engines": {
-        "node": ">=16.0.0",
-        "npm": ">=8.0.0"
-      },
-      "funding": {
-        "type": "GitHub Sponsors ❤",
-        "url": "https://github.com/sponsors/dmonad"
-      },
-      "peerDependencies": {
-        "yjs": "^13.0.0"
-      }
-    },
     "node_modules/y18n": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
diff --git a/package.json b/package.json
index 5e482ae..edf5a42 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,6 @@
     "sqlite3": "^5.1.7",
     "typeorm": "^0.3.20",
     "uuid": "^10.0.0",
-    "y-protocols": "^1.0.6",
     "yjs": "^13.6.23"
   },
   "devDependencies": {
diff --git a/src/helpers/missionDocHelper.ts b/src/helpers/missionDocHelper.ts
index f93c772..f979059 100644
--- a/src/helpers/missionDocHelper.ts
+++ b/src/helpers/missionDocHelper.ts
@@ -1,5 +1,4 @@
 import * as Y from "yjs";
-import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
 import { MissionMap } from "../storage/missionMap";
 
 export default abstract class MissionDocHelper {
@@ -20,15 +19,30 @@ export default abstract class MissionDocHelper {
     // const ytext = ydoc.getText('meinText');
     // ytext.insert(0, 'Hier ist ein initialer Text');
 
-    const awareness = new AwarenessProtocol.Awareness(doc);
-    awareness.setLocalState(null);
+    const awareness = 0; // TODO Awareness
 
     MissionMap.write(missionId, { missionId, doc, awareness, timestamp: 0 });
     console.log(`created local doc ${missionId}`);
   }
 
-  public static async saveDoc(missionId: string) {
-    // store Data to database
+  public static docAsUpdate(missionId: string): Uint8Array {
     const mission = MissionMap.read(missionId);
+    return Y.encodeStateAsUpdate(mission.doc);
+  }
+
+  public static docAsStateVector(missionId: string): Uint8Array {
+    const mission = MissionMap.read(missionId);
+    return Y.encodeStateVector(mission.doc);
+  }
+
+  public static docTimestamp(missionId: string): number {
+    const mission = MissionMap.read(missionId);
+    return mission.timestamp;
+  }
+
+  public static async saveDoc(missionId: string, update: Uint8Array) {
+    MissionMap.updateState(missionId, update);
+    const mission = MissionMap.read(missionId);
+    // store Data to database
   }
 }
diff --git a/src/storage/missionMap.ts b/src/storage/missionMap.ts
index a84bf35..57d7e9f 100644
--- a/src/storage/missionMap.ts
+++ b/src/storage/missionMap.ts
@@ -1,11 +1,10 @@
 import * as Y from "yjs";
-import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
 import ms from "ms";
 
 export interface missionStoreModel {
   missionId: string;
   doc: Y.Doc;
-  awareness: AwarenessProtocol.Awareness;
+  awareness: any;
   timestamp: number;
 }
 
@@ -33,11 +32,13 @@ export abstract class MissionMap {
     this.write(identifier, mission, true);
   }
 
-  public static updateAwareness(identifier: string, data: Uint8Array, socketId: string): void {
+  public static updateAwareness(identifier: string, data: any): void {
     this.monitorAccess(identifier);
 
     let mission = this.read(identifier);
-    AwarenessProtocol.applyAwarenessUpdate(mission.awareness, data, socketId);
+
+    // TODO save awareness
+
     this.write(identifier, mission, true);
   }
 
diff --git a/src/types/y-protocols.d.ts b/src/types/y-protocols.d.ts
deleted file mode 100644
index a489418..0000000
--- a/src/types/y-protocols.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-declare module "y-protocols/dist/awareness.cjs" {
-  export * from "y-protocols/awareness";
-}
diff --git a/src/websocket/endpoints/base.ts b/src/websocket/endpoints/base.ts
index 8f9c403..0ba28d7 100644
--- a/src/websocket/endpoints/base.ts
+++ b/src/websocket/endpoints/base.ts
@@ -30,12 +30,14 @@ export default (io: Server, socket: Socket) => {
   socket.on("disconnecting", () => {
     console.log("socket disconnection: ", socket.id);
     const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
-    socket.leave(socketRooms[0]);
-
-    const clients = io.sockets.adapter.rooms.get(socketRooms[0]);
-    if (!clients || clients.size == 0) {
-      MissionMap.delete(socketRooms[0]);
+    if (socketRooms[0]) {
+      socket.leave(socketRooms[0]);
+      const clients = io.sockets.adapter.rooms.get(socketRooms[0]);
+      if (!clients || clients.size == 0) {
+        MissionMap.delete(socketRooms[0]);
+      }
     }
+
     SocketMap.delete(socket.id);
   });
 
diff --git a/src/websocket/endpoints/missionManagement.ts b/src/websocket/endpoints/missionManagement.ts
index 030719b..53a4dd2 100644
--- a/src/websocket/endpoints/missionManagement.ts
+++ b/src/websocket/endpoints/missionManagement.ts
@@ -2,7 +2,6 @@ import { Server, Socket } from "socket.io";
 import { handleEvent } from "../handleEvent";
 import { MissionMap, missionStoreModel } from "../../storage/missionMap";
 import * as Y from "yjs";
-import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
 import MissionDocHelper from "../../helpers/missionDocHelper";
 
 export default (io: Server, socket: Socket) => {
@@ -24,35 +23,30 @@ export default (io: Server, socket: Socket) => {
             await MissionDocHelper.populateDoc(missionId);
           }
 
-          const mission = MissionMap.read(missionId);
-
           if (clientLastUpdate && clientLastUpdate.timestamp) {
-            if (mission.timestamp > clientLastUpdate.timestamp) {
+            if (MissionDocHelper.docTimestamp(missionId) > clientLastUpdate.timestamp) {
               socket.emit("package-sync", {
-                update: Y.encodeStateAsUpdate(mission.doc),
-                timestamp: mission.timestamp,
+                update: MissionDocHelper.docAsUpdate(missionId),
+                timestamp: MissionDocHelper.docTimestamp(missionId),
                 source: "server",
               });
             } else {
               socket.emit("sync-get-missing-updates", {
-                stateVector: Y.encodeStateVector(mission.doc),
-                timestamp: mission.timestamp,
+                stateVector: MissionDocHelper.docAsStateVector(missionId),
+                timestamp: MissionDocHelper.docTimestamp(missionId),
                 source: "server",
               });
             }
           } else {
             socket.emit("package-sync", {
-              update: Y.encodeStateAsUpdate(mission.doc),
-              timestamp: mission.timestamp,
+              update: MissionDocHelper.docAsUpdate(missionId),
+              timestamp: MissionDocHelper.docTimestamp(missionId),
               source: "server",
             });
           }
 
           socket.emit("package-sync-awareness", {
-            update: AwarenessProtocol.encodeAwarenessUpdate(
-              mission.awareness,
-              Array.from(mission.awareness.getStates().keys())
-            ),
+            update: [], // do awareness self
             source: "server",
           });
 
@@ -75,7 +69,7 @@ export default (io: Server, socket: Socket) => {
       async (data: { update: Array<number>; timestamp: number }) => {
         const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
         try {
-          MissionMap.updateState(socketRooms[0], new Uint8Array(data.update));
+          MissionDocHelper.saveDoc(socketRooms[0], new Uint8Array(data.update));
 
           return {
             type: "package-sync",
@@ -87,10 +81,9 @@ export default (io: Server, socket: Socket) => {
             room: socketRooms[0],
           };
         } catch (error) {
-          const mission = MissionMap.read(socketRooms[0]);
           socket.emit("package-sync", {
-            update: Y.encodeStateAsUpdate(mission.doc),
-            timestamp: mission.timestamp,
+            update: MissionDocHelper.docAsUpdate(socketRooms[0]),
+            timestamp: MissionDocHelper.docTimestamp(socketRooms[0]),
             source: "server",
             error: true,
           });
@@ -115,7 +108,7 @@ export default (io: Server, socket: Socket) => {
             type: "package-sync",
             answer: {
               update: missingUpdates,
-              timestamp: mission.timestamp,
+              timestamp: MissionDocHelper.docTimestamp(socketRooms[0]),
               source: "server",
             },
           };
@@ -134,7 +127,7 @@ export default (io: Server, socket: Socket) => {
       async (data: { update: Array<number>; timestamp: number }) => {
         const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
         try {
-          MissionMap.updateAwareness(socketRooms[0], new Uint8Array(data.update), socket.id);
+          MissionMap.updateAwareness(socketRooms[0], new Uint8Array(data.update));
 
           return {
             type: "package-sync-awareness",
@@ -145,9 +138,8 @@ export default (io: Server, socket: Socket) => {
             room: socketRooms[0],
           };
         } catch (error) {
-          const mission = MissionMap.read(socketRooms[0]);
           socket.emit("package-sync-awareness", {
-            update: Y.encodeStateAsUpdate(mission.doc),
+            update: MissionDocHelper.docAsUpdate(socketRooms[0]),
             source: "server",
             error: true,
           });