total balance displayed in wallet card. some work towards cryptocoin icons
This commit is contained in:
		
							parent
							
								
									d00dc19926
								
							
						
					
					
						commit
						f931505b58
					
				| @ -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 | ||||
| 
 | ||||
|  | ||||
| @ -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,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 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -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<CoinBalanceProps> { | ||||
| @ -19,10 +18,19 @@ class CoinBalance extends Component<CoinBalanceProps> { | ||||
|     } | ||||
| 
 | ||||
|     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 ( | ||||
|             <div className="flex-grow flex px-6 py-3 text-gray-800 items-center border-b -mx-4 align-middle"> | ||||
|                 <div className={"w-1/8"}> | ||||
|                     {this.props.icon} | ||||
|                     {/*{icon}*/} | ||||
|                 </div> | ||||
|                 <div className="w-2/5 xl:w-1/4 px-4 flex items-center"> | ||||
|                     <span className="text-lg">{this.props.name}</span> | ||||
| @ -39,41 +47,63 @@ class CoinBalance extends Component<CoinBalanceProps> { | ||||
|                 <div className="flex w-3/5 md:w/12"> | ||||
|                     <div className="w-1/2 px-4"> | ||||
|                         <div className="text-right"> | ||||
|                             {this.props.amount.toFixed(5)} {this.props.short} | ||||
|                             {this.props.amount.toFixed(5)} {this.props.name} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div className="w-1/2 px-4 align-middle"> | ||||
|                         <div className="text-right text-gray-400"> | ||||
|                             {this.props.quote_symbol} {this.props.quote_equivalent} | ||||
|                     <div className="w-1/2 px-4 my-auto"> | ||||
|                         <div className="text-right"> | ||||
|                             <div | ||||
|                                 className={"px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-200 text-gray-800"}> | ||||
|                                 {quoteBlock} | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export type WalletCardProps = { | ||||
|     quote: string, | ||||
| } | ||||
| 
 | ||||
| export class WalletCard extends Component<{}, { balances: Array<Balance> }> { | ||||
| export class WalletCard extends Component | ||||
|     <{}, { balances: Array<Balance> }> { | ||||
|     constructor(props) { | ||||
|         super(props); | ||||
|     } | ||||
| 
 | ||||
|     state = { | ||||
|     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 ( | ||||
|                     <CoinBalance key={balance.currency.concat(balance.kind)} icon={null} name={balance.currency} | ||||
|                                  amount={balance.amount} short={""} | ||||
|                                  quote_equivalent={0} percentage={0} | ||||
|                                  quote_symbol={"$"}/> | ||||
|                     <CoinBalance key={balance.currency.concat(balance.kind)} name={balance.currency} | ||||
|                                  amount={balance.amount} quote_equivalent={balance.quote_equivalent} | ||||
|                                  percentage={percentage_amount / this.totalQuoteBalance() * 100} | ||||
|                                  quote_symbol={balance.quote}/> | ||||
|                 ) | ||||
|             }) | ||||
|         ) | ||||
| @ -97,14 +127,14 @@ export class WalletCard extends Component<{}, { balances: Array<Balance> }> { | ||||
|         return ( | ||||
|             <div className="w-full mb-6 lg:mb-0 px-4 flex flex-col"> | ||||
|                 <div | ||||
|                     className="flex-grow flex flex-col bg-white border-t border-b sm:rounded sm:border shadow overflow-hidden"> | ||||
|                     <div className="border-b"> | ||||
|                     className="flex-grow flex bg-white flex-col border-t border-b sm:rounded-lg sm:border shadow overflow-hidden"> | ||||
|                     <div className="border-b bg-gray-50"> | ||||
|                         <div className="flex justify-between px-6 -mb-px"> | ||||
|                             <h3 className="text-blue-700 py-4 font-normal text-lg">Your Wallets</h3> | ||||
|                             <div className="flex"> | ||||
|                                 <button type="button" | ||||
|                                         className="appearance-none py-4 text-blue-700 border-b border-blue-dark mr-3"> | ||||
|                                     List | ||||
|                                     Margin | ||||
|                                 </button> | ||||
|                                 <button type="button" | ||||
|                                         className="appearance-none py-4 text-gray-600 border-b border-transparent hover:border-grey-dark"> | ||||
| @ -117,9 +147,9 @@ export class WalletCard extends Component<{}, { balances: Array<Balance> }> { | ||||
|                     {this.renderCoinBalances()} | ||||
| 
 | ||||
|                     <div className="px-6 py-4"> | ||||
|                         {/*<div className="text-center text-gray-400">*/} | ||||
|                         {/*    Total Balance ≈ {this.props}{this.state.total_balance.toFixed(2)}*/} | ||||
|                         {/*</div>*/} | ||||
|                         <div className="text-center text-gray-400"> | ||||
|                             Total Balance ≈ USD {this.totalQuoteBalance().toLocaleString()} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|  | ||||
| @ -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 = { | ||||
|  | ||||
| @ -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(?<base>[a-zA-Z]{3})(?<quote>[a-zA-Z]{3})" | ||||
| @ -10,3 +12,30 @@ export function symbolToPair(symbol: string): CurrencyPair { | ||||
|         quote: match.groups.quote | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export type SymbolAccesory = { | ||||
|     name: string, | ||||
|     icon: React.Component, | ||||
|     color: string | ||||
| } | ||||
| 
 | ||||
| export const SymbolAccessories: Array<SymbolAccesory> = [ | ||||
|     { | ||||
|         name: "BTC", | ||||
|         icon: Btc, | ||||
|         color: "yellow" | ||||
|     }, | ||||
|     { | ||||
|         name: "XMR", | ||||
|         icon: Xmr, | ||||
|         color: "yellow" | ||||
|     }, | ||||
|     { | ||||
|         name: "ETH", | ||||
|         icon: Eth, | ||||
|         color: "yellow" | ||||
|     } | ||||
| ]; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										157
									
								
								websrc/yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										157
									
								
								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" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user