Use native WebSocket API (#3248)

This commit is contained in:
Victor Bayas
2024-02-27 16:34:06 -05:00
committed by GitHub
parent 5e64c96497
commit 8dd6dd4e7f
9 changed files with 59 additions and 174 deletions

View File

@@ -28,8 +28,7 @@
"recharts": "^2.10.3",
"styled-components": "^5.3.11",
"superagent": "^8.0.8",
"tinycolor2": "^1.6.0",
"websocket": "^1.0.31"
"tinycolor2": "^1.6.0"
},
"scripts": {
"start": "PORT=5005 react-scripts start",
@@ -76,7 +75,6 @@
"@types/recharts": "^1.8.29",
"@types/superagent": "^4.1.24",
"@types/webpack-env": "^1.18.2",
"@types/websocket": "^1.0.10",
"babel-plugin-istanbul": "^6.1.1",
"customize-cra": "^1.0.0",
"minio": "^7.1.3",
@@ -103,7 +101,6 @@
"react-scripts/**/json5": "^2.2.2",
"react-scripts/**/debug": "^3.1.0",
"recharts/**/d3-color": "^3.1.0",
"websocket/debug": "^3.1.0",
"fast-xml-parser": "^4.3.4",
"semver": "^7.5.2",
"testcafe/**/tough-cookie": "^4.1.3",

View File

@@ -14,11 +14,6 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { Fragment, useEffect, useState } from "react";
import {
ICloseEvent,
IMessageEvent,
w3cwebsocket as W3CWebSocket,
} from "websocket";
import { useSelector } from "react-redux";
import { useNavigate } from "react-router-dom";
import { Box, Button, Grid, HelpBox, InfoIcon, Loader, PageLayout } from "mds";
@@ -139,28 +134,25 @@ const HealthInfo = () => {
const baseLocation = new URL(document.baseURI);
const baseUrl = baseLocation.pathname;
const c = new W3CWebSocket(
const socket = new WebSocket(
`${wsProt}://${url.hostname}:${port}${baseUrl}ws/health-info?deadline=1h`,
);
let interval: any | null = null;
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
console.log("WebSocket Client Connected");
c.send("ok");
socket.send("ok");
interval = setInterval(() => {
c.send("ok");
socket.send("ok");
}, 10 * 1000);
setMessage(
"Health Report started. Please do not refresh page during diagnosis.",
);
dispatch(setServerDiagStat(DiagStatInProgress));
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
let m: ReportMessage = JSON.parse(message.data.toString());
if (m.serverHealthInfo) {
m.serverHealthInfo.timestamp = new Date(
m.serverHealthInfo.timestamp.toString(),
);
dispatch(healthInfoMessageReceived(m.serverHealthInfo));
}
if (m.encoded !== "") {
@@ -170,13 +162,13 @@ const HealthInfo = () => {
setSubnetResponse(m.subnetResponse);
}
};
c.onerror = (error: Error) => {
console.log("error closing websocket:", error.message);
c.close(1000);
socket.onerror = (error) => {
console.error("error closing websocket:", error);
socket.close(1000);
clearInterval(interval);
dispatch(setServerDiagStat(DiagStatError));
};
c.onclose = (event: ICloseEvent) => {
socket.onclose = (event: CloseEvent) => {
clearInterval(interval);
if (
event.code === WSCloseInternalServerErr ||

View File

@@ -19,7 +19,7 @@ export const DiagStatSuccess = "success";
export const DiagStatInProgress = "inProgress";
export interface HealthInfoMessage {
timestamp: Date;
timestamp: string;
error: string;
perf: perfInfo;
minio: minioHealthInfo;

View File

@@ -15,7 +15,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { Fragment, useEffect, useState } from "react";
import { IMessageEvent, w3cwebsocket as W3CWebSocket } from "websocket";
import { Box, Button, Grid, PageLayout, Select, Table, TableBody } from "mds";
import { useSelector } from "react-redux";
import { ErrorResponseHandler } from "../../../../common/types";
@@ -33,7 +32,7 @@ import LogLine from "./LogLine";
import PageHeaderWrapper from "../../Common/PageHeaderWrapper/PageHeaderWrapper";
import HelpMenu from "../../HelpMenu";
var c: any = null;
var socket: any = null;
const ErrorLogs = () => {
const dispatch = useAppDispatch();
@@ -61,7 +60,7 @@ const ErrorLogs = () => {
const baseLocation = new URL(document.baseURI);
const baseUrl = baseLocation.pathname;
c = new W3CWebSocket(
socket = new WebSocket(
`${wsProt}://${
url.hostname
}:${port}${baseUrl}ws/console/?logType=${logType}&node=${
@@ -69,16 +68,16 @@ const ErrorLogs = () => {
}`,
);
let interval: any | null = null;
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
console.log("WebSocket Client Connected");
dispatch(setLogsStarted(true));
c.send("ok");
socket.send("ok");
interval = setInterval(() => {
c.send("ok");
socket.send("ok");
}, 10 * 1000);
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
// console.log(message.data.toString())
// FORMAT: 00:35:17 UTC 01/01/2021
@@ -104,13 +103,13 @@ const ErrorLogs = () => {
dispatch(logMessageReceived(m));
}
};
c.onclose = () => {
socket.onclose = () => {
clearInterval(interval);
console.log("connection closed by server");
dispatch(setLogsStarted(false));
};
return () => {
c.close(1000);
socket.close(1000);
clearInterval(interval);
console.log("closing websockets");
dispatch(setLogsStarted(false));
@@ -119,8 +118,8 @@ const ErrorLogs = () => {
};
const stopLogs = () => {
if (c !== null && c !== undefined) {
c.close(1000);
if (socket !== null && socket !== undefined) {
socket.close(1000);
dispatch(setLogsStarted(false));
}
};

View File

@@ -16,7 +16,6 @@
import React, { Fragment, useEffect, useState } from "react";
import { useSelector } from "react-redux";
import { IMessageEvent, w3cwebsocket as W3CWebSocket } from "websocket";
import { useNavigate } from "react-router-dom";
import {
Box,
@@ -77,7 +76,7 @@ const Speedtest = () => {
const baseUrl = baseLocation.pathname;
const wsProt = wsProtocol(url.protocol);
const c = new W3CWebSocket(
const socket = new WebSocket(
`${wsProt}://${url.hostname}:${port}${baseUrl}ws/speedtest?&size=${size}${sizeUnit}&duration=${duration}s`,
);
@@ -95,15 +94,15 @@ const Speedtest = () => {
setTotalSeconds(totalSeconds);
let interval: any | null = null;
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
console.log("WebSocket Client Connected");
c.send("ok");
socket.send("ok");
interval = setInterval(() => {
c.send("ok");
socket.send("ok");
}, 10 * 1000);
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
const data: SpeedTestResponse = JSON.parse(message.data.toString());
setCurrStatus((prevStatus) => {
@@ -119,7 +118,7 @@ const Speedtest = () => {
const currTime = DateTime.now().toUnixInteger() / 1000;
setCurrentValue(currTime);
};
c.onclose = () => {
socket.onclose = () => {
clearInterval(interval);
console.log("connection closed by server");
// reset start status
@@ -127,7 +126,7 @@ const Speedtest = () => {
};
return () => {
// close websocket on useEffect cleanup
c.close(1000);
socket.close(1000);
clearInterval(interval);
console.log("closing websockets");
};

View File

@@ -15,7 +15,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { Fragment, useEffect, useState } from "react";
import { IMessageEvent, w3cwebsocket as W3CWebSocket } from "websocket";
import { Button, PageLayout, FormLayout, Box, Checkbox, InputLabel } from "mds";
import { wsProtocol } from "../../../utils/wsUtils";
import { useNavigate } from "react-router-dom";
@@ -26,7 +25,7 @@ import RegisterCluster from "./RegisterCluster";
import PageHeaderWrapper from "../Common/PageHeaderWrapper/PageHeaderWrapper";
import HelpMenu from "../HelpMenu";
var c: any = null;
var socket: any = null;
const Profile = () => {
const navigate = useNavigate();
@@ -70,16 +69,16 @@ const Profile = () => {
const baseUrl = baseLocation.pathname;
const wsProt = wsProtocol(url.protocol);
c = new W3CWebSocket(
socket = new WebSocket(
`${wsProt}://${url.hostname}:${port}${baseUrl}ws/profile?types=${typeString}`,
);
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
setProfilingStarted(true);
c.send("ok");
socket.send("ok");
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
// process received message
let response = new Blob([message.data], { type: "application/zip" });
let filename = "profile.zip";
@@ -91,12 +90,12 @@ const Profile = () => {
link.click();
document.body.removeChild(link);
};
c.onclose = () => {
socket.onclose = () => {
console.log("connection closed by server");
setProfilingStarted(false);
};
return () => {
c.close(1000);
socket.close(1000);
console.log("closing websockets");
setProfilingStarted(false);
};
@@ -104,7 +103,7 @@ const Profile = () => {
};
const stopProfiling = () => {
c.close(1000);
socket.close(1000);
setProfilingStarted(false);
};

View File

@@ -17,7 +17,6 @@
import React, { Fragment, useEffect, useState } from "react";
import { DateTime } from "luxon";
import { useSelector } from "react-redux";
import { IMessageEvent, w3cwebsocket as W3CWebSocket } from "websocket";
import {
Box,
breakPoints,
@@ -43,7 +42,7 @@ import TooltipWrapper from "../Common/TooltipWrapper/TooltipWrapper";
import PageHeaderWrapper from "../Common/PageHeaderWrapper/PageHeaderWrapper";
import HelpMenu from "../HelpMenu";
var c: any = null;
var socket: any = null;
const Trace = () => {
const dispatch = useAppDispatch();
@@ -85,7 +84,7 @@ const Trace = () => {
const baseUrl = baseLocation.pathname;
const wsProt = wsProtocol(url.protocol);
c = new W3CWebSocket(
socket = new WebSocket(
`${wsProt}://${
url.hostname
}:${port}${baseUrl}ws/trace?calls=${calls}&threshold=${threshold}&onlyErrors=${
@@ -94,29 +93,29 @@ const Trace = () => {
);
let interval: any | null = null;
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
console.log("WebSocket Client Connected");
dispatch(setTraceStarted(true));
c.send("ok");
socket.send("ok");
interval = setInterval(() => {
c.send("ok");
socket.send("ok");
}, 10 * 1000);
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
let m: TraceMessage = JSON.parse(message.data.toString());
m.ptime = DateTime.fromISO(m.time).toJSDate();
m.key = Math.random();
dispatch(traceMessageReceived(m));
};
c.onclose = () => {
socket.onclose = () => {
clearInterval(interval);
console.log("connection closed by server");
dispatch(setTraceStarted(false));
};
return () => {
c.close(1000);
socket.close(1000);
clearInterval(interval);
console.log("closing websockets");
setTraceStarted(false);
@@ -125,7 +124,7 @@ const Trace = () => {
};
const stopTrace = () => {
c.close(1000);
socket.close(1000);
dispatch(setTraceStarted(false));
};

View File

@@ -15,7 +15,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { useEffect, useState, Fragment } from "react";
import { IMessageEvent, w3cwebsocket as W3CWebSocket } from "websocket";
import { useSelector } from "react-redux";
import {
Box,
@@ -79,26 +78,26 @@ const Watch = () => {
const baseUrl = baseLocation.pathname;
const wsProt = wsProtocol(url.protocol);
const c = new W3CWebSocket(
const socket = new WebSocket(
`${wsProt}://${url.hostname}:${port}${baseUrl}ws/watch/${bucketName}?prefix=${prefix}&suffix=${suffix}`,
);
let interval: any | null = null;
if (c !== null) {
c.onopen = () => {
if (socket !== null) {
socket.onopen = () => {
console.log("WebSocket Client Connected");
c.send("ok");
socket.send("ok");
interval = setInterval(() => {
c.send("ok");
socket.send("ok");
}, 10 * 1000);
};
c.onmessage = (message: IMessageEvent) => {
socket.onmessage = (message: MessageEvent) => {
let m: EventInfo = JSON.parse(message.data.toString());
m.Time = new Date(m.Time.toString());
m.key = Math.random();
dispatch(watchMessageReceived(m));
};
c.onclose = () => {
socket.onclose = () => {
clearInterval(interval);
console.log("connection closed by server");
// reset start status
@@ -106,7 +105,7 @@ const Watch = () => {
};
return () => {
// close websocket on useEffect cleanup
c.close(1000);
socket.close(1000);
clearInterval(interval);
console.log("closing websockets");
};

View File

@@ -2571,13 +2571,6 @@
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.4.tgz#62879b0a9c653f9b1172d403b882f2045ecce032"
integrity sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==
"@types/websocket@^1.0.10":
version "1.0.10"
resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.10.tgz#804b1a02780da522f5742bc184a6d16a2eb78c7c"
integrity sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==
dependencies:
"@types/node" "*"
"@types/ws@^8.5.5":
version "8.5.10"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787"
@@ -3626,13 +3619,6 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
bufferutil@^4.0.1:
version "4.0.8"
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea"
integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==
dependencies:
node-gyp-build "^4.3.0"
builtin-modules@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
@@ -4512,14 +4498,6 @@ d3-timer@^3.0.1:
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
dependencies:
es5-ext "^0.10.50"
type "^1.0.1"
damerau-levenshtein@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
@@ -4534,7 +4512,7 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^3.1.0, debug@^3.2.7, debug@^4.3.2:
debug@2.6.9, debug@^2.6.0, debug@^3.1.0, debug@^3.2.7, debug@^4.3.2:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
@@ -5153,37 +5131,11 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es5-ext@^0.10.35, es5-ext@^0.10.50:
version "0.10.62"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
dependencies:
es6-iterator "^2.0.3"
es6-symbol "^3.1.3"
next-tick "^1.1.0"
es6-error@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
es6-iterator@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
dependencies:
d "1"
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
dependencies:
d "^1.0.1"
ext "^1.1.2"
escalade@^3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
@@ -5623,13 +5575,6 @@ express@^4.17.3:
utils-merge "1.0.1"
vary "~1.1.2"
ext@^1.1.2:
version "1.7.0"
resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
dependencies:
type "^2.7.2"
extend@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -8788,11 +8733,6 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
next-tick@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -8813,11 +8753,6 @@ node-forge@^1, node-forge@^1.3.0:
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
node-gyp-build@^4.3.0:
version "4.8.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -12279,16 +12214,6 @@ type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
type@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
type@^2.7.2:
version "2.7.2"
resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
typed-array-buffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5"
@@ -12574,13 +12499,6 @@ use-sync-external-store@^1.0.0:
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
utf-8-validate@^5.0.2:
version "5.0.10"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
dependencies:
node-gyp-build "^4.3.0"
utf8-byte-length@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
@@ -12931,18 +12849,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
websocket@^1.0.31:
version "1.0.34"
resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
dependencies:
bufferutil "^4.0.1"
debug "^2.2.0"
es5-ext "^0.10.50"
typedarray-to-buffer "^3.1.5"
utf-8-validate "^5.0.2"
yaeti "^0.0.6"
whatwg-encoding@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
@@ -13342,11 +13248,6 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
yaeti@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"