From f931505b587ffe59560cef172974cda6e293d277 Mon Sep 17 00:00:00 2001 From: Giulio De Pasquale Date: Mon, 21 Dec 2020 14:31:48 +0000 Subject: [PATCH] total balance displayed in wallet card. some work towards cryptocoin icons --- bfxbot/bfxwrapper.py | 57 +++++-------- bfxbot/currency.py | 41 +++++++++- bfxbot/utils.py | 4 +- websrc/components/Cards.tsx | 70 +++++++++++----- websrc/types.ts | 4 +- websrc/utils.ts | 31 ++++++- websrc/yarn.lock | 157 +++++++++++------------------------- 7 files changed, 189 insertions(+), 175 deletions(-) diff --git a/bfxbot/bfxwrapper.py b/bfxbot/bfxwrapper.py index 9ebd4ce..153e31d 100644 --- a/bfxbot/bfxwrapper.py +++ b/bfxbot/bfxwrapper.py @@ -1,43 +1,9 @@ -from enum import Enum from typing import List from bfxapi.rest.bfx_rest import BfxRest from retrying_async import retry -from bfxbot.currency import Symbol - - -class BalanceKind(Enum): - EXCHANGE = "exchange", - MARGIN = "margin" - - @staticmethod - def from_str(string: str): - string = string.lower() - - if "margin" in string: - return BalanceKind.MARGIN - if "exchange" in string: - return BalanceKind.EXCHANGE - - return None - - -class Balance: - def __init__(self, currency: str, amount: int, kind: BalanceKind): - self.currency: str = currency - self.amount: int = amount - self.kind: BalanceKind = kind - - -class Direction(Enum): - UP = 1, - DOWN = -1 - - -class OrderType(Enum): - EXCHANGE = "EXCHANGE", - MARGIN = "MARGIN" +from bfxbot.currency import Symbol, Balance, BalanceKind, OrderType, Direction class BfxWrapper(BfxRest): @@ -74,13 +40,26 @@ class BfxWrapper(BfxRest): return await super().get_trades(symbol, start, end) @retry() - async def post(self, endpoint: str, data: dict = {}, params=""): + async def post(self, endpoint: str, data=None, params=""): + if data is None: + data = {} return await super().post(endpoint, data, params) ################################ # NEW METHODS ################################ + # Calculate the average execution price for Trading or rate for Margin funding. + async def calculate_execution_price(self, pair: str, amount: float): + api_path = "/calc/trade/avg" + + res = await self.post(api_path, { + 'symbol': pair, + 'amount': amount + }) + + return res[0] + async def get_current_prices(self, symbol) -> (float, float, float): if isinstance(symbol, Symbol): symbol = str(symbol) @@ -107,7 +86,7 @@ class BfxWrapper(BfxRest): return balance - async def get_balances(self) -> List[Balance]: + async def get_balances(self, quote: str = "USD") -> List[Balance]: balances = [] wallets = await self.get_wallets() @@ -117,7 +96,9 @@ class BfxWrapper(BfxRest): if not kind: continue - balances.append(Balance(w.currency, w.balance, kind)) + execution_price = await self.calculate_execution_price(f"t{w.currency}{quote}", w.balance) + quote_equivalent = execution_price * w.balance + balances.append(Balance(w.currency, w.balance, kind, quote, quote_equivalent)) return balances diff --git a/bfxbot/currency.py b/bfxbot/currency.py index 26deadb..0072171 100644 --- a/bfxbot/currency.py +++ b/bfxbot/currency.py @@ -2,6 +2,41 @@ import re from enum import Enum +class BalanceKind(Enum): + EXCHANGE = "exchange", + MARGIN = "margin" + + @staticmethod + def from_str(string: str): + string = string.lower() + + if "margin" in string: + return BalanceKind.MARGIN + if "exchange" in string: + return BalanceKind.EXCHANGE + + return None + + +class Balance: + def __init__(self, currency: str, amount: int, kind: BalanceKind, quote: str, quote_equivalent: float): + self.currency: str = currency + self.amount: int = amount + self.kind: BalanceKind = kind + self.quote: str = quote + self.quote_equivalent: float = quote_equivalent + + +class Direction(Enum): + UP = 1, + DOWN = -1 + + +class OrderType(Enum): + EXCHANGE = "EXCHANGE", + MARGIN = "MARGIN" + + class Symbol(Enum): XMR = "XMR" BTC = "BTC" @@ -14,8 +49,8 @@ class Symbol(Enum): return self.__repr__() @staticmethod - def from_str(str: str): - match = re.compile("t([a-zA-Z]+)USD").match(str) + def from_str(string: str): + match = re.compile("t([a-zA-Z]+)USD").match(string) if not match: raise ValueError @@ -29,4 +64,4 @@ class Symbol(Enum): elif currency in ("eth"): return Symbol.ETH else: - return NotImplementedError \ No newline at end of file + return NotImplementedError diff --git a/bfxbot/utils.py b/bfxbot/utils.py index 2aebd83..b055636 100644 --- a/bfxbot/utils.py +++ b/bfxbot/utils.py @@ -29,7 +29,9 @@ def balance_to_json(balance: Balance): return { 'currency': balance.currency, 'amount': balance.amount, - 'kind': balance.kind.value + 'kind': balance.kind.value, + 'quote': balance.quote, + 'quote_equivalent': balance.quote_equivalent } diff --git a/websrc/components/Cards.tsx b/websrc/components/Cards.tsx index cc93a25..17b2152 100644 --- a/websrc/components/Cards.tsx +++ b/websrc/components/Cards.tsx @@ -1,15 +1,14 @@ import React, {Component} from 'react'; import {Balance, EventName, FirstConnectMessage, NewTickMessage} from "../types"; import {socket} from "../index"; +import {SymbolAccessories} from "../utils"; export type CoinBalanceProps = { name: string, amount: number, - short: string, percentage?: number, quote_equivalent: number, quote_symbol: string, - icon: JSX.Element, } class CoinBalance extends Component { @@ -19,10 +18,19 @@ class CoinBalance extends Component { } render() { + // do not print equivalent if this element is the quote itself + const quoteBlock = this.props.name != this.props.quote_symbol ? this.props.quote_symbol.concat(" ").concat(this.props.quote_equivalent.toLocaleString()) : null + + // const accessory = SymbolAccessories.filter((accessory) => { + // return accessory.name == this.props.name + // }) + // + // const icon = accessory.length > 0 ? accessory.pop().icon : null + return (
- {this.props.icon} + {/*{icon}*/}
{this.props.name} @@ -39,41 +47,63 @@ class CoinBalance extends Component {
- {this.props.amount.toFixed(5)} {this.props.short} + {this.props.amount.toFixed(5)} {this.props.name}
-
-
- {this.props.quote_symbol} {this.props.quote_equivalent} +
+
+
+ {quoteBlock} +
) } + } export type WalletCardProps = { quote: string, } -export class WalletCard extends Component<{}, { balances: Array }> { +export class WalletCard extends Component + <{}, { balances: Array }> { constructor(props) { super(props); } - state = { - balances: [] + state = + { + balances: [] + } + + totalQuoteBalance() { + let total = 0 + + this.state.balances.forEach((balance: Balance) => { + if (balance.currency == balance.quote) { + total += balance.amount + } else { + total += balance.quote_equivalent + } + }) + + return total } renderCoinBalances() { return ( this.state.balances.map((balance: Balance) => { + const percentage_amount = balance.quote == balance.currency ? balance.amount : balance.quote_equivalent; + return ( - + ) }) ) @@ -97,14 +127,14 @@ export class WalletCard extends Component<{}, { balances: Array }> { return (
-
+ className="flex-grow flex bg-white flex-col border-t border-b sm:rounded-lg sm:border shadow overflow-hidden"> +

Your Wallets

diff --git a/websrc/types.ts b/websrc/types.ts index 7af6041..5bb9b8f 100644 --- a/websrc/types.ts +++ b/websrc/types.ts @@ -8,7 +8,9 @@ export type Balance = { currency: string, amount: number, // exchange / margin - kind: string + kind: string, + quote: string, + quote_equivalent: number, } export type CurrencyPair = { diff --git a/websrc/utils.ts b/websrc/utils.ts index 3cb4ec3..99fc46d 100644 --- a/websrc/utils.ts +++ b/websrc/utils.ts @@ -1,4 +1,6 @@ import {CurrencyPair} from "./types"; +// import * as Icon from 'react-cryptocoins' +import {Btc, Eth, Xmr} from 'react-cryptocoins'; export function symbolToPair(symbol: string): CurrencyPair { const symbol_regex = "t(?[a-zA-Z]{3})(?[a-zA-Z]{3})" @@ -9,4 +11,31 @@ export function symbolToPair(symbol: string): CurrencyPair { base: match.groups.base, quote: match.groups.quote } -} \ No newline at end of file +} + +export type SymbolAccesory = { + name: string, + icon: React.Component, + color: string +} + +export const SymbolAccessories: Array = [ + { + name: "BTC", + icon: Btc, + color: "yellow" + }, + { + name: "XMR", + icon: Xmr, + color: "yellow" + }, + { + name: "ETH", + icon: Eth, + color: "yellow" + } +]; + + + diff --git a/websrc/yarn.lock b/websrc/yarn.lock index 8ec3d14..d3eab27 100644 --- a/websrc/yarn.lock +++ b/websrc/yarn.lock @@ -1092,6 +1092,11 @@ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.11.tgz#2521cc86f69d15c5b90664e4829d84566052c1cf" integrity sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw== +"@types/component-emitter@^1.2.10": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" + integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== + "@types/d3@^3": version "3.5.44" resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.44.tgz#28635f8bb9adf1cef5bbef2b06778174a9d34383" @@ -1232,11 +1237,6 @@ affine-hull@^1.0.0: dependencies: robust-orientation "^1.1.3" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - ajv@^6.12.3: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1389,11 +1389,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -1628,11 +1623,6 @@ bl@^2.2.1: readable-stream "^2.3.5" safe-buffer "^5.1.1" -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.4.0: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" @@ -2269,21 +2259,11 @@ component-bind@1.0.0: resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - compute-dims@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/compute-dims/-/compute-dims-1.1.0.tgz#6d5b712929b6c531af3b4d580ed5adacbbd77e0c" @@ -2819,13 +2799,6 @@ deasync@^0.1.14: bindings "^1.5.0" node-addon-api "^1.7.1" -debug@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" - integrity sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w= - dependencies: - ms "0.7.2" - debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2840,12 +2813,12 @@ debug@^4.1.0: dependencies: ms "2.1.2" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - ms "2.0.0" + ms "^2.1.1" decode-uri-component@^0.2.0: version "0.2.0" @@ -3143,33 +3116,28 @@ end-of-stream@^1.0.0: dependencies: once "^1.4.0" -engine.io-client@~3.4.0: - version "3.4.4" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.4.tgz#77d8003f502b0782dd792b073a4d2cf7ca5ab967" - integrity sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ== +engine.io-client@~4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-4.0.5.tgz#e12b05a11a7a3cccec6d69f9af8435146e3d507e" + integrity sha512-1lkn0QdekHQPMTcxUh8LqIuxQHNtKV5GvqkQzmZ1rYKAvB6puMm13U7K1ps3OQZ4joE46asQiAKrcdL9weNEVw== dependencies: + base64-arraybuffer "0.1.4" component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.2.0" + debug "~4.1.0" + engine.io-parser "~4.0.1" has-cors "1.1.0" - indexof "0.0.1" parseqs "0.0.6" parseuri "0.0.6" - ws "~6.1.0" + ws "~7.2.1" xmlhttprequest-ssl "~1.5.4" yeast "0.1.2" -engine.io-parser@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" - integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== +engine.io-parser@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" + integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" base64-arraybuffer "0.1.4" - blob "0.0.5" - has-binary2 "~1.0.2" entities@^1.1.1, entities@^1.1.2: version "1.1.2" @@ -4312,13 +4280,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" @@ -4596,11 +4557,6 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4953,11 +4909,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - isarray@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -5070,11 +5021,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -5485,11 +5431,6 @@ mouse-wheel@^1.2.0: signum "^1.0.0" to-px "^1.0.1" -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - integrity sha1-riXPJRKziFodldfwN4aNhDESR2U= - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5505,6 +5446,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mumath@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf" @@ -7666,32 +7612,28 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socket.io-client@~2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.1.tgz#91a4038ef4d03c19967bb3c646fec6e0eaa78cff" - integrity sha512-YXmXn3pA8abPOY//JtYxou95Ihvzmg8U6kQyolArkIyLd0pgVhrfor/iMsox8cn07WCOOvvuJ6XKegzIucPutQ== +socket.io-client@~3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-3.0.4.tgz#c0203419a9f71e1360ef92a31301e80260e94bb9" + integrity sha512-qMvBuS+W9JIN2mkfAWDCxuIt+jpIKDf8C0604zEqx1JrPaPSS6cN0F3B2GYWC83TqBeVJXW66GFxWV3KD88n0Q== dependencies: + "@types/component-emitter" "^1.2.10" backo2 "1.0.2" component-bind "1.0.0" component-emitter "~1.3.0" - debug "~3.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - indexof "0.0.1" - parseqs "0.0.6" + debug "~4.1.0" + engine.io-client "~4.0.0" parseuri "0.0.6" - socket.io-parser "~3.3.0" - to-array "0.1.4" + socket.io-parser "~4.0.1" -socket.io-parser@~2, socket.io-parser@~3.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.2.tgz#ae64f90cd8d0b5316556280d98cb744f7422cd94" - integrity sha1-rmT5DNjQtTFlVigNmMt0T3QizZQ= +socket.io-parser@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.2.tgz#3d021a9c86671bb079e7c6c806db6a1d9b1bc780" + integrity sha512-Bs3IYHDivwf+bAAuW/8xwJgIiBNtlvnjYRc4PbXgniLmcP1BrakBoq/QhO24rgtgW7VZ7uAaswRGxutUnlAK7g== dependencies: - component-emitter "1.2.1" - debug "2.3.3" - isarray "0.0.1" - json3 "3.3.2" + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.1.0" source-map-resolve@^0.5.0: version "0.5.3" @@ -8160,11 +8102,6 @@ to-array-buffer@^3.0.0: is-blob "^2.0.1" string-to-arraybuffer "^1.0.0" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -8803,12 +8740,10 @@ ws@^6.1.2: dependencies: async-limiter "~1.0.0" -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== - dependencies: - async-limiter "~1.0.0" +ws@~7.2.1: + version "7.2.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" + integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== xml-name-validator@^3.0.0: version "3.0.0"