diff --git a/bun.lock b/bun.lock index 19920263..fa8dc729 100644 --- a/bun.lock +++ b/bun.lock @@ -17,6 +17,7 @@ "hapi": "bin/hapi.cjs", }, "dependencies": { + "@hapi/protocol": "workspace:*", "@modelcontextprotocol/sdk": "^1.25.1", "@types/cross-spawn": "^6.0.6", "@types/ps-list": "^6.2.1", @@ -60,6 +61,7 @@ "name": "hapi-server", "version": "0.1.0", "dependencies": { + "@hapi/protocol": "workspace:*", "@socket.io/bun-engine": "^0.1.0", "grammy": "^1.38.4", "hono": "^4.11.2", @@ -75,12 +77,20 @@ "typescript": "^5", }, }, + "shared": { + "name": "@hapi/protocol", + "version": "0.1.0", + "dependencies": { + "zod": "^4.2.1", + }, + }, "web": { "name": "hapi-web", "version": "0.1.0", "dependencies": { "@assistant-ui/react": "^0.11.53", "@assistant-ui/react-markdown": "^0.11.9", + "@hapi/protocol": "workspace:*", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-slot": "^1.2.4", "@shikijs/langs": "^3.20.0", @@ -540,6 +550,8 @@ "@grammyjs/types": ["@grammyjs/types@3.22.2", "", {}, "sha512-uu7DX2ezhnBPozL3bXHmwhLvaFsh59E4QyviNH4Cij7EdVekYrs6mCzeXsa2pDk30l3uXo7DBahlZLzTPtpYZg=="], + "@hapi/protocol": ["@hapi/protocol@workspace:shared"], + "@hono/node-server": ["@hono/node-server@1.19.7", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw=="], "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], diff --git a/server/src/notifications/eventParsing.ts b/server/src/notifications/eventParsing.ts index b9601ca8..504b42a2 100644 --- a/server/src/notifications/eventParsing.ts +++ b/server/src/notifications/eventParsing.ts @@ -31,7 +31,7 @@ export function extractMessageEventType(event: SyncEvent): string | null { return null } - const message = event.message?.content ?? event.data + const message = event.message?.content const envelope = extractEventEnvelope(message) if (!envelope) { return null diff --git a/server/src/sse/sseManager.ts b/server/src/sse/sseManager.ts index 5f6e2c2a..740f9ea9 100644 --- a/server/src/sse/sseManager.ts +++ b/server/src/sse/sseManager.ts @@ -108,7 +108,7 @@ export class SSEManager { } if (event.type === 'message-received') { - return Boolean(event.sessionId && connection.sessionId === event.sessionId) + return connection.sessionId === event.sessionId } if (event.type === 'connection-changed') { @@ -119,11 +119,11 @@ export class SSEManager { return true } - if (event.sessionId && connection.sessionId === event.sessionId) { + if ('sessionId' in event && connection.sessionId === event.sessionId) { return true } - if (event.machineId && connection.machineId === event.machineId) { + if ('machineId' in event && connection.machineId === event.machineId) { return true } diff --git a/server/src/sync/syncEngine.ts b/server/src/sync/syncEngine.ts index b703cd4a..6097f970 100644 --- a/server/src/sync/syncEngine.ts +++ b/server/src/sync/syncEngine.ts @@ -128,32 +128,17 @@ export class SyncEngine { } } - const webappEvent: SyncEvent = event.type === 'message-received' - ? { - type: event.type, - namespace, - sessionId: event.sessionId, - machineId: event.machineId, - message: event.message - } - : { - type: event.type, - namespace, - sessionId: event.sessionId, - machineId: event.machineId - } - - this.sseManager.broadcast(webappEvent) + this.sseManager.broadcast(enrichedEvent) } private resolveNamespace(event: SyncEvent): string | undefined { if (event.namespace) { return event.namespace } - if (event.sessionId) { + if ('sessionId' in event) { return this.sessions.get(event.sessionId)?.namespace } - if (event.machineId) { + if ('machineId' in event) { return this.machines.get(event.machineId)?.namespace } return undefined