From bcc3019e4bc25c3f311682d4fa8da324e37df7f2 Mon Sep 17 00:00:00 2001 From: Camille Moussu Date: Mon, 12 Jan 2026 09:25:23 +0100 Subject: [PATCH] Revert "[#451] added websocket connexion" This reverts commit 47525a5e21eea4109cb3edc515245ce4abde030b. --- package-lock.json | 119 ++++++++---------- public/.env.example.js | 1 - src/App.tsx | 2 - src/websocket/WebSocketGate.tsx | 67 ---------- src/websocket/api/fetchWebSocketTicket.ts | 12 -- src/websocket/api/types.ts | 7 -- src/websocket/createWebSocketConnection.ts | 63 ---------- src/websocket/protocols.ts | 13 -- .../websocketAPI/registerToCalendars.ts | 17 --- .../websocketAPI/unregisterToCalendars.ts | 18 --- 10 files changed, 49 insertions(+), 270 deletions(-) delete mode 100644 src/websocket/WebSocketGate.tsx delete mode 100644 src/websocket/api/fetchWebSocketTicket.ts delete mode 100644 src/websocket/api/types.ts delete mode 100644 src/websocket/createWebSocketConnection.ts delete mode 100644 src/websocket/protocols.ts delete mode 100644 src/websocket/websocketAPI/registerToCalendars.ts delete mode 100644 src/websocket/websocketAPI/unregisterToCalendars.ts diff --git a/package-lock.json b/package-lock.json index 4bacb70..4380626 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,6 +79,38 @@ "node": "24.x" } }, + "../twake-ui/packages/twake-mui": { + "name": "@linagora/twake-mui", + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.3.26", + "@types/react-dom": "^18.3.7", + "typescript": "^4.9.5" + }, + "engines": { + "node": "24.x" + }, + "peerDependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/material": "^7.1.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": false + }, + "react-dom": { + "optional": false + } + } + }, "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", @@ -137,7 +169,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2070,7 +2101,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2094,7 +2124,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2197,7 +2226,6 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2241,7 +2269,6 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2514,7 +2541,6 @@ "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.20.tgz", "integrity": "sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==", "license": "MIT", - "peer": true, "dependencies": { "preact": "~10.12.1" } @@ -3138,24 +3164,8 @@ } }, "node_modules/@linagora/twake-mui": { - "version": "1.1.1", - "resolved": "https://npm.pkg.github.com/download/@linagora/twake-mui/1.1.1/16fcea760c76c020860b19640c010ddc4c1ba9f3", - "integrity": "sha512-3MCOnhiwUKUI4WH/Mrx6R9cyyCJZoIKbc6TUoTQew8s4PprhvXI+xElOOVgBsCdCkZ9DOpeOOrcvMzDbd9JYNg==", - "license": "MIT", - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "engines": { - "node": "24.x" - }, - "peerDependencies": { - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.1", - "@mui/material": "^7.1.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } + "resolved": "../twake-ui/packages/twake-mui", + "link": true }, "node_modules/@module-federation/error-codes": { "version": "0.21.6", @@ -3257,7 +3267,6 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.6.tgz", "integrity": "sha512-R4DaYF3dgCQCUAkr4wW1w26GHXcf5rCmBRHVBuuvJvaGLmZdD8EjatP80Nz5JCw0KxORAzwftnHzXVnjR8HnFw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/core-downloads-tracker": "^7.3.6", @@ -3368,7 +3377,6 @@ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.6.tgz", "integrity": "sha512-8fehAazkHNP1imMrdD2m2hbA9sl7Ur6jfuNweh5o4l9YPty4iaZzRXqYvBCWQNwFaSHmMEj2KPbyXGp7Bt73Rg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/private-theming": "^7.3.6", @@ -3713,9 +3721,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", - "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.1.tgz", + "integrity": "sha512-vDbaOzF7yT2Qs4vO6XV1MHcJv+3dgR1sT+l3B8xxOVhUC336prMvqrvsLL/9Dnw2xr6Qhz4J0dmS0llNAbnUmQ==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -3727,7 +3735,6 @@ "integrity": "sha512-LvoOF53PL6zXgdzEhgnnP51S4FseDFH1bHrobK4EK6zZX/tN8qgf5tdlmN7h4OkMv/Qs1oUfvj0QcLWSstnnvA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rspack/core": "1.6.8", "@rspack/lite-tapable": "~1.1.0", @@ -3955,7 +3962,6 @@ "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@module-federation/runtime-tools": "0.21.6", "@rspack/binding": "1.6.8", @@ -4215,7 +4221,6 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -4300,7 +4305,6 @@ "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -4311,7 +4315,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4607,7 +4610,6 @@ "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -4629,7 +4631,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" @@ -4641,7 +4642,6 @@ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -4698,7 +4698,6 @@ "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.51.0", @@ -4728,7 +4727,6 @@ "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.51.0", "@typescript-eslint/types": "8.51.0", @@ -5235,7 +5233,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5995,7 +5992,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6707,7 +6703,6 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -6723,8 +6718,7 @@ "version": "1.11.19", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", @@ -7323,7 +7317,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -8678,7 +8671,6 @@ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.7.6" } @@ -9653,7 +9645,6 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -10417,7 +10408,6 @@ "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", @@ -10876,7 +10866,6 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -11313,7 +11302,6 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -11323,7 +11311,6 @@ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.48.tgz", "integrity": "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==", "license": "MIT", - "peer": true, "dependencies": { "moment": "^2.29.4" }, @@ -11359,6 +11346,7 @@ } ], "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12295,7 +12283,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -12318,7 +12305,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -12338,7 +12324,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -12363,18 +12348,17 @@ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", - "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "version": "6.30.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.2.tgz", + "integrity": "sha512-H2Bm38Zu1bm8KUE5NVWRMzuIyAV8p/JrOaBJAwVmp37AXG72+CZJlEBw6pdn9i5TBgLMhNDgijS4ZlblpHyWTA==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2" + "@remix-run/router": "1.23.1" }, "engines": { "node": ">=14.0.0" @@ -12384,13 +12368,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", - "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "version": "6.30.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.2.tgz", + "integrity": "sha512-l2OwHn3UUnEVUqc6/1VMmR1cvZryZ3j3NzapC2eUXO1dB0sYp5mvwdjiXhpUbRb21eFow3qSxpP8Yv6oAU824Q==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2", - "react-router": "6.30.3" + "@remix-run/router": "1.23.1", + "react-router": "6.30.2" }, "engines": { "node": ">=14.0.0" @@ -12464,8 +12448,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-first-history": { "version": "5.2.0", @@ -13692,7 +13675,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13873,7 +13855,6 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -14090,7 +14071,6 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14899,7 +14879,6 @@ "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/public/.env.example.js b/public/.env.example.js index 405104b..0ce6d30 100644 --- a/public/.env.example.js +++ b/public/.env.example.js @@ -10,4 +10,3 @@ var MAIL_SPA_URL = "https://mail.example.com"; var VIDEO_CONFERENCE_BASE_URL = "https://meet.linagora.com"; var DEBUG = false; var LANG = "en"; -var WEBSOCKET_URL = "wss://calendar.example.com"; diff --git a/src/App.tsx b/src/App.tsx index ad8be03..4ba7509 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -26,7 +26,6 @@ import fr from "./locales/fr.json"; import ru from "./locales/ru.json"; import vi from "./locales/vi.json"; import I18n from "twake-i18n"; -import { WebSocketGate } from "./websocket/WebSocketGate"; const locale = { en, fr, ru, vi }; const dateLocales = { en: enGB, fr: frLocale, ru: ruLocale, vi: viLocale }; @@ -69,7 +68,6 @@ function App() { locales={dateLocales} > }> - } /> diff --git a/src/websocket/WebSocketGate.tsx b/src/websocket/WebSocketGate.tsx deleted file mode 100644 index d49c964..0000000 --- a/src/websocket/WebSocketGate.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useEffect, useRef } from "react"; -import { useAppSelector } from "../app/hooks"; -import { createWebSocketConnection } from "./createWebSocketConnection"; -import { registerToCalendars } from "./websocketAPI/registerToCalendars"; - -export function WebSocketGate() { - const socketRef = useRef(null); - - const isAuthenticated = useAppSelector((state) => - Boolean(state.user.userData && state.user.tokens) - ); - - const calendarList = useAppSelector((state) => state.calendars.list); - - // Manage WebSocket connection - useEffect(() => { - if (!isAuthenticated) { - if (socketRef.current) { - socketRef.current.close(); - socketRef.current = null; - } - return; - } - - const connect = async () => { - try { - const socket = await createWebSocketConnection(); - socketRef.current = socket; - } catch (error) { - console.error("Failed to create WebSocket connection:", error); - } - }; - - connect(); - - return () => { - if (socketRef.current) { - socketRef.current.close(); - socketRef.current = null; - } - }; - }, [isAuthenticated]); - - const hasRegisteredRef = useRef(false); - - // Register to calendars once - useEffect(() => { - if (!socketRef.current || socketRef.current.readyState !== WebSocket.OPEN) { - return; - } - - if (hasRegisteredRef.current) { - return; - } - - const calendarPaths = Object.values(calendarList).map( - (cal) => `/calendars/${cal.id}` - ); - - if (calendarPaths.length > 0) { - registerToCalendars(socketRef.current, calendarPaths); - hasRegisteredRef.current = true; - } - }, [calendarList]); - - return null; -} diff --git a/src/websocket/api/fetchWebSocketTicket.ts b/src/websocket/api/fetchWebSocketTicket.ts deleted file mode 100644 index 05c6505..0000000 --- a/src/websocket/api/fetchWebSocketTicket.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { api } from "../../utils/apiUtils"; -import { WebSocketTicket } from "./types"; - -export async function fetchWebSocketTicket(): Promise { - const response = await api.post("ws/ticket"); - - if (!response.ok) { - throw new Error("Failed to fetch WebSocket ticket"); - } - - return response.json(); -} diff --git a/src/websocket/api/types.ts b/src/websocket/api/types.ts deleted file mode 100644 index cf1da08..0000000 --- a/src/websocket/api/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface WebSocketTicket { - clientAddress: string; - value: string; - generatedOn: string; - validUntil: string; - username: string; -} diff --git a/src/websocket/createWebSocketConnection.ts b/src/websocket/createWebSocketConnection.ts deleted file mode 100644 index 1e9aa8b..0000000 --- a/src/websocket/createWebSocketConnection.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { fetchWebSocketTicket } from "./api/fetchWebSocketTicket"; -import { WS_INBOUND_EVENTS } from "./protocols"; - -export async function createWebSocketConnection(): Promise { - const wsBaseUrl = (window as any).WEBSOCKET_URL; - - if (!wsBaseUrl) { - throw new Error("WEBSOCKET_URL is not defined"); - } - - const ticket = await fetchWebSocketTicket(); - - const socket = new WebSocket( - `${wsBaseUrl}/ws?ticket=${encodeURIComponent(ticket.value)}` - ); - - await new Promise((resolve, reject) => { - const openHandler = () => { - console.log("WebSocket connection opened"); - socket.removeEventListener( - WS_INBOUND_EVENTS.CONNECTION_OPENED, - openHandler - ); - socket.removeEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler); - resolve(); - }; - - const errorHandler = (error: Event) => { - console.error("WebSocket connection failed:", error); - socket.removeEventListener( - WS_INBOUND_EVENTS.CONNECTION_OPENED, - openHandler - ); - socket.removeEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler); - reject(new Error("WebSocket connection failed")); - }; - - socket.addEventListener(WS_INBOUND_EVENTS.CONNECTION_OPENED, openHandler); - socket.addEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler); - }); - - socket.addEventListener(WS_INBOUND_EVENTS.MESSAGE, (event) => { - try { - const message = JSON.parse(event.data); - console.log("WebSocket message received:", message); - - // TODO: Handle different message types - } catch (error) { - console.error("Failed to parse WebSocket message:", error); - } - }); - - socket.addEventListener(WS_INBOUND_EVENTS.CONNECTION_CLOSED, (event) => { - console.log("WebSocket closed:", event.code, event.reason); - // TODO: Add reconnection logic - }); - - socket.addEventListener(WS_INBOUND_EVENTS.ERROR, (error) => { - console.error("WebSocket error:", error); - }); - - return socket; -} diff --git a/src/websocket/protocols.ts b/src/websocket/protocols.ts deleted file mode 100644 index 89eacff..0000000 --- a/src/websocket/protocols.ts +++ /dev/null @@ -1,13 +0,0 @@ -// WebSocket event listeners (browser events) -export const WS_INBOUND_EVENTS = { - CONNECTION_OPENED: "open", - MESSAGE: "message", - ERROR: "error", - CONNECTION_CLOSED: "close", -} as const; - -// WebSocket message types sent to server -export const WS_OUTBOUND_EVENTS = { - REGISTER_CLIENT: "register", - UNREGISTER_CLIENT: "unregister", -} as const; diff --git a/src/websocket/websocketAPI/registerToCalendars.ts b/src/websocket/websocketAPI/registerToCalendars.ts deleted file mode 100644 index 47665e1..0000000 --- a/src/websocket/websocketAPI/registerToCalendars.ts +++ /dev/null @@ -1,17 +0,0 @@ -export function registerToCalendars( - socket: WebSocket, - calendarURIList: string[] -): void { - if (socket.readyState !== WebSocket.OPEN) { - throw new Error("Cannot register: WebSocket is not open"); - } - []; - - socket.send( - JSON.stringify({ - register: calendarURIList, - }) - ); - - console.log("Registered to calendars", calendarURIList); -} diff --git a/src/websocket/websocketAPI/unregisterToCalendars.ts b/src/websocket/websocketAPI/unregisterToCalendars.ts deleted file mode 100644 index 4700a60..0000000 --- a/src/websocket/websocketAPI/unregisterToCalendars.ts +++ /dev/null @@ -1,18 +0,0 @@ -export function unregisterToCalendars( - socket: WebSocket, - calendarURIList: string[] -): void { - if (socket.readyState !== WebSocket.OPEN) { - throw new Error("Cannot unregister: WebSocket is not open"); - } - []; - console.log(calendarURIList); - - socket.send( - JSON.stringify({ - unregister: calendarURIList, - }) - ); - - console.log("Unregistered to calendars", calendarURIList); -}