diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..7d74fe2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb + +# Miscellaneous +/static/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..3e26b6b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,34 @@ +{ + "arrowParens": "always", + "bracketSameLine": true, + "objectWrap": "preserve", + "bracketSpacing": true, + "semi": true, + "experimentalOperatorPosition": "end", + "experimentalTernaries": false, + "singleQuote": false, + "jsxSingleQuote": false, + "quoteProps": "as-needed", + "trailingComma": "all", + "singleAttributePerLine": false, + "htmlWhitespaceSensitivity": "css", + "vueIndentScriptAndStyle": true, + "proseWrap": "preserve", + "insertPragma": false, + "printWidth": 100, + "plugins": [ + "prettier-plugin-svelte" + ], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ], + "requirePragma": false, + "tabWidth": 4, + "useTabs": false, + "embeddedLanguageFormatting": "auto" +} diff --git a/bun.lock b/bun.lock index 5aae334..daeb7e0 100644 --- a/bun.lock +++ b/bun.lock @@ -23,6 +23,8 @@ "@sveltejs/vite-plugin-svelte": "^6.0.0", "@tailwindcss/vite": "^4.0.0", "@types/polka": "^0.5.7", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", "svelte": "^5.0.0", "svelte-check": "^4.0.0", "tailwindcss": "^4.0.0", @@ -357,6 +359,10 @@ "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], + + "prettier-plugin-svelte": ["prettier-plugin-svelte@3.4.0", "", { "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ=="], + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], diff --git a/package.json b/package.json index ff8ae57..1a8dc5b 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,47 @@ { - "name": "wormhole", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^6.0.0", - "@sveltejs/kit": "^2.22.0", - "@sveltejs/vite-plugin-svelte": "^6.0.0", - "@tailwindcss/vite": "^4.0.0", - "@types/polka": "^0.5.7", - "svelte": "^5.0.0", - "svelte-check": "^4.0.0", - "tailwindcss": "^4.0.0", - "typescript": "^5.0.0", - "vite": "^7.0.4" - }, - "dependencies": { - "@hpke/chacha20poly1305": "^1.7.1", - "@hpke/core": "^1.7.4", - "@hpke/hybridkem-x-wing": "^0.6.1", - "@noble/ciphers": "^1.3.0", - "@noble/curves": "^1.9.0", - "@sveltejs/adapter-node": "^5.3.1", - "@types/streamsaver": "^2.0.5", - "@types/ws": "^8.18.1", - "polka": "^0.5.2", - "streamsaver": "^2.0.6", - "ts-mls": "^1.1.0", - "ws": "^8.18.3" - }, - "trustedDependencies": [ - "@tailwindcss/oxide" - ] -} \ No newline at end of file + "name": "wormhole", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^6.0.0", + "@sveltejs/kit": "^2.22.0", + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tailwindcss/vite": "^4.0.0", + "@types/polka": "^0.5.7", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^7.0.4" + }, + "dependencies": { + "@hpke/chacha20poly1305": "^1.7.1", + "@hpke/core": "^1.7.4", + "@hpke/hybridkem-x-wing": "^0.6.1", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.0", + "@sveltejs/adapter-node": "^5.3.1", + "@types/streamsaver": "^2.0.5", + "@types/ws": "^8.18.1", + "polka": "^0.5.2", + "streamsaver": "^2.0.6", + "ts-mls": "^1.1.0", + "ws": "^8.18.3" + }, + "trustedDependencies": [ + "@tailwindcss/oxide" + ] +} diff --git a/src/lib/challenge.ts b/src/lib/challenge.ts index dc71225..4c6536a 100644 --- a/src/lib/challenge.ts +++ b/src/lib/challenge.ts @@ -1,22 +1,22 @@ import { ws } from "$stores/websocketStore"; -import { WebSocketMessageType } from "$types/websocket"; +import { WebSocketRequestType, WebSocketResponseType } from "$types/websocket"; import { solveChallenge } from "./powUtil"; export async function doChallenge(additionalData: string = ""): Promise<{ - challenge: string; + target: string; nonce: string; } | null> { - let roomChallenge: string | null = null; + let roomChallengeTarget: string | null = null; let challengePromise = new Promise((resolve) => { let unsubscribe = ws.handleEvent( - WebSocketMessageType.CHALLENGE, + WebSocketResponseType.CHALLENGE_RESPONSE, async (value) => { unsubscribe(); - roomChallenge = value.challenge; + roomChallengeTarget = value.target; resolve( await solveChallenge( - roomChallenge, + roomChallengeTarget, value.difficulty, additionalData, ), @@ -26,7 +26,7 @@ export async function doChallenge(additionalData: string = ""): Promise<{ }); ws.send({ - type: WebSocketMessageType.REQUEST_CHALLENGE, + type: WebSocketRequestType.CHALLENGE_REQUEST, }); let challengeNonce = await challengePromise; @@ -34,12 +34,12 @@ export async function doChallenge(additionalData: string = ""): Promise<{ throw new Error("Could not solve challenge within max iterations"); } - if (!roomChallenge) { + if (!roomChallengeTarget) { throw new Error("No room challenge"); } return { - challenge: roomChallenge, + target: roomChallengeTarget, nonce: challengeNonce, }; } \ No newline at end of file diff --git a/src/lib/server/websocketHandler.ts b/src/lib/server/websocketHandler.ts index f4a7c3e..7ac2d20 100644 --- a/src/lib/server/websocketHandler.ts +++ b/src/lib/server/websocketHandler.ts @@ -1,5 +1,5 @@ import { WebSocketServer } from "ws"; -import { Socket, WebSocketMessageType, type WebSocketMessage } from "../../types/websocket.ts"; +import { RoomStatusType, Socket, WebSocketErrorType, WebSocketRequestType, WebSocketResponseType, WebSocketRoomMessageType, WebSocketWebRtcMessageType, type WebSocketMessage } from "../../types/websocket.ts"; import { LiveMap } from '../liveMap.ts'; import { hashStringSHA256 } from "../powUtil.ts"; @@ -69,7 +69,7 @@ async function createRoom(socket: Socket, roomName?: string): Promise { let room = rooms.set(roomId, new ServerRoom()); - socket.send({ type: WebSocketMessageType.ROOM_CREATED, data: room.key }); + socket.send({ type: WebSocketResponseType.ROOM_CREATED, data: room.key }); try { await joinRoom(room.key, socket, true); @@ -86,21 +86,21 @@ async function joinRoom(roomId: string, socket: Socket, initial?: boolean): Prom // should be unreachable if (!room) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.ROOM_NOT_FOUND }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.ROOM_NOT_FOUND }); return undefined; } if (room.length == 2) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.ROOM_FULL }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.ROOM_FULL }); return undefined; } // notify all clients in the room of the new client, except the client itself - room.notifyAll({ type: WebSocketMessageType.JOIN_ROOM, roomId }); + room.notifyAll({ type: WebSocketRoomMessageType.PARTICIPANT_JOINED, roomId, participants: room.length }); room.push(socket); socket.addEventListener('close', (ev) => { - room.notifyAll({ type: WebSocketMessageType.ROOM_LEFT, roomId }); + room.notifyAll({ type: WebSocketRoomMessageType.PARTICIPANT_LEFT, roomId, participants: room.length }); // for some reason, when you filter the array when the length is 1 it stays at 1, but we *know* that if its 1 // then when this client disconnects, the room should be deleted since the room is empty @@ -118,12 +118,13 @@ async function joinRoom(roomId: string, socket: Socket, initial?: boolean): Prom room.set(room.filter(client => client.ws !== ev.target)); }); + // sending the join message to the client who created the room is fucky if (!initial) { - socket.send({ type: WebSocketMessageType.ROOM_JOINED, roomId: roomId, participants: room.length }); + socket.send({ type: WebSocketResponseType.ROOM_JOINED, roomId: roomId, participants: room.length }); } // TODO: consider letting rooms get larger than 2 clients if (room.length == 2) { - room.forEachClient(client => client.send({ type: WebSocketMessageType.ROOM_READY, data: { isInitiator: client !== socket } })); + room.forEachClient(client => client.send({ type: WebSocketRoomMessageType.ROOM_READY, data: { isInitiator: client !== socket, roomId, participants: room.length } })); } console.log("Room created:", roomId, room.length); @@ -148,17 +149,17 @@ function generateChallenge(): string { return challenge; } -async function validateChallenge(challenge: string, nonce: string, additionalData: string = ""): Promise { - if (!outstandingChallenges.has(challenge)) { +async function validateChallenge(challenge: {target: string, nonce: string}, additionalData: string = ""): Promise { + if (!outstandingChallenges.has(challenge.target)) { return false; } - let hash = await hashStringSHA256(`${additionalData}${challenge}${nonce}`); + let hash = await hashStringSHA256(`${additionalData}${challenge.target}${challenge.nonce}`); let result = hash.startsWith('0'.repeat(CHALLENGE_DIFFICULTY)); if (result) { console.log("Challenge solved:", challenge); - clearTimeout(outstandingChallenges.get(challenge)!); - outstandingChallenges.delete(challenge); + clearTimeout(outstandingChallenges.get(challenge.target)!); + outstandingChallenges.delete(challenge.target); } return result; @@ -170,7 +171,7 @@ function leaveRoom(roomId: string, socket: Socket): ServerRoom | undefined { // should be unreachable if (!room) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.ROOM_NOT_FOUND }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.ROOM_NOT_FOUND }); return undefined; } @@ -187,7 +188,7 @@ function leaveRoom(roomId: string, socket: Socket): ServerRoom | undefined { room.set(room.filter(client => client !== socket)); - socket.send({ type: WebSocketMessageType.ROOM_LEFT, roomId }); + socket.send({ type: WebSocketResponseType.ROOM_LEFT, roomId }); return room; } @@ -217,7 +218,7 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { if (message === undefined) { console.log("Received non-JSON message:", event); // If the message is not JSON, send an error message - socket.send({ type: WebSocketMessageType.ERROR, data: errors.MALFORMED_MESSAGE }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.MALFORMED_MESSAGE }); return; } @@ -226,14 +227,14 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { let room: ServerRoom | undefined = undefined; switch (message.type) { - case WebSocketMessageType.CREATE_ROOM: - if (!message.nonce || !message.challenge) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.MISSING_DATA }); + case WebSocketRequestType.CREATE_ROOM: + if (!message.challenge || !message.challenge.target || !message.challenge.nonce) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.MISSING_DATA }); return; } - if (!await validateChallenge(message.challenge, message.nonce)) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.INVALID_CHALLENGE }); + if (!await validateChallenge(message.challenge)) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.INVALID_CHALLENGE }); return; } @@ -251,23 +252,23 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { await createRoom(socket, message.roomName); } catch (e: any) { - socket.send({ type: WebSocketMessageType.ERROR, data: e.message }); + socket.send({ type: WebSocketErrorType.ERROR, data: e.message }); throw e; } break; - case WebSocketMessageType.JOIN_ROOM: - if (!message.roomId || !message.nonce || !message.challenge) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.MISSING_DATA }); + case WebSocketRequestType.ROOM_JOIN: + if (!message.roomId || !message.challenge || !message.challenge.target || !message.challenge.nonce) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.MISSING_DATA }); return; } - if (!await validateChallenge(message.challenge, message.nonce, message.roomId)) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.INVALID_CHALLENGE }); + if (!await validateChallenge(message.challenge, message.roomId)) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.INVALID_CHALLENGE }); return; } if (rooms.get(message.roomId) == undefined) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.ROOM_NOT_FOUND }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.ROOM_NOT_FOUND }); return; } @@ -275,14 +276,14 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { if (!room) return; break; - case WebSocketMessageType.LEAVE_ROOM: + case WebSocketRequestType.ROOM_LEAVE: if (!message.roomId) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.MALFORMED_MESSAGE }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.MALFORMED_MESSAGE }); return; } if (rooms.get(message.roomId) == undefined) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.ROOM_NOT_FOUND }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.ROOM_NOT_FOUND }); return; } @@ -290,27 +291,34 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { if (!room) return; break; - case WebSocketMessageType.CHECK_ROOM_EXISTS: - if (!message.roomId || !message.nonce || !message.challenge) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.MISSING_DATA }); + case WebSocketRequestType.ROOM_STATUS: + if (!message.roomId || !message.challenge || !message.challenge.target || !message.challenge.nonce) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.MISSING_DATA }); return; } - if (!await validateChallenge(message.challenge, message.nonce, message.roomId)) { - socket.send({ type: WebSocketMessageType.ERROR, data: errors.INVALID_CHALLENGE }); + if (!await validateChallenge(message.challenge, message.roomId)) { + socket.send({ type: WebSocketErrorType.ERROR, data: errors.INVALID_CHALLENGE }); return; } - socket.send({ type: WebSocketMessageType.ROOM_STATUS, roomId: message.roomId, status: rooms.get(message.roomId) ? 'found' : 'not-found' }); - break; - case WebSocketMessageType.REQUEST_CHALLENGE: - let challenge = generateChallenge(); + let roomStatus = RoomStatusType.OPEN; + if (!rooms.get(message.roomId)) { + roomStatus = RoomStatusType.NOT_FOUND; + } else if (rooms.get(message.roomId)!.length === 2) { + roomStatus = RoomStatusType.OPEN; + } - socket.send({ type: WebSocketMessageType.CHALLENGE, challenge, difficulty: CHALLENGE_DIFFICULTY }); + socket.send({ type: WebSocketResponseType.ROOM_STATUS, roomId: message.roomId, status: roomStatus }); break; - case WebSocketMessageType.WEBRTC_OFFER: - case WebSocketMessageType.WERTC_ANSWER: - case WebSocketMessageType.WEBRTC_ICE_CANDIDATE: + case WebSocketRequestType.CHALLENGE_REQUEST: + let target = generateChallenge(); + + socket.send({ type: WebSocketResponseType.CHALLENGE_RESPONSE, target, difficulty: CHALLENGE_DIFFICULTY }); + break; + case WebSocketWebRtcMessageType.OFFER: + case WebSocketWebRtcMessageType.ANSWER: + case WebSocketWebRtcMessageType.ICE_CANDIDATE: // relay these messages to the other peers in the room room = rooms.get(message.data.roomId); @@ -324,7 +332,7 @@ export function confgiureWebsocketServer(wss: WebSocketServer) { break; default: console.warn(`Unknown message type: ${message.type}`); - socket.send({ type: WebSocketMessageType.ERROR, data: errors.UNKNOWN_MESSAGE_TYPE }); + socket.send({ type: WebSocketErrorType.ERROR, data: errors.UNKNOWN_MESSAGE_TYPE }); break; } }); diff --git a/src/lib/webrtc.ts b/src/lib/webrtc.ts index cf0bc16..8023636 100644 --- a/src/lib/webrtc.ts +++ b/src/lib/webrtc.ts @@ -1,9 +1,9 @@ import { ws } from '$stores/websocketStore'; -import { WebSocketMessageType } from '$types/websocket'; import { WebRTCPacketType, type WebRTCPeerCallbacks } from '$types/webrtc'; import { browser } from '$app/environment'; import { createApplicationMessage, createCommit, createGroup, decodeMlsMessage, defaultCapabilities, defaultLifetime, emptyPskIndex, encodeMlsMessage, generateKeyPackage, getCiphersuiteFromName, getCiphersuiteImpl, joinGroup, processPrivateMessage, type CiphersuiteImpl, type ClientState, type Credential, type KeyPackage, type PrivateKeyPackage, type Proposal } from 'ts-mls'; +import { WebSocketWebRtcMessageType } from '$types/websocket'; export class WebRTCPeer { private peer: RTCPeerConnection | null = null; @@ -35,7 +35,7 @@ export class WebRTCPeer { private sendIceCandidate(candidate: RTCIceCandidate) { ws.send({ - type: WebSocketMessageType.WEBRTC_ICE_CANDIDATE, + type: WebSocketWebRtcMessageType.ICE_CANDIDATE, data: { roomId: this.roomId, candidate: candidate, @@ -261,7 +261,7 @@ export class WebRTCPeer { await this.peer.setLocalDescription(offer) ws.send({ - type: WebSocketMessageType.WEBRTC_OFFER, + type: WebSocketWebRtcMessageType.OFFER, data: { roomId: this.roomId, sdp: offer, @@ -295,7 +295,7 @@ export class WebRTCPeer { console.log("Sending answer", answer); ws.send({ - type: WebSocketMessageType.WERTC_ANSWER, + type: WebSocketWebRtcMessageType.ANSWER, data: { roomId: this.roomId, sdp: answer, @@ -353,7 +353,7 @@ export class WebRTCPeer { this.send(keyPackageMessageBuf, WebRTCPacketType.KEY_PACKAGE); } - public async send(data: ArrayBuffer, type: WebRTCPacketType) { + public async send(data: ArrayBufferLike, type: WebRTCPacketType) { console.log("Sending message of type", type, "with data", data); if (!this.dataChannel || this.dataChannel.readyState !== 'open') throw new Error('Data channel not initialized'); diff --git a/src/lib/webrtcUtil.ts b/src/lib/webrtcUtil.ts index 35ed64a..62f4426 100644 --- a/src/lib/webrtcUtil.ts +++ b/src/lib/webrtcUtil.ts @@ -2,10 +2,10 @@ import { writable, get, type Writable } from "svelte/store"; import { WebRTCPeer } from "$lib/webrtc"; import { WebRTCPacketType } from "$types/webrtc"; import { room } from "$stores/roomStore"; -import { RoomConnectionState, type Room } from "$types/websocket"; +import { RoomConnectionState, WebSocketErrorType, WebSocketResponseType, WebSocketRoomMessageType, WebSocketWebRtcMessageType, type Room } from "$types/websocket"; import { advertisedOffers, fileRequestIds, messages, receivedOffers } from "$stores/messageStore"; import { MessageType, type Message } from "$types/message"; -import { WebSocketMessageType, type WebSocketMessage } from "$types/websocket"; +import { type WebSocketMessage } from "$types/websocket"; import { WebBuffer } from "./buffer"; import { goto } from "$app/navigation"; @@ -257,30 +257,30 @@ export async function handleMessage(event: MessageEvent) { const message: WebSocketMessage = JSON.parse(event.data); switch (message.type) { - case WebSocketMessageType.ROOM_CREATED: + case WebSocketResponseType.ROOM_CREATED: console.log("Room created:", message.data); room.set({ id: message.data, host: true, RTCConnectionReady: false, connectionState: RoomConnectionState.CONNECTED, participants: 1 }); goto(`/${message.data}`); return; - case WebSocketMessageType.JOIN_ROOM: + case WebSocketRoomMessageType.PARTICIPANT_JOINED: console.log("new client joined room"); room.update((room) => ({ ...room, participants: room.participants + 1 })); return; - case WebSocketMessageType.ROOM_JOINED: + case WebSocketResponseType.ROOM_JOINED: // TODO: if a client disconnects, we need to resync the room state room.set({ host: false, id: message.roomId, RTCConnectionReady: false, connectionState: RoomConnectionState.CONNECTED, participants: message.participants }); console.log("Joined room"); return; - case WebSocketMessageType.ROOM_LEFT: + case WebSocketRoomMessageType.PARTICIPANT_LEFT: room.update((room) => ({ ...room, participants: room.participants - 1 })); console.log("Participant left room"); return; - case WebSocketMessageType.ERROR: + case WebSocketErrorType.ERROR: console.error("Error:", message.data); error.set(message.data); return; - case WebSocketMessageType.ROOM_READY: + case WebSocketRoomMessageType.ROOM_READY: let roomId = get(room).id; if (roomId === null) { @@ -307,20 +307,20 @@ export async function handleMessage(event: MessageEvent) { } switch (message.type) { - case WebSocketMessageType.WEBRTC_OFFER: + case WebSocketWebRtcMessageType.OFFER: console.log("Received offer"); await get(peer)?.setRemoteDescription( new RTCSessionDescription(message.data.sdp), ); await get(peer)?.createAnswer(); return; - case WebSocketMessageType.WERTC_ANSWER: + case WebSocketWebRtcMessageType.ANSWER: console.log("Received answer"); await get(peer)?.setRemoteDescription( new RTCSessionDescription(message.data.sdp), ); return; - case WebSocketMessageType.WEBRTC_ICE_CANDIDATE: + case WebSocketWebRtcMessageType.ICE_CANDIDATE: console.log("Received ICE candidate"); await get(peer)?.addIceCandidate(message.data.candidate); return; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 6e2009d..7f23e40 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -15,11 +15,7 @@ ws.subscribe((newWs) => { if (newWs.status === WebsocketConnectionState.CONNECTED) { - console.log( - "Connected to websocket server, room id:", - $room.id, - "reconnecting", - ); + console.log("Connected to websocket server, room id:", $room.id, "reconnecting"); } }); @@ -33,35 +29,29 @@ as="font" type="font/woff2" crossorigin="anonymous" - href="/fonts/InstrumentSans-VariableFont_wdth,wght.woff2" - /> + href="/fonts/InstrumentSans-VariableFont_wdth,wght.woff2" /> {#if process.env.NODE_ENV !== "production"} + {/if} - + src="https://cdn.jsdelivr.net/npm/web-streams-polyfill@2.0.2/dist/ponyfill.min.js"> +
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index bf2a8bc..36394cc 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,6 @@