| 
					
				 | 
			
			
				@@ -206,50 +206,55 @@ export const useWebsocketStore = defineStore("websocket", () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		pendingJobs.value = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const init = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			[WebSocket.CONNECTING, WebSocket.OPEN].includes( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				socket.value?.readyState 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			socket.value.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const onMessage = async message => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const data = JSON.parse(message.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const name = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		socket.value = new WebSocket(`${configStore.urls.ws}?rewrite=1`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (name === "jobCallback") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const callbackRef = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			const response = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		socket.value.addEventListener("message", async message => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			const data = JSON.parse(message.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			const name = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (response?.status === "success") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				jobCallbacks.value[callbackRef]?.resolve(response?.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else jobCallbacks.value[callbackRef]?.reject(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (name === "jobCallback") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				const callbackRef = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				const response = data.shift(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			delete jobCallbacks.value[callbackRef]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (response?.status === "success") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					jobCallbacks.value[callbackRef]?.resolve(response?.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else jobCallbacks.value[callbackRef]?.reject(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				delete jobCallbacks.value[callbackRef]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!subscriptions.value[name]) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Object.values(subscriptions.value[name].callbacks).map( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				async subscription => subscription(...data) // TODO: Error handling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (!subscriptions.value[name]) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const onClose = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ready.value = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Object.values(subscriptions.value[name].callbacks).map( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					async subscription => subscription(...data) // TODO: Error handling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// try to reconnect every 1000ms, if the user isn't banned 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!userAuthStore.banned) setTimeout(init, 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		socket.value.addEventListener("close", () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// TODO: fix this not going away after reconnect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const init = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			[WebSocket.CONNECTING, WebSocket.OPEN].includes( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				socket.value?.readyState 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.value.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.value.removeEventListener("message", onMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.value.removeEventListener("close", onClose); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			ready.value = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		socket.value = new WebSocket(`${configStore.urls.ws}?rewrite=1`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// try to reconnect every 1000ms, if the user isn't banned 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (!userAuthStore.banned) setTimeout(init, 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		socket.value.addEventListener("message", onMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		socket.value.addEventListener("close", onClose); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	init(); 
			 |