Update
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,2 +1,7 @@
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
node_modules/
|
||||
docker-compose.override.yml
|
||||
target/
|
||||
*.log
|
||||
|
||||
@@ -27,14 +27,14 @@ services:
|
||||
context: ./web
|
||||
container_name: sova-web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- SOVA_HOST=sova-server
|
||||
- SOVA_PORT=8080
|
||||
- SOVA_PASSWORD=${SOVA_PASSWORD}
|
||||
depends_on:
|
||||
- sova-server
|
||||
ports:
|
||||
- "3000:3000"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
<script>
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const ws = new WebSocket(`ws://${location.host}`);
|
||||
const ws = new WebSocket(`${location.protocol === "https:" ? "wss:" : "ws:"}//${location.host}`);
|
||||
|
||||
ws.onmessage = (e) => {
|
||||
const s = JSON.parse(e.data);
|
||||
|
||||
@@ -20,6 +20,21 @@ let state = {
|
||||
connected: false,
|
||||
};
|
||||
|
||||
// --- Helpers ---
|
||||
|
||||
/** Recursively convert Map objects (from useMap decode) to plain objects */
|
||||
function mapToObj(val) {
|
||||
if (val instanceof Map) {
|
||||
const obj = {};
|
||||
for (const [k, v] of val) {
|
||||
if (typeof k === "string" || typeof k === "number") obj[k] = mapToObj(v);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
if (Array.isArray(val)) return val.map(mapToObj);
|
||||
return val;
|
||||
}
|
||||
|
||||
// --- Wire protocol ---
|
||||
|
||||
function buildFrame(msg) {
|
||||
@@ -60,7 +75,11 @@ function parseFrames(buffer) {
|
||||
try {
|
||||
messages.push(decode(payload));
|
||||
} catch {
|
||||
// skip malformed msgpack
|
||||
try {
|
||||
messages.push(mapToObj(decode(payload, { useMap: true })));
|
||||
} catch {
|
||||
// skip truly malformed msgpack
|
||||
}
|
||||
}
|
||||
offset += 8 + len;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user