diff --git a/.env.example b/.env.example index e3b58f9e..86a515f6 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ MAIN_VITE_API_URL=API_URL MAIN_VITE_AUTH_URL=AUTH_URL +MAIN_VITE_WS_URL= RENDERER_VITE_REAL_DEBRID_REFERRAL_ID= RENDERER_VITE_TORBOX_REFERRAL_CODE= diff --git a/package.json b/package.json index d74f5a92..9e094db3 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "tar": "^7.4.3", "tough-cookie": "^5.1.1", "user-agents": "^1.1.387", + "ws": "^8.18.1", "yaml": "^2.6.1", "yup": "^1.5.0", "zod": "^3.24.1" @@ -97,6 +98,7 @@ "@types/react-dom": "^18.2.18", "@types/sound-play": "^1.1.3", "@types/user-agents": "^1.0.4", + "@types/ws": "^8.18.1", "@vitejs/plugin-react": "^4.2.1", "electron": "^31.7.7", "electron-builder": "^26.0.12", diff --git a/src/main/main.ts b/src/main/main.ts index 5869ab31..7419cc5c 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -9,6 +9,7 @@ import { levelKeys, db } from "./level"; import type { UserPreferences } from "@types"; import { TorBoxClient } from "./services/download/torbox"; import { CommonRedistManager } from "./services/common-redist-manager"; +import { WSManager } from "./services/ws-manager"; export const loadState = async () => { const userPreferences = await db.get( @@ -34,6 +35,7 @@ export const loadState = async () => { await HydraApi.setupApi().then(() => { uploadGamesBatch(); + WSManager.connect(); }); const downloads = await downloadsSublevel diff --git a/src/main/services/ws-manager.ts b/src/main/services/ws-manager.ts new file mode 100644 index 00000000..4a6eca2e --- /dev/null +++ b/src/main/services/ws-manager.ts @@ -0,0 +1,30 @@ +import { WebSocket } from "ws"; +import { HydraApi } from "./hydra-api"; + +export class WSManager { + private static ws: WebSocket; + + static async connect() { + const { token } = await HydraApi.post<{ token: string }>("/auth/ws"); + + console.log("WS TOKEN", token); + + this.ws = new WebSocket(import.meta.env.MAIN_VITE_WS_URL, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + this.ws.on("open", () => { + console.log("open"); + }); + + this.ws.on("error", (error) => { + console.error(error); + }); + + this.ws.on("message", (message) => { + console.log(message); + }); + } +} diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts index e6a7d8cd..69ba99fb 100644 --- a/src/main/vite-env.d.ts +++ b/src/main/vite-env.d.ts @@ -6,6 +6,7 @@ interface ImportMetaEnv { readonly MAIN_VITE_AUTH_URL: string; readonly MAIN_VITE_CHECKOUT_URL: string; readonly MAIN_VITE_EXTERNAL_RESOURCES_URL: string; + readonly MAIN_VITE_WS_URL: string; } interface ImportMeta { diff --git a/yarn.lock b/yarn.lock index 85039dc0..29c4f782 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3423,6 +3423,13 @@ resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg== +"@types/ws@^8.18.1": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + "@types/yauzl@^2.9.1": version "2.10.3" resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" @@ -9546,6 +9553,11 @@ ws@^8.18.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +ws@^8.18.1: + version "8.18.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + xml-name-validator@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673"