diff --git a/package-lock.json b/package-lock.json
index 6744c5ff..d54a52f4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,7 +34,7 @@
"clsx": "^2.1.1",
"cmdk-sv": "^0.0.18",
"compression": "^1.7.4",
- "daisyui": "^5.0.4",
+ "daisyui": "^5.0.6",
"date-fns": "^3.6.0",
"date-fns-tz": "^3.1.3",
"date-picker-svelte": "^2.12.0",
@@ -4081,9 +4081,9 @@
"license": "BSD-3-Clause"
},
"node_modules/daisyui": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.4.tgz",
- "integrity": "sha512-9X3oX/k9hPBCslAECk8kYfvwgrz6Grs0lN7VI0/ZTM/hUfq1uFREHxCcBCCq0QROpN183N19B1hTNRWGipO2Eg==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.0.6.tgz",
+ "integrity": "sha512-/e/9Gw/2y9oawBJlWkJMSEhRXdmfOLvcPl+6q/x2rPEdIVOtebs1t3ex2vwySl9vCRs1GGNBKCiL+P60Ps/wUw==",
"dev": true,
"license": "MIT",
"funding": {
diff --git a/package.json b/package.json
index 144d4789..47f29a7f 100644
--- a/package.json
+++ b/package.json
@@ -34,7 +34,7 @@
"clsx": "^2.1.1",
"cmdk-sv": "^0.0.18",
"compression": "^1.7.4",
- "daisyui": "^5.0.4",
+ "daisyui": "^5.0.6",
"date-fns": "^3.6.0",
"date-fns-tz": "^3.1.3",
"date-picker-svelte": "^2.12.0",
diff --git a/src/lib/components/Table/OptionsFlowTable.svelte b/src/lib/components/Table/OptionsFlowTable.svelte
index acf1293a..45e2d1ba 100644
--- a/src/lib/components/Table/OptionsFlowTable.svelte
+++ b/src/lib/components/Table/OptionsFlowTable.svelte
@@ -596,7 +596,7 @@
class:opacity-30={index + 1 === rawData?.length &&
data?.user?.tier !== "Pro"}
>
-
+
{formatTime(displayedData[index]?.time)}
{
- const totalVolume = displayCallVolume + displayPutVolume;
- if (modeStatus === true) {
- try {
- newData = JSON?.parse(event.data) ?? [];
- if (newData?.length > 0) {
- newData?.forEach((item) => {
- item.dte = daysLeft(item?.date_expiration);
- });
-
- //calculateStats(newData);
- //console.log(previousVolume);
- if (
- newData?.length > rawData?.length &&
- previousVolume !== totalVolume
- ) {
- //console.log(previousVolume,totalVolume,);
- rawData = newData;
- shouldLoadWorker.set(true);
- //console.log('loading worker')
- //displayedData = rawData;
-
- if (!muted) {
- audio?.play();
- }
- }
- }
-
- /*
- if (previousCallVolume !== displayCallVolume && !muted && audio) {
- audio?.play();
- }
- */
- } catch (e) {
- console.error("Error processing WebSocket message:", e);
- }
- newData = [];
- previousVolume = totalVolume;
- }
- });
-
- socket.addEventListener("close", (event) => {
- console.log("WebSocket connection closed:", event.reason);
-
- // Explicitly nullify the socket and remove all event listeners
- if (socket) {
- socket.onmessage = null;
- socket.onopen = null;
- socket.onclose = null;
- socket.onerror = null;
- socket = null;
- }
- });
-
- socket.addEventListener("error", (error) => {
- console.error("WebSocket error:", error);
- // Handle WebSocket errors here
- });
- } catch (error) {
- console.error("WebSocket connection error:", error);
- // Handle connection errors here
- setTimeout(() => websocketRealtimeData(), 400);
+ // Cleanup previous connection
+ if (socket) {
+ socket.onmessage = null;
+ socket.onclose = null;
+ socket.onerror = null;
+ if (socket.readyState === WebSocket.OPEN) {
+ socket.close();
}
}
+
+ try {
+ socket = new WebSocket(`${data.wsURL}/options-flow-reader`);
+
+ socket.onopen = () => {
+ console.log("WebSocket connected");
+ reconnectAttempts = 0;
+ };
+
+ socket.onmessage = (event) => {
+ const totalVolume = displayCallVolume + displayPutVolume;
+ if (!modeStatus) return;
+
+ try {
+ const newData = JSON.parse(event.data) ?? [];
+
+ if (newData.length > 0) {
+ newData.forEach((item) => {
+ item.dte = daysLeft(item?.date_expiration);
+ });
+
+ if (
+ newData.length > rawData.length &&
+ previousVolume !== totalVolume
+ ) {
+ rawData = newData;
+ shouldLoadWorker.set(true);
+
+ if (!muted && audio) {
+ audio.play().catch((error) => {
+ console.log("Audio play failed:", error);
+ });
+ }
+ }
+ }
+ previousVolume = totalVolume;
+ } catch (e) {
+ console.error("Message processing error:", e);
+ }
+ };
+
+ socket.onclose = (event) => {
+ console.log(`WebSocket closed (${event.code}), reconnecting...`);
+ const delay = Math.min(5000, reconnectAttempts ** 2 * 500);
+ setTimeout(websocketRealtimeData, delay);
+ reconnectAttempts++;
+ };
+
+ socket.onerror = (error) => {
+ console.error("WebSocket error:", error);
+ socket.close();
+ };
+ } catch (error) {
+ console.error("WebSocket connection error:", error);
+ setTimeout(websocketRealtimeData, 1000);
+ }
}
function daysLeft(targetDate) {