{"mappings":"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","sources":["src/page/Trading/index.tsx","src/page/Trading/MainSearch/index.tsx","src/page/Trading/MainSearch/index.module.less","src/component/TVChartContainer/index.tsx","src/component/TVChartContainer/datafeed/index.ts","src/component/TVChartContainer/datafeed/ex3/DataFeed.ts","src/component/TVChartContainer/datafeed/config.ts","src/component/TVChartContainer/datafeed/ex3/HistoryProvider.ts","src/component/TVChartContainer/datafeed/utils.ts","src/component/TVChartContainer/datafeed/ex3/StreamProvider.ts","src/component/TVChartContainer/datafeed/example/DataFeed.ts","src/component/TVChartContainer/datafeed/example/HistoryProvider.ts","src/component/TVChartContainer/datafeed/example/StreamProvider.ts","node_modules/socket.io-client/build/esm/index.js","node_modules/socket.io-client/build/esm/url.js","node_modules/engine.io-client/build/esm/index.js","node_modules/engine.io-client/build/esm/socket.js","node_modules/engine.io-client/build/esm/transports/index.js","node_modules/engine.io-client/build/esm/transports/polling.js","node_modules/engine.io-client/build/esm/transport.js","node_modules/engine.io-parser/build/esm/index.js","node_modules/engine.io-parser/build/esm/encodePacket.browser.js","node_modules/engine.io-parser/build/esm/commons.js","node_modules/engine.io-parser/build/esm/decodePacket.browser.js","node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","node_modules/@socket.io/component-emitter/index.mjs","node_modules/engine.io-client/build/esm/util.js","node_modules/engine.io-client/build/esm/globalThis.browser.js","node_modules/engine.io-client/build/esm/contrib/yeast.js","node_modules/engine.io-client/build/esm/contrib/parseqs.js","node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","node_modules/engine.io-client/build/esm/contrib/has-cors.js","node_modules/engine.io-client/build/esm/transports/websocket.js","node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","node_modules/engine.io-client/build/esm/contrib/parseuri.js","node_modules/socket.io-client/build/esm/manager.js","node_modules/socket.io-client/build/esm/socket.js","node_modules/socket.io-parser/build/esm/index.js","node_modules/socket.io-parser/build/esm/binary.js","node_modules/socket.io-parser/build/esm/is-binary.js","node_modules/socket.io-client/build/esm/on.js","node_modules/socket.io-client/build/esm/contrib/backo2.js","src/page/Trading/Depth/index.tsx","src/page/Trading/Depth/index.module.less","src/model/canister/Depth.ts","node_modules/@deland-labs/orderbook_depth_client/index.js","node_modules/@deland-labs/orderbook_depth_client/interface.js","node_modules/@deland-labs/orderbook_depth_client/idl.js","src/model/market/index.ts","src/model/market/Depth.ts","src/model/utils/helper/converter/math.ts","src/model/market/TradeHistory.ts","src/model/canister/TradeHistory.ts","node_modules/@deland-labs/orderbook_trade_list_client/index.js","node_modules/@deland-labs/orderbook_trade_list_client/interface.js","node_modules/@deland-labs/orderbook_trade_list_client/idl.js","src/model/market/KLine.ts","src/page/Trading/AssetIndex/index.tsx","src/component/IndexNumber.tsx","src/page/Trading/AssetIndex/index.module.less","src/page/Trading/TradeForm/index.tsx","src/page/Trading/TradeForm/index.module.less","src/page/Trading/MyOrder/index.tsx","src/page/Trading/MyOrder/TableInlineButton.tsx","src/page/Trading/MyOrder/index.module.less","node_modules/react-router-class-tools/dist/source/index.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport { IReactionDisposer, observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Component, PureComponent } from 'react';\nimport { Container } from 'react-bootstrap';\n\nimport { MainSearch } from './MainSearch';\nimport { TVChartContainer } from '../../component/TVChartContainer';\nimport { Depth } from './Depth';\nimport { AssetIndex } from './AssetIndex';\nimport { TradeForm } from './TradeForm';\nimport { MyOrder } from './MyOrder';\nimport { TOKEN_DBTC_ID, TOKEN_DICP_ID } from '../../model/utils/config';\nimport session from '../../model/Session';\nimport { MarketStore } from '../../model/market';\nimport { DepthItem } from '../../model/canister/Depth';\nimport { RouteComponentProps, withRouter } from 'react-router-class-tools';\n\n@observer\nexport class TradingPage extends PureComponent<\n RouteComponentProps<{ b: string; q: string }, {}, {}>\n> {\n @observable\n askOrderDepthClickItem: DepthItem;\n @observable\n bidOrderDepthClickItem: DepthItem;\n @observable\n private market: MarketStore;\n @observable\n private baseTokenId: string;\n @observable\n private quoteTokenId: string;\n\n private bqDisposer?: IReactionDisposer;\n\n async componentDidMount() {\n this.bqDisposer = reaction(\n () => this.props?.match?.params,\n async p => {\n console.log(`bqDisposer ${p.b} ${p.q}`);\n let { b, q } = p;\n if (!b || !q) {\n b = TOKEN_DBTC_ID;\n q = TOKEN_DICP_ID;\n }\n if (this.baseTokenId === b && this.quoteTokenId === q) return;\n\n this.baseTokenId = b;\n this.quoteTokenId = q;\n this.market = new MarketStore(b, q);\n console.info(`TradingPage pair changed: market.init(${b},${q}`);\n await this.market.initialize();\n },\n {\n fireImmediately: true\n }\n );\n }\n\n async componentWillUnmount() {\n if (this.bqDisposer) this.bqDisposer();\n this.market.dispose();\n console.debug('TradingPage componentWillUnmount: market.dispose()');\n }\n\n render() {\n const { isDesktop } = session;\n const { market } = this;\n const { depth, baseToken, quoteToken, tickOf24H, marketSetting } =\n market || {};\n\n return (\n \n
\n {isDesktop && (\n
\n \n
\n )}\n
\n {isDesktop && (\n <>\n \n
\n \n
\n \n )}\n \n
\n
\n {\n this.askOrderDepthClickItem = item;\n }}\n onBidOrderClick={item => {\n this.bidOrderDepthClickItem = item;\n }}\n />\n
\n
\n {}}\n onOrderCancelled={async orderId => {\n await this.market?.cancelOrder(orderId);\n }}\n onCancelAllClicked={async () => {\n await this.market?.cancelAllOrders();\n }}\n />\n \n );\n }\n}\n\nexport default withRouter(TradingPage);\n","import { toCamelCase, formToJSON } from 'web-utility';\nimport classNames from 'classnames';\nimport { PureComponent, SyntheticEvent } from 'react';\nimport { Table, Form, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faSearch,\n faStar,\n faSortUp,\n faSortDown,\n faSort\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { IconButton } from '../../../component/IconButton';\nimport { IconInput } from '../../../component/IconInput';\nimport * as styles from './index.module.less';\nimport { observer } from 'mobx-react';\nimport { computed, observable } from 'mobx';\nimport { Market, MarketSetting } from '../../../model/canister/Market';\nimport { KLine, TickSpaceIndex } from '../../../model/canister/KLine';\n\ninterface MarketItem {\n fav: boolean;\n top: boolean;\n token: string;\n lastPrice: number;\n change: number;\n setting?: MarketSetting;\n}\n\nconst filterHead = ['Fav', 'Top', 'USDT', 'USDC', 'ICP'] as const,\n tableHead = ['Token', 'Last Price', 'Change'] as const;\n\ntype TableHeadType = typeof tableHead[number];\ntype FilterHeadType = typeof filterHead[number];\n\n@observer\nexport class MainSearch extends PureComponent {\n @observable\n data: MarketItem[] = [];\n @observable\n ascend: boolean = true;\n @observable\n sortFiled: TableHeadType = 'Last Price';\n @observable\n filter?: FilterHeadType = undefined;\n\n marketService: Market = new Market();\n\n priceUpdateTimer?: NodeJS.Timer;\n\n @computed\n get dataWithFilter() {\n const lowerFilter = this.filter.toLowerCase();\n switch (this.filter) {\n case 'Fav':\n case 'Top':\n return this.data.filter(d => d[lowerFilter]);\n case 'ICP':\n case 'USDC':\n case 'USDT':\n return this.data.filter(d => d.token === this.filter);\n default:\n return this.data;\n }\n }\n\n async componentDidMount() {\n let DEFAULT_DATA: MarketItem[] = [\n {\n fav: true,\n top: true,\n token: 'DBTC',\n lastPrice: 0.0,\n change: 0.0\n },\n {\n fav: true,\n top: true,\n token: 'DETH',\n lastPrice: 0.0,\n change: 0.0\n }\n ];\n\n const marketList = await this.marketService.getMarketList();\n DEFAULT_DATA[0].setting = marketList[0];\n DEFAULT_DATA[1].setting = marketList[1];\n this.data = DEFAULT_DATA;\n\n this.priceUpdateTimer = setInterval(async () => {\n this.data.forEach(async d => {\n if (!d.setting?.klineCanisterId) return;\n const kline = new KLine(d.setting.klineCanisterId);\n const tick = await kline.fetchCurrentTick(TickSpaceIndex.OneDay);\n\n if (!tick) return;\n const priceChanged = tick.close.minus(tick.open).div(tick.open);\n d.lastPrice = tick.close\n .shiftedBy(-d.setting.priceDecimals)\n .dp(d.setting.orderPricePrecision)\n .toNumber();\n d.change = priceChanged.toNumber();\n });\n }, 10 * 1000);\n }\n\n componentWillUnmount() {\n if (this.priceUpdateTimer) clearInterval(this.priceUpdateTimer);\n }\n\n searchCoin = async (event: SyntheticEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n onFilterChanged = (filter: FilterHeadType) => {\n this.filter = filter;\n };\n\n onSortFiledChanged(sortFiled: TableHeadType) {\n this.sortFiled = sortFiled;\n\n const theFiled = toCamelCase(sortFiled);\n this.ascend = this.sortFiled === sortFiled ? !this.ascend : true;\n const diff = this.ascend ? -1 : 1;\n this.data = this.data.sort((a, b) =>\n a[theFiled] > b[theFiled] ? diff : -diff\n );\n }\n\n toggleFav(token: string) {\n this.data = this.data.map(d =>\n d.token === token ? { ...d, fav: !d['fav'] } : d\n );\n }\n\n redirectMarket(baseTokenId: string, quoteTokenId: string) {\n window.location.hash = `/market/${baseTokenId}/${quoteTokenId}`;\n }\n\n renderList = (\n { fav, token, lastPrice, change, setting }: MarketItem,\n index: number\n ) => (\n \n this.redirectMarket(setting?.baseTokenId, setting?.quoteTokenId)\n }\n >\n \n this.toggleFav(token)}\n />\n {token}\n \n {lastPrice}\n 0 ? 'success' : 'danger'}`}>\n 0 ? faSortUp : faSortDown}\n className=\"pe-2\"\n />\n {(change * 100).toFixed(2) + '%'}\n \n \n );\n\n render() {\n const { data, sortFiled, filter, ascend } = this;\n\n return (\n
\n
\n \n \n\n \n {filterHead.map((head, index) => (\n \n {head}\n \n ))}\n \n\n \n \n \n {tableHead.map((header, index) => (\n \n {header}\n this.onSortFiledChanged(header)}\n />\n \n ))}\n \n \n {data.map(this.renderList)}\n
\n
\n );\n }\n}\n",".main-search-wrap{\n :global{\n .input-group{\n border-bottom: 1px solid #262d40;\n height: 46px;\n border-radius: 0 !important;\n padding: 0 1rem;\n display: flex;\n align-items: center;\n .form-control{\n height: 30px;\n box-shadow: none;\n color: #ffffff !important;\n background: #161E32!important;\n &::placeholder{\n color: #3B4966;\n }\n }\n .input-group-text{\n height: 30px;\n background: #161E32!important;\n svg{font-size: 12px !important;}\n }\n }\n }\n}\n\n.toggle-button-group{\n height: 36px;\n display: flex;\n align-items: center;\n width: 100%;\n padding: 0 1rem;\n overflow: hidden;\n :global{\n .btn{\n padding: 4px .5rem !important;\n font-size: 12px;\n border-radius: 4px !important;\n box-shadow: none !important;\n flex:none;\n margin-right: 4px;\n &:hover{\n color: #fff!important;\n background: none;\n }\n }\n .btn-check:active+.btn, .btn-check:checked+.btn{\n background: #090D1A;\n }\n }\n}\n\n.table{\n border-spacing: 0;\n td{padding: 0 8px;}\n thead tr td:first-child{padding-left: 1rem;}\n tbody tr td{cursor: pointer;height: 30px !important;}\n}\n","import { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { PureComponent } from 'react';\nimport {\n ChartingLibraryWidgetOptions,\n IBasicDataFeed,\n IChartingLibraryWidget\n} from '../../static/charting_library/charting_library.min';\n\nimport { formatDate } from 'web-utility';\nimport { EX3DataFeed, ExampleDataFeed } from './datafeed';\n\nexport interface TvProps {\n symbol: string;\n klineCanisterId: string;\n priceDecimals: number;\n baseTokenDecimals: number;\n}\n\nconst timeButtons = [\n { text: '1min', resolution: '1' },\n { text: '5min', resolution: '5' },\n { text: '15min', resolution: '15' },\n { text: '30min', resolution: '30' },\n { text: '1hour', resolution: '60' },\n { text: '1day', resolution: '1D' },\n { text: '1week', resolution: '1W' },\n { text: '1mon', resolution: '1M' }\n];\n@observer\nexport class TVChartContainer extends PureComponent {\n @observable\n symbol = '';\n\n @observable\n symbolDisposer;\n\n @observable\n interval = '15';\n\n private dataFeed: IBasicDataFeed;\n private widget: IChartingLibraryWidget;\n componentDidMount() {\n this.symbolDisposer = reaction(\n () => {\n return {\n symbol: this.props.symbol || '',\n klineCanisterId: this.props?.klineCanisterId || '',\n tvWidget: window.TradingView\n };\n },\n p => {\n if (!p.symbol || !p.klineCanisterId || !p.tvWidget) return;\n\n if (this.dataFeed) this.dataFeed.unsubscribeBars('');\n\n if (this.symbol !== p.symbol && !!p.tvWidget) {\n this.dataFeed = new EX3DataFeed(\n p.klineCanisterId,\n this.props.priceDecimals,\n this.props.baseTokenDecimals\n );\n //this.dataFeed = new ExampleDataFeed();\n const widgetOptions: ChartingLibraryWidgetOptions = {\n debug: false,\n symbol: p.symbol,\n datafeed: this.dataFeed,\n interval: this.interval,\n container_id: 'tv_chart_container',\n library_path: 'charting_library/',\n locale: 'en',\n charts_storage_url: 'https://test.icp',\n charts_storage_api_version: '1.1',\n client_id: 'orderswap',\n user_id: 'dfinity',\n autosize: true,\n theme: 'Dark',\n toolbar_bg: '#111729',\n customFormatters: {\n //CustomFormatter\n timeFormatter: {\n format(date: Date): string {\n return formatDate(date, 'HH:mm');\n },\n formatLocal(date: Date): string {\n return formatDate(date, 'HH:mm');\n }\n },\n dateFormatter: {\n format(date: Date): string {\n return formatDate(date, 'YYYY-MM-DD');\n },\n formatLocal(date: Date): string {\n return formatDate(date, 'YYYY-MM-DD');\n }\n }\n },\n // custom_css_url: \"bundles/custom.css\",\n overrides: {\n 'mainSeriesProperties.showCountdown': false,\n 'paneProperties.background': '#111729',\n 'mainSeriesProperties.candleStyle.upColor': '#0FBEAF',\n 'mainSeriesProperties.candleStyle.downColor': '#EC4953',\n 'paneProperties.vertGridProperties.color': '#131b2a',\n 'paneProperties.horzGridProperties.color': '#131b2a',\n 'scalesProperties.lineColor': '#252b3e'\n },\n disabled_features: [\n 'use_localstorage_for_settings',\n 'header_symbol_search',\n 'symbol_search_hot_key',\n 'border_around_the_chart',\n 'pane_context_menu',\n 'header_compare',\n 'header_indicators',\n // \"header_settings\",\n 'header_resolutions',\n 'header_intervals',\n 'header_screenshot',\n 'header_chart_type',\n 'header_chart_style',\n 'header_fullscreen',\n 'header_symbol_info',\n 'header_undo_redo',\n 'header_saveload',\n 'timeframes_toolbar'\n ]\n };\n this.widget = new window.TradingView.widget(widgetOptions);\n const widget = this.widget;\n widget.onChartReady(() => {\n // widget\n // .createButton({ align: 'left' })\n // .addClass('custom-time-label')\n // .text('Time');\n\n for (const { text, resolution } of timeButtons) {\n const button = widget.createButton();\n button\n .attr('title', text)\n .addClass('timeBtn')\n .text(text)\n .parent()\n .addClass('timeWrap');\n if (this.interval === resolution)\n button.css({ color: '#ffff' }).addClass('active');\n\n button.on('click', e => {\n if (e.srcElement.getAttribute('class').indexOf('active') !== -1)\n return false;\n const timeWraps =\n e.target.parentNode.parentNode.parentNode.querySelectorAll(\n '.timeWrap'\n );\n timeWraps.forEach(element => {\n element.children[0].classList.remove('active');\n element.children[0].setAttribute('style', '');\n });\n e.srcElement.classList.add('active');\n button.css({ color: '#ffff' });\n // @ts-ignore\n widget.chart().setResolution(resolution);\n });\n }\n });\n this.symbol = p.symbol;\n } else {\n console.debug(`trading view: ${p.symbol}, tvWidget: ${!!p.tvWidget}`);\n }\n },\n {\n fireImmediately: true\n }\n );\n }\n componentWillUnmount() {\n if (this.symbolDisposer) this.symbolDisposer();\n }\n render() {\n return (\n
\n );\n }\n}\n","export { EX3DataFeed } from './ex3/DataFeed';\nexport { ExampleDataFeed } from './example/DataFeed';\nexport { IHistoryProvider, IStreamProvider } from './interface';\n","import {\n DomeCallback,\n ErrorCallback,\n GetMarksCallback,\n HistoryCallback,\n HistoryDepth,\n IBasicDataFeed,\n LibrarySymbolInfo,\n Mark,\n OnReadyCallback,\n ResolutionBackValues,\n ResolveCallback,\n SearchSymbolsCallback,\n ServerTimeCallback,\n SubscribeBarsCallback,\n TimescaleMark\n} from '../../../../static/charting_library/charting_library.min';\nimport { supportedResolutions } from '../config';\nimport { EX3HistoryProvider } from './HistoryProvider';\nimport { EX3StreamProvider } from './StreamProvider';\n\nexport class EX3DataFeed implements IBasicDataFeed {\n private priceDecimals = 0;\n private baseTokenDecimals = 0;\n private klineCanisterId = '';\n private historyProvider: EX3HistoryProvider;\n private streamProvider: EX3StreamProvider;\n\n constructor(\n klineCanisterId: string,\n priceDecimals: number,\n baseTokenDecimals: number\n ) {\n this.klineCanisterId = klineCanisterId;\n this.priceDecimals = priceDecimals;\n this.baseTokenDecimals = baseTokenDecimals;\n this.historyProvider = new EX3HistoryProvider(\n klineCanisterId,\n priceDecimals,\n baseTokenDecimals\n );\n\n this.streamProvider = new EX3StreamProvider(\n klineCanisterId,\n priceDecimals,\n baseTokenDecimals\n );\n }\n searchSymbols(\n userInput: string,\n exchange: string,\n symbolType: string,\n onResult: SearchSymbolsCallback\n ): void {\n console.debug('searchSymbols', userInput, exchange, symbolType);\n }\n resolveSymbol(\n symbolName: string,\n onResolve: ResolveCallback,\n onError: ErrorCallback\n ): void {\n const split_data = symbolName.split(/[:/]/);\n const symbol_stub: LibrarySymbolInfo = {\n name: symbolName,\n description: '',\n type: 'crypto',\n session: '24x7',\n timezone: 'Etc/UTC',\n ticker: symbolName,\n // exchange: split_data[0],\n minmov: 1,\n pricescale: 100000000,\n has_intraday: true,\n intraday_multipliers: ['1', '60'],\n supported_resolutions: supportedResolutions,\n volume_precision: 8,\n data_status: 'streaming',\n full_name: '',\n exchange: '',\n listed_exchange: ''\n };\n\n if (split_data[1].match(/USD|EUR|JPY|AUD|GBP|KRW|CNY/)) {\n symbol_stub.pricescale = 100;\n }\n setTimeout(function () {\n onResolve(symbol_stub);\n // console.log('Resolving that symbol....', symbol_stub)\n }, 0);\n // onResolveErrorCallback('Not feeling it today')\n }\n getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n rangeStartDate: number,\n rangeEndDate: number,\n onResult: HistoryCallback,\n onError: ErrorCallback,\n isFirstCall: boolean\n ): void {\n console.debug(`ex3 DataFeed: getBars ${resolution}`);\n this.historyProvider\n .getBars(\n symbolInfo,\n resolution,\n rangeStartDate,\n rangeEndDate,\n isFirstCall\n )\n .then(bars => {\n if (bars.length) {\n onResult(bars, { noData: false });\n } else {\n onResult(bars, { noData: true });\n }\n })\n .catch(err => {\n console.log({ err });\n onError(err);\n });\n }\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void\n ): void {\n console.debug(`ex3 subscribeBars ${resolution}`);\n this.streamProvider.subscribeBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback\n );\n }\n unsubscribeBars(listenerGuid: string): void {\n console.debug(`unsubscribeBars`);\n this.streamProvider.unsubscribeBars(listenerGuid);\n }\n subscribeDepth?(\n symbolInfo: LibrarySymbolInfo,\n callback: DomeCallback\n ): string {\n throw new Error('Method not implemented.');\n }\n unsubscribeDepth?(subscriberUID: string): void {\n throw new Error('Method not implemented.');\n }\n onReady(callback: OnReadyCallback): void {\n setTimeout(\n () =>\n callback({\n supported_resolutions: supportedResolutions\n }),\n 0\n );\n }\n}\n","export const supportedResolutions = ['1', '5', '15', '30', '60', '240', 'D', 'W', 'M'];\n","import { KLine, Tick } from '../../../../model/canister/KLine';\nimport {\n LibrarySymbolInfo,\n Bar\n} from '../../../../static/charting_library/charting_library.min';\nimport { IHistoryProvider } from '../interface';\nimport { parseResolutionToTickSpaceIndex } from '../utils';\n\nexport class EX3HistoryProvider implements IHistoryProvider {\n private priceDecimals = 0;\n private baseTokenDecimals = 0;\n private klineCanisterId = '';\n\n constructor(\n klineCanisterId: string,\n priceDecimals: number,\n baseTokenDecimals: number\n ) {\n this.klineCanisterId = klineCanisterId;\n this.priceDecimals = priceDecimals;\n this.baseTokenDecimals = baseTokenDecimals;\n }\n\n async getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n rangeStartDate: number,\n rangeEndDate: number,\n firstDataRequest: boolean\n ): Promise> {\n console.debug(\n 'ex3 history getBars',\n symbolInfo,\n resolution,\n rangeStartDate,\n rangeEndDate,\n firstDataRequest\n );\n if (!firstDataRequest) return [];\n try {\n const tick = parseResolutionToTickSpaceIndex(resolution);\n const historyData: Array = await new KLine(\n this.klineCanisterId\n ).fetchTicks(tick, 0, 1000);\n\n const { priceDecimals, baseTokenDecimals } = this;\n if (!historyData[0]) return [];\n const bars = historyData.map(\n ({ open, high, low, close, volume, time }) => ({\n time: time,\n open: open.shiftedBy(-priceDecimals).toNumber(),\n high: high.shiftedBy(-priceDecimals).toNumber(),\n low: low.shiftedBy(-priceDecimals).toNumber(),\n close: close.shiftedBy(-priceDecimals).toNumber(),\n volume: volume.shiftedBy(-baseTokenDecimals).toNumber()\n })\n );\n console.debug(`get kline history count ${bars.length}`);\n return bars.reverse();\n } catch (error) {\n console.error('fetchTicks', error);\n return [];\n }\n }\n}\n","import { TickSpaceIndex } from \"../../../model/canister/KLine\";\n\nexport const parseResolutionToTickSpaceIndex = (resolution: string) => {\n switch (resolution) {\n case '1':\n return TickSpaceIndex.OneMinute;\n case '5':\n return TickSpaceIndex.FiveMinutes;\n case '15':\n return TickSpaceIndex.FifteenMinutes;\n case '30':\n return TickSpaceIndex.ThirtyMinutes;\n case '60':\n return TickSpaceIndex.OneHour;\n case '240':\n return TickSpaceIndex.FourHours;\n case 'D':\n return TickSpaceIndex.OneDay;\n case 'W':\n return TickSpaceIndex.Week;\n case 'M':\n return TickSpaceIndex.Month;\n default:\n return TickSpaceIndex.FifteenMinutes;\n }\n};","import { Second } from 'web-utility';\nimport { KLine } from '../../../../model/canister/KLine';\nimport {\n Bar,\n LibrarySymbolInfo,\n SubscribeBarsCallback\n} from '../../../../static/charting_library/charting_library.min';\nimport { IStreamProvider } from '../interface';\nimport { parseResolutionToTickSpaceIndex } from '../utils';\n\nexport class EX3StreamProvider implements IStreamProvider {\n private priceDecimals = 0;\n private baseTokenDecimals = 0;\n private klineCanisterId = '';\n private fetchLatestTickTimer?: NodeJS.Timer;\n\n constructor(\n klineCanisterId: string,\n priceDecimals: number,\n baseTokenDecimals: number\n ) {\n this.klineCanisterId = klineCanisterId;\n this.priceDecimals = priceDecimals;\n this.baseTokenDecimals = baseTokenDecimals;\n }\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n onRealtimeCallback: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void\n ): void {\n this.fetchLatestTickTimer = setInterval(async () => {\n const { priceDecimals, baseTokenDecimals } = this;\n const klineActor = new KLine(this.klineCanisterId);\n try {\n const tick = parseResolutionToTickSpaceIndex(resolution);\n const crtTick = await klineActor.fetchCurrentTick(tick);\n if (!crtTick) return;\n const newBar: Bar = {\n time: crtTick.time,\n volume: crtTick.volume.shiftedBy(-baseTokenDecimals).dp(2).toNumber(),\n close: crtTick.close.shiftedBy(-priceDecimals).toNumber(),\n open: crtTick.open.shiftedBy(-priceDecimals).toNumber(),\n high: crtTick.high.shiftedBy(-priceDecimals).toNumber(),\n low: crtTick.low.shiftedBy(-priceDecimals).toNumber()\n };\n console.debug(`crtTick ${newBar.time} lastPrice ${newBar.close}`);\n // TODO , update bar\n onRealtimeCallback(newBar);\n } catch (error) {\n console.error('stream currtntTick', error);\n }\n }, Second * 10);\n }\n\n unsubscribeBars(listenerGuid: string): void {\n if (this.fetchLatestTickTimer) {\n clearInterval(this.fetchLatestTickTimer);\n this.fetchLatestTickTimer = undefined;\n }\n }\n}\n\n// Take a single trade, and subscription record, return updated bar\nconst updateBar = (data, sub) => {\n var lastBar = sub.lastBar;\n let resolution = sub.resolution;\n if (resolution.includes('D')) {\n // 1 day in minutes === 1440\n resolution = 1440;\n } else if (resolution.includes('W')) {\n // 1 week in minutes === 10080\n resolution = 10080;\n }\n var coeff = resolution * 60;\n var rounded = Math.floor(data.time / coeff) * coeff;\n var lastBarSec = lastBar.time / 1000;\n var _lastBar;\n if (rounded > lastBarSec) {\n // create a new candle, use last close as open **PERSONAL CHOICE**\n _lastBar = {\n time: rounded * 1000,\n open: lastBar.close,\n high: lastBar.close,\n low: lastBar.close,\n close: data.price,\n volume: data.volume\n };\n } else {\n // update lastBar candle!\n if (data.price < lastBar.low) {\n lastBar.low = data.price;\n } else if (data.price > lastBar.high) {\n lastBar.high = data.price;\n }\n lastBar.volume += data.volume;\n lastBar.close = data.price;\n _lastBar = lastBar;\n }\n return _lastBar;\n};\n","import {\n ErrorCallback,\n GetMarksCallback,\n HistoryCallback,\n HistoryDepth,\n IBasicDataFeed,\n LibrarySymbolInfo,\n Mark,\n OnReadyCallback,\n ResolutionBackValues,\n ResolveCallback,\n SearchSymbolsCallback,\n SubscribeBarsCallback\n} from '../../../../static/charting_library/charting_library.min';\nimport { supportedResolutions } from '../config';\nimport { ExampleHistoryProvider } from './HistoryProvider';\nimport { ExampleStreamProvider } from './StreamProvider';\n\nexport class ExampleDataFeed implements IBasicDataFeed {\n private historyProvider: ExampleHistoryProvider;\n private streamProvider: ExampleStreamProvider;\n constructor() {\n this.historyProvider = new ExampleHistoryProvider();\n this.streamProvider = new ExampleStreamProvider();\n }\n searchSymbols(\n userInput: string,\n exchange: string,\n symbolType: string,\n onResult: SearchSymbolsCallback\n ): void {\n console.log('=====searchSymbols running');\n }\n resolveSymbol(\n symbolName: string,\n onResolve: ResolveCallback,\n onError: ErrorCallback\n ): void {\n // console.log('======resolveSymbol running')\n // console.log('resolveSymbol:',{symbolName})\n const split_data = symbolName.split(/[:/]/);\n const symbol_stub: LibrarySymbolInfo = {\n name: symbolName,\n description: '',\n type: 'crypto',\n session: '24x7',\n timezone: 'Etc/UTC',\n ticker: symbolName,\n // exchange: split_data[0],\n minmov: 1,\n pricescale: 100000000,\n has_intraday: true,\n intraday_multipliers: ['1', '60'],\n supported_resolutions: supportedResolutions,\n volume_precision: 8,\n data_status: 'streaming',\n full_name: '',\n exchange: '',\n listed_exchange: ''\n };\n\n if (split_data[1].match(/USD|EUR|JPY|AUD|GBP|KRW|CNY/)) {\n symbol_stub.pricescale = 100;\n }\n setTimeout(function () {\n onResolve(symbol_stub);\n // console.log('Resolving that symbol....', symbol_stub)\n }, 0);\n // onResolveErrorCallback('Not feeling it today')\n }\n getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n rangeStartDate: number,\n rangeEndDate: number,\n onResult: HistoryCallback,\n onError: ErrorCallback,\n isFirstCall: boolean\n ): void {\n console.log('=====getBars running');\n //console.log('function args',arguments)\n // console.log(`Requesting bars between ${new Date(from * 1000).toISOString()} and ${new Date(to * 1000).toISOString()}`)\n this.historyProvider\n .getBars(\n symbolInfo,\n resolution,\n rangeStartDate,\n rangeEndDate,\n isFirstCall,\n 2000\n )\n .then(bars => {\n if (bars.length) {\n onResult(bars, { noData: false });\n } else {\n onResult(bars, { noData: true });\n }\n })\n .catch(err => {\n console.log({ err });\n onError(err);\n });\n }\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void\n ): void {\n console.log('=====subscribeBars runnning');\n this.streamProvider.subscribeBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback\n );\n }\n unsubscribeBars(listenerGuid: string): void {\n console.log('=====unsubscribeBars running');\n this.streamProvider.unsubscribeBars(listenerGuid);\n }\n onReady(callback: OnReadyCallback): void {\n setTimeout(\n () =>\n callback({\n supported_resolutions: supportedResolutions\n }),\n 0\n );\n }\n}\n","import { buildURLData } from 'web-utility';\n\nimport { tvClient, TVData } from '../../../../model/service';\nimport { IHistoryProvider } from '../interface';\n\ntype ChartData = TVData<\n {\n conversionType: 'direct';\n conversionSymbol: number;\n time: number;\n low: number;\n high: number;\n open: number;\n close: number;\n volumefrom: number;\n volumeto: number;\n }[]\n>;\n\nexport class ExampleHistoryProvider implements IHistoryProvider {\n async getBars(\n symbolInfo: { name: string },\n resolution: string | number,\n from: string | number,\n toTs: string | number = '',\n first,\n limit = 1000\n ) {\n const [fsym, tsym] = symbolInfo.name.split(/[:/]/);\n\n const url = `/data/histo${\n resolution === 'D' ? 'day' : resolution >= 60 ? 'hour' : 'minute'\n }`;\n const qs = {\n fsym,\n tsym,\n toTs,\n limit,\n aggregate: 1 //resolution\n };\n const {\n body: { Response, Message, Data }\n } = await tvClient.post(`${url}?${buildURLData(qs)}`);\n\n if (Response === 'Error') {\n console.error('CryptoCompare API error:', Message);\n return [];\n }\n if (!Data[0]) return [];\n\n const bars = Data.map(({ time, volumefrom, ...rest }) => ({\n time: time * 1000, //TradingView requires bar time in ms\n volume: volumefrom,\n ...rest\n }));\n if (first) history[symbolInfo.name] = { lastBar: bars[bars.length - 1] };\n\n return bars;\n }\n}\n","import { Second } from 'web-utility';\nimport io from 'socket.io-client';\nimport { IStreamProvider } from '../interface';\nimport {\n Bar,\n LibrarySymbolInfo,\n SubscribeBarsCallback\n} from '../../../../static/charting_library/charting_library.min';\nimport { ExampleHistoryProvider } from './HistoryProvider';\n\nvar socket_url = 'wss://streamer.cryptocompare.com';\nvar socket = io(socket_url);\n// keep track of subscriptions\nvar _subs: any = [];\nvar xResolution: any = 15;\nvar symbolInfoname: string = 'BTC/USD';\n\nvar newSub = {};\nexport class ExampleStreamProvider implements IStreamProvider {\n unsubscribeBars(listenerGuid: string): void {\n var subIndex = _subs.findIndex(e => e.uid === listenerGuid);\n if (subIndex === -1) {\n //console.log(\"No subscription found for \",uid)\n return;\n }\n var sub = _subs[subIndex];\n socket.emit('SubRemove', { subs: [sub.channelString] });\n _subs.splice(subIndex, 1);\n }\n subscribeBars = (\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n onRealtimeCallback: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void\n ) => {\n const channelString = createChannelString(symbolInfo);\n socket.emit('SubAdd', { subs: [channelString] });\n xResolution = resolution;\n symbolInfoname = symbolInfo.name;\n newSub = {\n channelString,\n listenerGuid,\n resolution,\n symbolInfo,\n listener: onRealtimeCallback\n };\n _subs.push(newSub);\n };\n}\n\nsocket.on('connect', () => {\n console.log('===Socket connected');\n});\nsocket.on('disconnect', e => {\n console.log('===Socket disconnected:', e);\n});\nsocket.on('error', err => {\n console.log('====socket error', err);\n});\nsocket.on('m', e => {\n // here we get all events the CryptoCompare connection has subscribed to\n // we need to send this new data to our subscribed charts\n const _data = e.split('~');\n console.log('_data', _data);\n if (_data[0] === '401' || _data[0] === '500') {\n setInterval(async () => {\n const historyProvider = new ExampleHistoryProvider();\n const bars = await historyProvider.getBars(\n { name: symbolInfoname },\n xResolution,\n '',\n null,\n 1\n );\n const [to_sym, from_sym] = symbolInfoname.split(/[:/]/);\n\n const newdata = {\n from_sym,\n to_sym,\n time: bars[bars.length - 1].time,\n volume: bars[0].volume,\n price: bars[bars.length - 1].close\n };\n const channelString = `0~${to_sym}~${from_sym}`;\n\n const subX = _subs.find(e => e.channelString === channelString);\n\n if (!subX || newdata.time < subX.lastBar.time / 1000) return;\n\n const _lastBarX = updateBar(newdata, subX);\n console.log(_lastBarX);\n subX.listener(_lastBarX);\n subX.lastBar = _lastBarX;\n }, Second * 10);\n }\n if (_data[0] === '3') {\n // console.log('Websocket Snapshot load event complete')\n return;\n }\n let data = {\n sub_type: parseInt(_data[0], 10),\n exchange: _data[1],\n to_sym: _data[2],\n from_sym: _data[3],\n trade_id: _data[5],\n time: parseInt(_data[6], 10),\n volume: parseFloat(_data[7]),\n price: parseFloat(_data[8])\n };\n\n let channelString = `${data.sub_type}~${data.exchange}~${data.to_sym}~${data.from_sym}`;\n const sub = _subs.find(e => e.channelString === channelString);\n console.log('sub', sub);\n if (sub) {\n // disregard the initial catchup snapshot of trades for already closed candles\n if (data.time < sub.lastBar.time / 1000) {\n return;\n }\n var _lastBar = updateBar(data, sub);\n console.log(_lastBar);\n // send the most recent bar back to TV's realtimeUpdate callback\n sub.listener(_lastBar);\n // update our own record of lastBar\n sub.lastBar = _lastBar;\n }\n});\n\n// Take a single trade, and subscription record, return updated bar\nfunction updateBar(data, sub) {\n var lastBar = sub.lastBar;\n let resolution = sub.resolution;\n if (resolution.includes('D')) {\n // 1 day in minutes === 1440\n resolution = 1440;\n } else if (resolution.includes('W')) {\n // 1 week in minutes === 10080\n resolution = 10080;\n }\n var coeff = resolution * 60;\n var rounded = Math.floor(data.time / coeff) * coeff;\n var lastBarSec = lastBar.time / 1000;\n var _lastBar;\n if (rounded > lastBarSec) {\n // create a new candle, use last close as open **PERSONAL CHOICE**\n _lastBar = {\n time: rounded * 1000,\n open: lastBar.close,\n high: lastBar.close,\n low: lastBar.close,\n close: data.price,\n volume: data.volume\n };\n } else {\n // update lastBar candle!\n if (data.price < lastBar.low) {\n lastBar.low = data.price;\n } else if (data.price > lastBar.high) {\n lastBar.high = data.price;\n }\n lastBar.volume += data.volume;\n lastBar.close = data.price;\n _lastBar = lastBar;\n }\n return _lastBar;\n}\n// takes symbolInfo object as input and creates the subscription string to send to CryptoCompare\nfunction createChannelString(symbolInfo) {\n var channel = symbolInfo.name.split(/[:/]/);\n // const exchange = channel[0] === 'GDAX' ? 'Coinbase' : channel[0]\n const from = channel[0];\n const to = channel[1];\n // subscribe to the CryptoCompare trade channel for the pair and exchange\n return `0~${from}~${to}`;\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\n","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n addEventListener(\"beforeunload\", () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n }, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", reason => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n *\n * @api public\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @api protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @api protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @api protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\nexport default encodePacket;\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.substr(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.substr(path.length - 1, 1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { Socket as Engine, installTimerFunctions, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n this.decoder.add(data);\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n this.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n *\n * @public\n */\n constructor(io, nsp, opts) {\n super();\n this.connected = false;\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @public\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for connect()\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * @return self\n * @public\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @return self\n * @public\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n const timeout = this.flags.timeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n this.id = id;\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually.\n *\n * @return self\n * @public\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for disconnect()\n *\n * @return self\n * @public\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n * @public\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @returns self\n * @public\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * ```\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n * ```\n *\n * @returns self\n * @public\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @param listener\n * @public\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @param listener\n * @public\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @param listener\n * @public\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n *\n * @public\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @param listener\n *\n *
\n     *\n     * socket.onAnyOutgoing((event, ...args) => {\n     *   console.log(event);\n     * });\n     *\n     * 
\n *\n * @public\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @param listener\n *\n *
\n     *\n     * socket.prependAnyOutgoing((event, ...args) => {\n     *   console.log(event);\n     * });\n     *\n     * 
\n *\n * @public\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @param listener\n *\n *
\n     *\n     * const handler = (event, ...args) => {\n     *   console.log(event);\n     * }\n     *\n     * socket.onAnyOutgoing(handler);\n     *\n     * // then later\n     * socket.offAnyOutgoing(handler);\n     *\n     * 
\n *\n * @public\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n *\n * @public\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n obj.type =\n obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK;\n return this.encodeAsBinary(obj);\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n packet = this.decodeString(obj);\n if (packet.type === PacketType.BINARY_EVENT ||\n packet.type === PacketType.BINARY_ACK) {\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { PureComponent } from 'react';\nimport {\n Badge,\n ButtonGroup,\n Card,\n ListGroup,\n ToggleButton\n} from 'react-bootstrap';\nimport { Select, Option } from 'idea-react';\n\nimport * as styles from './index.module.less';\nimport {\n DepthItem,\n DepthLevel,\n DepthType\n} from '../../../model/canister/Depth';\nimport { observer } from 'mobx-react';\nimport { SpotOrderType } from '../../../model/canister/Fusion';\nimport { formatNumber } from '../../../model/utils/helper';\nimport classnames from 'classnames';\nimport { LatestPrice, PriceTrend } from '../../../model/market';\nimport BigNumber from 'bignumber.js';\n\ninterface Props {\n askOrders?: Array;\n bidOrders?: Array;\n type?: DepthType;\n levels?: Array;\n level?: DepthLevel;\n count?: number;\n latestPrice?: LatestPrice;\n orderPricePrecision?: number;\n depthVolumePrecision?: number;\n baseTokenPrecision?: number;\n baseTokenSymbol?: string;\n quoteTokenSymbol?: string;\n onChangeDepthType?: (depthType: DepthType) => void;\n onChangeDepthLevel?: (level: DepthLevel) => void;\n onAskOrderClick?: (order: DepthItem) => void;\n onBidOrderClick?: (order: DepthItem) => void;\n}\n\n@observer\nexport class Depth extends PureComponent {\n radios = [DepthType.All, DepthType.Bid, DepthType.Ask].map(d =>\n DepthType[d].toString()\n );\n\n renderButtonGroup() {\n const { type = DepthType.All, onChangeDepthType = () => {} } = this.props;\n return (\n \n {this.radios.map((radio, idx) => (\n onChangeDepthType(DepthType[radio])}\n />\n ))}\n \n );\n }\n\n renderSelect() {\n const {\n level = DepthLevel.Two,\n levels = [],\n onChangeDepthLevel = () => {}\n } = this.props;\n\n return (\n
\n onChangeDepthLevel(DepthLevel[v])}\n >\n {levels.map((item, idx) => (\n \n ))}\n \n
\n );\n }\n\n renderTitle() {\n const { baseTokenSymbol = '', quoteTokenSymbol = '' } = this.props;\n return (\n \n \n Price {quoteTokenSymbol}\n \n \n Amount {baseTokenSymbol}\n \n \n Sum {baseTokenSymbol}\n \n \n );\n }\n\n renderPrice() {\n const {\n type = DepthType.All,\n latestPrice = { price: 0, trend: PriceTrend.Equal },\n orderPricePrecision = 2\n } = this.props;\n return (\n
\n \n {formatNumber(latestPrice.price, orderPricePrecision)}\n \n ≈ {formatNumber(latestPrice.price, orderPricePrecision)}\n
\n );\n }\n\n renderOrderList(orders: DepthItem[], type: SpotOrderType) {\n const {\n onAskOrderClick = () => {},\n onBidOrderClick = () => {},\n levels = [],\n level = 1,\n baseTokenPrecision = 0\n } = this.props;\n const miniPrice = levels[level - 1];\n const depthPriceDecimals = new BigNumber(miniPrice).dp();\n let volumeSum = new BigNumber(0);\n let maxVolume = new BigNumber(0);\n\n orders.forEach(order => {\n maxVolume = BigNumber.max(maxVolume, order.volume);\n });\n\n let renderOrders: Array<{\n price: BigNumber;\n volume: BigNumber;\n sum: BigNumber;\n percent: BigNumber;\n }> = orders.map(order => {\n const { price, volume } = order;\n volumeSum = volumeSum.plus(volume);\n return {\n price: price,\n volume: volume,\n sum: volumeSum,\n percent: volume.div(maxVolume).times(100)\n };\n });\n\n if (type === SpotOrderType.Ask) renderOrders = renderOrders.reverse();\n\n return renderOrders.length > 0 ? (\n \n {renderOrders.map(({ price, volume, sum, percent }, idx) => (\n {\n type === SpotOrderType.Ask\n ? onAskOrderClick(renderOrders[idx])\n : onBidOrderClick(renderOrders[idx]);\n }}\n >\n \n {formatNumber(price, depthPriceDecimals)}\n \n \n {formatNumber(volume, baseTokenPrecision)}\n \n \n {formatNumber(sum, baseTokenPrecision)}\n \n \n ))}\n \n ) : (\n
no data
\n );\n }\n\n render() {\n const { askOrders = [], bidOrders = [], type = DepthType.All } = this.props;\n return (\n \n \n {this.renderButtonGroup()}\n {this.renderSelect()}\n \n\n {this.renderTitle()}\n\n \n {type === DepthType.All || type === DepthType.Ask\n ? this.renderOrderList(askOrders, SpotOrderType.Ask)\n : null}\n\n {this.renderPrice()}\n\n {type === DepthType.All || type === DepthType.Bid\n ? this.renderOrderList(bidOrders, SpotOrderType.Bid)\n : null}\n \n \n );\n }\n}\n",".depth-wrap {\n border: none;\n border-radius: 0;\n height: 100%;\n width: 18.75rem;\n}\n\n.depth-header {\n display: flex;\n align-content: center;\n justify-content: space-between;\n height: 46px;\n padding: 10px 1rem;\n border: none;\n}\n\n.toggle-btn {\n width: 26px;\n height: 26px;\n outline: none;\n box-shadow: none !important;\n background-repeat: no-repeat;\n background-position: center;\n background-color: transparent;\n margin-right: 6px;\n border-radius: 0 !important;\n border: none;\n &:hover {\n background-color: rgba(9, 13, 26, 1);\n }\n &.all {\n background-image: url(./images/trade-icon-all.svg);\n }\n &.bid {\n background-image: url(./images/trade-icon-sell.svg);\n }\n &.ask {\n background-image: url(./images/trade-icon-buy.svg);\n }\n}\n.toggle-btn-group {\n :global {\n .btn-check:active + .btn-primary,\n .btn-check:checked + .btn-primary,\n .btn-primary.active,\n .btn-primary:active,\n .show > .btn-primary.dropdown-toggle {\n background-color: rgba(9, 13, 26, 1);\n }\n }\n}\n.depth-select {\n :global {\n .btn {\n height: 26px;\n border-color: transparent;\n box-shadow: none !important;\n }\n .dropdown-menu {\n width: 80px;\n min-width: 80px;\n }\n }\n}\n\n.trade-list-header {\n margin-bottom: 0;\n height: 32px;\n padding: 0 1rem;\n white-space: nowrap;\n font-size: 12px !important;\n & > .title-item {\n width: 33.33%;\n color: #5f7195;\n text-align: right;\n }\n & > .title-item:first-child {\n text-align: left;\n }\n .badge {\n background-color: rgba(33, 42, 69, 1) !important;\n font-weight: 400;\n }\n}\n.trade-list-sell,\n.trade-list-buy,\n.no-data {\n display: flex;\n flex-direction: column;\n margin-bottom: 0;\n color: #f4f9ff !important;\n min-height: 300px;\n font-family: Poppins-Regular, Poppins;\n}\n.no-data {\n align-items: center;\n justify-content: center;\n color: #5f7195 !important;\n}\n.trade-list-sell {\n margin-top: auto;\n}\n.depth-body {\n padding: 0 !important;\n display: flex;\n flex-direction: column;\n}\n.depth-all .trade-list-sell {\n margin-top: 0;\n}\n\n.trade-list-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n height: 30px;\n padding: 0 1rem;\n border: none;\n background-position: 100%;\n background-repeat: no-repeat;\n color: #fff;\n border-radius: 0 !important;\n &:hover {\n background-color: rgba(37, 42, 68, 0.5) !important;\n }\n & > span {\n width: 33.33%;\n text-align: right;\n }\n .trade-list-price {\n text-align: left;\n }\n}\n.trade-list-sell {\n justify-content: flex-end;\n .trade-list-price {\n color: #ec4953;\n }\n .trade-list-item {\n background-image: linear-gradient(\n rgba(236, 73, 83, 0.1),\n rgba(236, 73, 83, 0.1)\n );\n }\n}\n.trade-list-buy {\n .trade-list-price {\n color: #0fbeaf;\n }\n .trade-list-item {\n background-image: linear-gradient(\n rgba(18, 184, 134, 0.1),\n rgba(18, 184, 134, 0.1)\n );\n }\n}\n\n.price-wrap {\n height: 36px;\n line-height: 36px;\n padding-left: 10px;\n color: #5f7195;\n .price {\n font-size: 18px;\n font-weight: 500;\n &.green {\n color: #0fbeaf;\n }\n &.red {\n color: #ec4953;\n }\n &.white {\n color: #ffffff;\n }\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { AuthBase } from '../AuthBase';\nimport {\n idlFactory as depthIDL,\n _SERVICE as DepthActor\n} from '@deland-labs/orderbook_depth_client';\nimport { CanisterError } from '../utils/exception';\nimport { parseToCommon, toBigNumber } from '../utils/helper';\nimport { MarketSetting } from './Market';\n\nexport enum DepthLevel {\n One = 1,\n Two = 2,\n Three = 3,\n Four = 4,\n Five = 5,\n Six = 6,\n Seven = 7\n}\n\nexport interface DepthItem {\n price: BigNumber;\n volume: BigNumber;\n}\n\nexport enum DepthType {\n All = 1,\n Bid = 2,\n Ask = 3\n}\n\nexport interface DepthData {\n bids: Array;\n asks: Array;\n}\n\nexport class Depth extends AuthBase {\n private baseTokenDecimals: number;\n private setting: MarketSetting;\n\n constructor(baseTokenDecimals: number, setting: MarketSetting) {\n super();\n this.baseTokenDecimals = baseTokenDecimals;\n this.setting = setting;\n }\n\n public getDepth = async (\n level: DepthLevel,\n count: number\n ): Promise => {\n const depth = await this.createDepthActor(this.setting.depthCanisterId);\n const res = await depth.get_depth(level, count);\n if ('Ok' in res) {\n return {\n bids: this.parseOriginDepth(res.Ok.bids),\n asks: this.parseOriginDepth(res.Ok.asks)\n };\n } else throw new CanisterError(res.Err);\n };\n\n /**\n * parse origin depth data to DepthItem\n * @param originData\n * @returns DepthItem[]\n */\n private parseOriginDepth = (\n originData: Array<[bigint, bigint]>\n ): Array => {\n const orders: Array = originData.map(item => {\n return {\n price: toBigNumber(item[0]).shiftedBy(-this.setting.priceDecimals),\n volume: toBigNumber(item[1]).shiftedBy(-this.baseTokenDecimals)\n };\n });\n return orders;\n };\n\n /**\n * create depth actor\n * @param depthCanisterId depth canister id\n * @param anonymous is anonymous access\n * @returns\n */\n private createDepthActor = (\n depthCanisterId: string,\n anonymous: boolean = true\n ) => {\n return this.createActor(depthCanisterId, depthIDL, anonymous);\n };\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nexports.__esModule = true;\nexports.init = exports.idlFactory = void 0;\n__exportStar(require(\"./interface\"), exports);\nvar idl_1 = require(\"./idl\");\n__createBinding(exports, idl_1, \"idlFactory\");\n__createBinding(exports, idl_1, \"init\");\n","\"use strict\";\nexports.__esModule = true;\n","\"use strict\";\nexports.__esModule = true;\nexports.init = exports.idlFactory = void 0;\nvar idlFactory = function (_a) {\n var IDL = _a.IDL;\n var CanisterNames = IDL.Variant({\n 'OrderbookDepth': IDL.Null,\n 'AmountToken': IDL.Null,\n 'OrderbookKline': IDL.Null,\n 'SELF': IDL.Null,\n 'CanisterManagement': IDL.Null,\n 'BucketManager': IDL.Null,\n 'OrderbookTradeList': IDL.Null,\n 'VolumeToken': IDL.Null,\n 'EventStorage': IDL.Null,\n 'Fusion': IDL.Null,\n 'BalanceKeeper': IDL.Null\n });\n var InitArgs = IDL.Record({\n 'dev_named_canister_ids': IDL.Vec(IDL.Tuple(CanisterNames, IDL.Principal))\n });\n var StateExportData = IDL.Record({ 'state_data': IDL.Vec(IDL.Nat8) });\n var ErrorInfo = IDL.Record({ 'code': IDL.Nat32, 'message': IDL.Text });\n var StateExportResponse = IDL.Variant({\n 'Ok': StateExportData,\n 'Err': ErrorInfo\n });\n var OrderBookDepth = IDL.Record({\n 'asks': IDL.Vec(IDL.Tuple(IDL.Nat, IDL.Nat)),\n 'bids': IDL.Vec(IDL.Tuple(IDL.Nat, IDL.Nat))\n });\n var Result = IDL.Variant({ 'Ok': OrderBookDepth, 'Err': ErrorInfo });\n var BooleanActorResponse = IDL.Variant({\n 'Ok': IDL.Bool,\n 'Err': ErrorInfo\n });\n var GetVersionResponse = IDL.Variant({\n 'Ok': IDL.Nat64,\n 'Err': ErrorInfo\n });\n return IDL.Service({\n 'export_state': IDL.Func([], [StateExportResponse], []),\n 'get_depth': IDL.Func([IDL.Nat8, IDL.Nat16], [Result], ['query']),\n 'get_reverse_depth': IDL.Func([IDL.Nat8, IDL.Nat16], [Result], ['query']),\n 'get_wasm_info': IDL.Func([], [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text))], ['query']),\n 'load_state': IDL.Func([StateExportData], [BooleanActorResponse], []),\n 'trigger_event_processing': IDL.Func([], [], ['oneway']),\n 'version': IDL.Func([], [GetVersionResponse], ['query'])\n });\n};\nexports.idlFactory = idlFactory;\nvar init = function (_a) {\n var IDL = _a.IDL;\n var CanisterNames = IDL.Variant({\n 'OrderbookDepth': IDL.Null,\n 'AmountToken': IDL.Null,\n 'OrderbookKline': IDL.Null,\n 'SELF': IDL.Null,\n 'CanisterManagement': IDL.Null,\n 'BucketManager': IDL.Null,\n 'OrderbookTradeList': IDL.Null,\n 'VolumeToken': IDL.Null,\n 'EventStorage': IDL.Null,\n 'Fusion': IDL.Null,\n 'BalanceKeeper': IDL.Null\n });\n var InitArgs = IDL.Record({\n 'dev_named_canister_ids': IDL.Vec(IDL.Tuple(CanisterNames, IDL.Principal))\n });\n return [IDL.Opt(InitArgs)];\n};\nexports.init = init;\n","import BigNumber from 'bignumber.js';\nimport { computed, IReactionDisposer, observable, reaction } from 'mobx';\nimport { DepthStore } from './Depth';\nimport { DFT, TokenInfo } from '../canister/DFT';\nimport { parseToCommon, toPrecision } from '../utils/helper';\nimport { IDisposable } from '../interface';\nimport { TradeHistoryStore } from './TradeHistory';\nimport { KLineStore } from './KLine';\nimport { Fusion, SpotOrder } from '../canister/Fusion';\nimport { Market, MarketSetting } from '../canister/Market';\nimport { TickSpaceIndex } from '../canister/KLine';\nimport { AuthBase } from '../AuthBase';\n\nexport interface TickOf24Hours {\n lastPrice: BigNumber;\n high: BigNumber;\n low: BigNumber;\n open: BigNumber;\n close: BigNumber;\n volume: BigNumber;\n change: string;\n}\n\nexport enum PriceTrend {\n Up = 'up',\n Down = 'down',\n Equal = 'equal'\n}\n\nexport interface LatestPrice {\n price: number;\n trend: PriceTrend;\n}\n\n/**\n * Orderbook market\n */\nexport class MarketStore extends AuthBase implements IDisposable {\n @observable\n marketId: string;\n\n @observable\n marketSetting: MarketSetting;\n\n @observable\n quoteToken: TokenInfo;\n\n @observable\n baseToken: TokenInfo;\n\n @observable\n tickOf24H: TickOf24Hours;\n\n @observable\n depth: DepthStore;\n\n @observable\n tradeHistory: TradeHistoryStore;\n\n @observable\n kline: KLineStore;\n\n @observable\n myOpenOrders: Array = [];\n\n private baseTokenId: string;\n private quoteTokenId: string;\n private priceDecimals: number = 32;\n private priceDecimalsShow: number = 2;\n private initialized = false;\n private marketTickTimer?: NodeJS.Timer = undefined;\n private marketTickTimeInterval: number = 1000 * 10;\n private fetchMyOpenOrderTimer?: NodeJS.Timer = undefined;\n private fetchMyOpenOrderInterval: number = 1000 * 10;\n private sessionSupervisorDisposer?: IReactionDisposer;\n private fusionActor: Fusion;\n private marketActor = new Market();\n private subNewPrice = 0;\n\n /**\n * constructor, please call initialize() before use\n * @param baseTokenId base token id\n * @param quotaTokenId quote token id\n */\n constructor(baseTokenId: string, quotaTokenId: string) {\n super();\n this.baseTokenId = baseTokenId;\n this.quoteTokenId = quotaTokenId;\n }\n\n @computed\n public get latestPrice() {\n let trend = PriceTrend.Equal;\n const latestPrice = this.tickOf24H?.lastPrice?.toNumber() || 0;\n if (this.subNewPrice > latestPrice) {\n trend = PriceTrend.Down;\n } else if (this.subNewPrice < latestPrice) {\n trend = PriceTrend.Up;\n }\n return { price: latestPrice, trend };\n }\n\n /**\n * initialize\n */\n public initialize = async () => {\n if (this.initialized) throw new Error('MarketStore has been initialized');\n this.baseToken = await new DFT(this.baseTokenId).getTokenInfo();\n this.quoteToken = await new DFT(this.quoteTokenId).getTokenInfo();\n this.marketSetting = await this.marketActor.getMarketSetting(\n this.baseTokenId,\n this.quoteTokenId\n );\n this.marketId = this.marketSetting.marketId;\n this.depth = new DepthStore(this);\n this.kline = new KLineStore(this);\n this.tradeHistory = new TradeHistoryStore(this);\n this.fusionActor = new Fusion(\n this.marketId,\n this.marketSetting.priceDecimals\n );\n if (this.marketTickTimer === undefined) {\n this.startMarketTickTimer();\n }\n console.info(`MarketStore.initialized: ${this.marketId}`);\n this.initialized = true;\n\n this.sessionSupervisorDisposer = reaction(\n () => this.initialized && this.session.isConnected,\n async connected => {\n if (connected) {\n await this.updateMyOpenOrders();\n this.startFetchMyOpenOrdersTimer();\n } else {\n this.stopFetchMyOpenOrdersTimer();\n this.myOpenOrders = [];\n }\n },\n { fireImmediately: true }\n );\n };\n\n /**\n * fetch all my open orders\n */\n public updateMyOpenOrders = async () => {\n this.checkInitialized();\n if (!this.session.isConnected) return;\n const orders = await this.fusionActor.fetchOpenOrders();\n console.info(`MarketStore.fetchOpenOrders: ${orders.length}`);\n this.myOpenOrders = orders;\n };\n\n /**\n * submit ask limit order\n * @param price price of order\n * @param volume volume of order\n * @returns\n */\n public submitAskLimitOrder = async (\n price: bigint,\n volume: bigint\n ): Promise => {\n this.checkInitialized();\n const res = await this.fusionActor.submitAskLimitOrder(price, volume);\n this.afterOrderOperation();\n return res;\n };\n\n /**\n * submit bid limit order\n * @param price price of order\n * @param volume volume of order\n * @returns\n */\n public submitBidLimitOrder = async (\n price: bigint,\n volume: bigint\n ): Promise => {\n this.checkInitialized();\n const res = await this.fusionActor.submitBidLimitOrder(price, volume);\n this.afterOrderOperation();\n return res;\n };\n\n /**\n * cancel order\n * @param orderId open order id\n * @returns {Promise}\n */\n public cancelOrder = async (orderId: bigint) => {\n this.checkInitialized();\n const res = await this.fusionActor.cancelOrder(orderId);\n this.afterOrderOperation();\n return res;\n };\n\n /**\n * cancel all orders\n * @returns {Promise}\n */\n public cancelAllOrders = async () => {\n this.checkInitialized();\n const res = await this.fusionActor.cancelAllOrders();\n this.afterOrderOperation();\n return res;\n };\n /**\n * fetch market's last 24H tick\n * @returns {Promise}\n */\n private fetchTick = async () => {\n const tick = await this.kline.fetchCurrentTick(TickSpaceIndex.OneDay);\n if (!(tick && tick.close)) {\n return;\n }\n const lastPrice = parseToCommon(\n tick.close,\n this.priceDecimals,\n this.priceDecimalsShow\n );\n console.debug(`Market.fetchLastPrice: lastPrice: ${lastPrice}`);\n const low = parseToCommon(\n tick.low,\n this.priceDecimals,\n this.priceDecimalsShow\n );\n const high = parseToCommon(\n tick.high,\n this.priceDecimals,\n this.priceDecimalsShow\n );\n const open = parseToCommon(\n tick.open,\n this.priceDecimals,\n this.priceDecimalsShow\n );\n const close = parseToCommon(\n tick.close,\n this.priceDecimals,\n this.priceDecimalsShow\n );\n const volume = parseToCommon(\n tick.volume,\n this.baseToken?.decimals,\n this.priceDecimalsShow\n );\n const change = toPrecision(\n lastPrice.minus(open).div(open).multipliedBy(100),\n 2\n ).toString();\n this.tickOf24H = { lastPrice, high, low, open, change, volume, close };\n };\n\n /**\n * order submitted/cancel hook\n */\n private afterOrderOperation = () => {\n this.stopFetchMyOpenOrdersTimer();\n this.startFetchMyOpenOrdersTimer();\n this.tradeHistory.updateUserTradeList();\n };\n\n private startMarketTickTimer = async () => {\n await this.fetchTick();\n this.fetchMyOpenOrderTimer = setInterval(() => {\n this.fetchTick();\n }, this.marketTickTimeInterval);\n };\n\n private stopMarketTickTimer = async () => {\n if (this.marketTickTimer) {\n clearInterval(this.marketTickTimer);\n this.marketTickTimer = undefined;\n }\n };\n\n private startFetchMyOpenOrdersTimer = () => {\n this.fetchMyOpenOrderTimer = setInterval(() => {\n if (!this.initialized) return;\n\n this.updateMyOpenOrders();\n }, this.fetchMyOpenOrderInterval);\n };\n\n private stopFetchMyOpenOrdersTimer = async () => {\n if (this.fetchMyOpenOrderTimer) {\n clearInterval(this.fetchMyOpenOrderTimer);\n this.fetchMyOpenOrderTimer = undefined;\n }\n };\n\n private checkInitialized = () => {\n if (!this.initialized)\n throw new Error('MarketStore has not been initialized');\n };\n\n /**\n * must be called before destroy, otherwise timer will not be cleared\n */\n dispose = (): void => {\n this.depth?.dispose();\n this.tradeHistory?.dispose();\n this.kline?.dispose();\n\n this.stopMarketTickTimer();\n this.stopFetchMyOpenOrdersTimer();\n\n if (this.sessionSupervisorDisposer) this.sessionSupervisorDisposer();\n\n this.initialized = false;\n };\n}\n","import { observable } from 'mobx';\nimport { MarketStore } from '.';\nimport { IDisposable } from '../interface';\nimport { Depth, DepthItem, DepthLevel, DepthType } from '../canister/Depth';\nimport { Fusion, SpotOrderType } from '../canister/Fusion';\nimport {\n DepthDirection,\n SwapDepth,\n SwapDepthItem\n} from '../utils/helper/converter/math';\nimport { toBigInt, toBigNumber, zero } from '../utils/helper';\nimport {\n SWAP_DEPTH_PRICE_FACTOR,\n SWAP_DEPTH_VOLUME_FACTOR\n} from '../utils/config';\nimport BigNumber from 'bignumber.js';\n\nexport class DepthStore implements IDisposable {\n @observable\n public type: DepthType = DepthType.All;\n\n @observable\n public level: DepthLevel = DepthLevel.One;\n\n @observable\n public count: number = 10;\n\n @observable\n public bidOrders: Array = [];\n\n @observable\n askOrders: Array = [];\n\n private timer?: NodeJS.Timer = undefined;\n private fetchTimeInterval: number = 1000 * 10;\n private marketStore: MarketStore;\n private depthActor: Depth;\n private fusionActor: Fusion;\n\n constructor(marketStore: MarketStore) {\n this.marketStore = marketStore;\n this.level = this.marketStore.marketSetting.defaultDepthLevel;\n this.depthActor = new Depth(\n this.marketStore.baseToken.decimals,\n this.marketStore.marketSetting\n );\n this.fusionActor = new Fusion(\n this.marketStore.marketSetting.marketId,\n this.marketStore.marketSetting.priceDecimals\n );\n this.fetchDepth();\n this.startFetchTimer();\n }\n\n /**\n * switch depth type\n * @param type\n */\n switchType = (type: DepthType) => {\n if (!type) return;\n this.type = type;\n switch (type) {\n case DepthType.Bid:\n this.count = 20;\n break;\n case DepthType.Ask:\n this.count = 20;\n break;\n case DepthType.All:\n this.count = 10;\n break;\n default:\n this.count = 10;\n break;\n }\n\n console.debug(\n `Depth.switchType: switch type to ${type.toString()} , \n depth count ${this.count}`\n );\n this.fetchDepth();\n this.restartFetchTimer();\n };\n\n /**\n * switch depth level\n * @param newLevel\n */\n switchLevel = (newLevel: DepthLevel) => {\n if (!newLevel) return;\n\n this.level = DepthLevel[newLevel.toString()];\n this.fetchDepth();\n this.restartFetchTimer();\n console.debug(`Depth.switchLevel: switch level to ${this.level} `);\n };\n\n private startFetchTimer = () => {\n this.timer = setInterval(this.fetchDepth, this.fetchTimeInterval);\n };\n\n private stopFetchTimer = () => {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n };\n\n private restartFetchTimer = () => {\n this.stopFetchTimer();\n this.startFetchTimer();\n };\n\n /**\n * fetch depth data\n */\n private fetchDepth = async () => {\n const { baseToken, quoteToken, marketSetting } = this.marketStore;\n const depthTask = this.depthActor.getDepth(this.level, this.count);\n const swapTask = this.fusionActor.fetchLiquidityInfo();\n\n const [depth, swap] = await Promise.all([depthTask, swapTask]);\n console.debug(`Depth.fetchDepth: swap liquidity ${JSON.stringify(swap)}`);\n const swapDepth = new SwapDepth({\n liquidity: toBigInt(swap.poolLP),\n volume: toBigInt(swap.poolVolume),\n amount: toBigInt(swap.poolAmount),\n decimals: {\n volume: baseToken.decimals,\n amount: quoteToken.decimals,\n price: marketSetting.priceDecimals\n },\n priceFixed: marketSetting.orderPricePrecision\n });\n\n const miniPrice = marketSetting.depthLevels[this.level - 1];\n const miniVolume = toBigNumber(1)\n .shiftedBy(-marketSetting.depthVolumePrecision)\n .times(SWAP_DEPTH_VOLUME_FACTOR);\n\n const bidOrderOption = {\n direction: DepthDirection.Bid,\n deltaP: toBigNumber(miniPrice).times(SWAP_DEPTH_PRICE_FACTOR),\n maxCount: this.count,\n minVolume: miniVolume,\n\n latestPrice: toBigNumber(this.marketStore?.latestPrice?.price || 0)\n };\n console.debug(\n `Depth.fetchDepth: bidOrderOption ${JSON.stringify(bidOrderOption)}`\n );\n const mapBidsOrders = swapDepth.getDepth(bidOrderOption).depthItems;\n console.debug(`Depth.fetchDepth: mapBidsOrders ${mapBidsOrders.length}`);\n const askOrderOption = {\n direction: DepthDirection.Ask,\n deltaP: toBigNumber(miniPrice).times(SWAP_DEPTH_PRICE_FACTOR),\n maxCount: this.count,\n minVolume: miniVolume,\n latestPrice: toBigNumber(this.marketStore?.latestPrice?.price || 0)\n };\n console.debug(\n `Depth.fetchDepth: askOrderOption ${JSON.stringify(askOrderOption)}`\n );\n const mapAsksOrders = swapDepth.getDepth(askOrderOption).depthItems;\n console.debug(`Depth.fetchDepth: mapAsksOrders ${mapAsksOrders.length}`);\n\n this.bidOrders = this.mergeOrders(\n depth.bids,\n mapBidsOrders,\n SpotOrderType.Bid\n );\n this.askOrders = this.mergeOrders(\n depth.asks,\n mapAsksOrders,\n SpotOrderType.Ask\n );\n\n console.debug(`Depth.fetchDepth: fetch depth success`);\n };\n\n private mergeOrders = (\n ordersA: Array,\n ordersB: Array,\n type: SpotOrderType\n ) => {\n const orders = ordersA.concat(ordersB);\n const map = new Map();\n orders.forEach(order => {\n const key = order.price.toString();\n if (map.has(key)) {\n const oldOrder = map.get(key);\n oldOrder.volume = oldOrder.volume.plus(order.volume);\n } else {\n map.set(key, order);\n }\n });\n const returnOrders = Array.from(map.values());\n const returnCount = Math.min(returnOrders.length, this.count);\n switch (type) {\n case SpotOrderType.Bid: {\n return returnOrders\n .sort((a, b) => b.price.comparedTo(a.price))\n .slice(0, returnCount);\n }\n case SpotOrderType.Ask:\n return returnOrders\n .sort((a, b) => a.price.comparedTo(b.price))\n .slice(0, returnCount);\n }\n };\n\n /**\n * must be called before destroy,\n * otherwise timer will not be cleared\n */\n dispose = () => this.stopFetchTimer;\n}\n","import BigNumber from 'bignumber.js';\nimport { parseToCommon, parseToOrigin, toBigNumber } from './unit';\n\nexport class Decimals {\n volume: number;\n amount: number;\n price: number;\n}\n\nexport enum DepthDirection {\n Bid = 'Bid',\n Ask = 'Ask'\n}\n\nexport class SwapDepthItem {\n public price: BigNumber;\n public volume: BigNumber;\n constructor(price: BigNumber, volume: BigNumber) {\n this.price = price;\n this.volume = volume;\n }\n}\nexport class SwapDepthCollection {\n direction: DepthDirection;\n private items: SwapDepthItem[];\n constructor(direction: DepthDirection, items: SwapDepthItem[]) {\n this.direction = direction;\n switch (direction) {\n case DepthDirection.Bid:\n this.items = items.sort((a, b) => b.price.comparedTo(a.price));\n break;\n case DepthDirection.Ask:\n this.items = items.sort((a, b) => a.price.comparedTo(b.price));\n break;\n }\n }\n public get depthItems(): SwapDepthItem[] {\n return this.items;\n }\n\n public get depthDict(): { [key: string]: SwapDepthItem } {\n const dict = {};\n this.items.forEach(item => {\n dict[item.price.toString()] = item;\n });\n return dict;\n }\n\n public toString(): string {\n let result = `direction: ${this.direction}`;\n this.items.forEach(item => {\n result += `\\nprice: ${item.price} volume: ${item.volume}`;\n });\n return result;\n }\n}\n\nexport class SwapDepth {\n k: BigNumber;\n volume: BigNumber;\n amount: BigNumber;\n decimals: Decimals;\n p0: BigNumber;\n constructor(options: {\n liquidity: bigint;\n volume: bigint;\n amount: bigint;\n decimals: Decimals;\n priceFixed: number;\n }) {\n this.k = toBigNumber(options.liquidity)\n .pow(2)\n .shiftedBy(-(options.decimals.amount + options.decimals.volume));\n this.volume = toBigNumber(options.volume).shiftedBy(\n -options.decimals.volume\n );\n this.amount = toBigNumber(options.amount).shiftedBy(\n -options.decimals.amount\n );\n const a = toBigNumber(options.amount);\n const b = toBigNumber(options.volume);\n this.p0 = new BigNumber(a.div(b).decimalPlaces(options.priceFixed));\n //console.log(this.p0)\n this.decimals = options.decimals;\n //console.log(this)\n }\n\n public getDepth(options: {\n direction: DepthDirection;\n deltaP: BigNumber;\n maxCount: number;\n minVolume?: BigNumber;\n latestPrice?: BigNumber;\n }): SwapDepthCollection {\n const { direction, deltaP, maxCount, minVolume, latestPrice } = options;\n let items = [];\n let pLast = latestPrice.gt(0) ? latestPrice : this.p0;\n console.debug(\n `pLast: ${pLast.toString()} , latestPrice ${latestPrice.toString()}`\n );\n let volumeLast = new BigNumber(1);\n let index = 0;\n while (index < maxCount && volumeLast.gt(0) && pLast.minus(deltaP).gt(0)) {\n index++;\n const getPriceNow = () => {\n if (direction === DepthDirection.Bid) {\n return pLast.minus(deltaP);\n } else {\n return pLast.plus(deltaP);\n }\n };\n const pNow = getPriceNow();\n const pMin = BigNumber.max(pNow, pLast);\n const pMax = BigNumber.min(pNow, pLast);\n pLast = pNow;\n\n const b = this.k.div(pMin).squareRoot();\n const a = this.k.div(pMax).squareRoot();\n const volumeNow = a.minus(b);\n if (volumeNow.lte(0)) {\n volumeLast = new BigNumber(0);\n } else {\n volumeLast = volumeNow;\n if (!minVolume || volumeNow.gt(minVolume)) {\n items.push(new SwapDepthItem(pNow, volumeNow));\n }\n }\n }\n return new SwapDepthCollection(direction, items);\n }\n}\n","import { IReactionDisposer, observable, reaction } from 'mobx';\nimport { MarketStore } from '.';\nimport { AuthBase } from '../AuthBase';\nimport { SpotTradeRecord, TradeHistory } from '../canister/TradeHistory';\nimport { IDisposable } from '../interface';\n\nexport class TradeHistoryStore extends AuthBase implements IDisposable {\n @observable\n tradeHistoryList: Array = [];\n private marketStore: MarketStore;\n private tradeHistoryActor: TradeHistory;\n private timer?: NodeJS.Timer = undefined;\n private fetchTimeInterval: number = 1000 * 10;\n private maxTradeHistoryCount = 100;\n private sessionSupervisorDisposer?: IReactionDisposer;\n\n constructor(marketStore: MarketStore) {\n super();\n this.marketStore = marketStore;\n const setting = marketStore.marketSetting;\n this.tradeHistoryActor = new TradeHistory(\n setting.tradeHistoryCanisterId,\n marketStore.baseToken.decimals,\n marketStore.quoteToken.decimals,\n setting.priceDecimals\n );\n this.sessionSupervisorDisposer = reaction(\n () => this.session.isConnected,\n async connected => {\n if (connected) {\n await this.updateUserTradeList();\n this.startFetchMyTradeHistoryTimer();\n } else {\n this.stopFetchMyTradeHistoryTimer();\n this.tradeHistoryList = [];\n }\n },\n { fireImmediately: true }\n );\n }\n\n public updateUserTradeList = async () => {\n this.tradeHistoryList = await this.tradeHistoryActor.fetchUserTradeList(\n 0,\n this.maxTradeHistoryCount\n );\n };\n\n private startFetchMyTradeHistoryTimer = () => {\n this.timer = setInterval(() => {\n if (!this.session.isConnected) return;\n this.updateUserTradeList();\n }, this.fetchTimeInterval);\n };\n\n private stopFetchMyTradeHistoryTimer = () => {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n };\n\n dispose = () => {\n this.stopFetchMyTradeHistoryTimer();\n if (this.sessionSupervisorDisposer) this.sessionSupervisorDisposer();\n };\n}\n","import { AuthBase } from '../AuthBase';\nimport {\n TradeRecord,\n idlFactory as tradeHistoryIDL,\n _SERVICE as TradeHistoryActor\n} from '@deland-labs/orderbook_trade_list_client';\nimport { executeWithLogging } from '../utils/errorLogger';\nimport { CanisterError } from '../utils/exception';\nimport { parseToCommon } from '../utils/helper';\nimport { SpotOrderType } from './Fusion';\n\nexport interface SpotTradeRecord {\n type: SpotOrderType;\n time: number;\n volume: number;\n price: number;\n}\n\nexport class TradeHistory extends AuthBase {\n private tradeHistoryCanisterId: string;\n private baseTokenDecimals: number;\n private quoteTokenDecimals: number;\n private priceDecimals: number;\n constructor(\n tradeHistoryCanisterId: string,\n baseTokenDecimals: number,\n quoteTokenDecimals: number,\n priceDecimals: number\n ) {\n super();\n this.tradeHistoryCanisterId = tradeHistoryCanisterId;\n this.baseTokenDecimals = baseTokenDecimals;\n this.quoteTokenDecimals = quoteTokenDecimals;\n this.priceDecimals = priceDecimals;\n }\n /**\n * fetch my trade history\n * @returns\n */\n public fetchUserTradeList = (\n offset: number,\n limit: number\n ): Promise> => {\n return executeWithLogging(async () => {\n const tradeHistoryActor = await this.createTradeHistoryActor(\n this.tradeHistoryCanisterId,\n false\n );\n const res = await tradeHistoryActor.get_user_trade_list(offset, limit);\n if ('Ok' in res) return res.Ok.map(this.parseTrade);\n else throw new CanisterError(res.Err);\n });\n };\n\n /**\n * parse origin trade to spot target trade\n * @param trade trade record\n * @returns\n */\n private parseTrade = (trade: TradeRecord): SpotTradeRecord => {\n return {\n type:\n 'Bid' in trade.order_direction ? SpotOrderType.Bid : SpotOrderType.Ask,\n time: parseToCommon(trade.time).toNumber(),\n volume: parseToCommon(trade.volume, this.baseTokenDecimals).toNumber(),\n price: parseToCommon(trade.price, this.priceDecimals).toNumber()\n };\n };\n\n /**\n * create trade history actor\n * @param tradeHistoryCanisterId trade history canister id\n * @param anonymous is anonymous access\n * @returns\n */\n private createTradeHistoryActor = (\n tradeHistoryCanisterId: string,\n anonymous: boolean = true\n ) => {\n return this.createActor(\n tradeHistoryCanisterId,\n tradeHistoryIDL,\n anonymous\n );\n };\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nexports.__esModule = true;\nexports.init = exports.idlFactory = void 0;\n__exportStar(require(\"./interface\"), exports);\nvar idl_1 = require(\"./idl\");\n__createBinding(exports, idl_1, \"idlFactory\");\n__createBinding(exports, idl_1, \"init\");\n","\"use strict\";\nexports.__esModule = true;\n","\"use strict\";\nexports.__esModule = true;\nexports.init = exports.idlFactory = void 0;\nvar idlFactory = function (_a) {\n var IDL = _a.IDL;\n var CanisterNames = IDL.Variant({\n 'OrderbookDepth': IDL.Null,\n 'AmountToken': IDL.Null,\n 'OrderbookKline': IDL.Null,\n 'SELF': IDL.Null,\n 'CanisterManagement': IDL.Null,\n 'BucketManager': IDL.Null,\n 'OrderbookTradeList': IDL.Null,\n 'VolumeToken': IDL.Null,\n 'EventStorage': IDL.Null,\n 'Fusion': IDL.Null,\n 'BalanceKeeper': IDL.Null\n });\n var InitArgs = IDL.Record({\n 'dev_named_canister_ids': IDL.Vec(IDL.Tuple(CanisterNames, IDL.Principal))\n });\n var StateExportData = IDL.Record({ 'state_data': IDL.Vec(IDL.Nat8) });\n var ErrorInfo = IDL.Record({ 'code': IDL.Nat32, 'message': IDL.Text });\n var StateExportResponse = IDL.Variant({\n 'Ok': StateExportData,\n 'Err': ErrorInfo\n });\n var OrderDirection = IDL.Variant({ 'Ask': IDL.Null, 'Bid': IDL.Null });\n var TradeRecord = IDL.Record({\n 'order_direction': OrderDirection,\n 'time': IDL.Nat64,\n 'volume': IDL.Nat,\n 'price': IDL.Nat\n });\n var Result = IDL.Variant({\n 'Ok': IDL.Vec(TradeRecord),\n 'Err': ErrorInfo\n });\n var BooleanActorResponse = IDL.Variant({\n 'Ok': IDL.Bool,\n 'Err': ErrorInfo\n });\n var GetVersionResponse = IDL.Variant({\n 'Ok': IDL.Nat64,\n 'Err': ErrorInfo\n });\n return IDL.Service({\n 'export_state': IDL.Func([], [StateExportResponse], []),\n 'get_trade_list': IDL.Func([IDL.Nat32, IDL.Nat32], [Result], ['query']),\n 'get_user_trade_list': IDL.Func([IDL.Nat32, IDL.Nat32], [Result], ['query']),\n 'get_wasm_info': IDL.Func([], [IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text))], ['query']),\n 'load_state': IDL.Func([StateExportData], [BooleanActorResponse], []),\n 'trigger_event_processing': IDL.Func([], [], ['oneway']),\n 'version': IDL.Func([], [GetVersionResponse], ['query'])\n });\n};\nexports.idlFactory = idlFactory;\nvar init = function (_a) {\n var IDL = _a.IDL;\n var CanisterNames = IDL.Variant({\n 'OrderbookDepth': IDL.Null,\n 'AmountToken': IDL.Null,\n 'OrderbookKline': IDL.Null,\n 'SELF': IDL.Null,\n 'CanisterManagement': IDL.Null,\n 'BucketManager': IDL.Null,\n 'OrderbookTradeList': IDL.Null,\n 'VolumeToken': IDL.Null,\n 'EventStorage': IDL.Null,\n 'Fusion': IDL.Null,\n 'BalanceKeeper': IDL.Null\n });\n var InitArgs = IDL.Record({\n 'dev_named_canister_ids': IDL.Vec(IDL.Tuple(CanisterNames, IDL.Principal))\n });\n return [IDL.Opt(InitArgs)];\n};\nexports.init = init;\n","import { observable } from 'mobx';\nimport { MarketStore } from '.';\nimport { KLine, Tick, TickSpaceIndex } from '../canister/KLine';\nimport { IDisposable } from '../interface';\n\n/**\n * Market Kline\n */\nexport class KLineStore implements IDisposable {\n @observable\n ticks: Array = [];\n\n @observable\n tickSpaceIndex: TickSpaceIndex = TickSpaceIndex.FifteenMinutes;\n\n private marketStore: MarketStore;\n private klineActor: KLine;\n private timer?: NodeJS.Timer;\n private fetchTimeInterval: number = 10 * 1000;\n\n constructor(marketStore: MarketStore) {\n this.marketStore = marketStore;\n this.klineActor = new KLine(this.marketStore.marketSetting.klineCanisterId);\n this.tickSpaceIndex = TickSpaceIndex.FifteenMinutes;\n // this.fetchTicks();\n // this.startFetchTimer();\n }\n\n /**\n * switch the kline tick space\n * @param tickSpaceIndex\n */\n public switchTickSpace(tickSpaceIndex: TickSpaceIndex) {\n this.tickSpaceIndex = tickSpaceIndex;\n this.fetchTicks();\n this.restartFetchTimer();\n }\n\n private startFetchTimer() {\n this.timer = setInterval(this.updateTicks, this.fetchTimeInterval);\n }\n\n private stopFetchTimer = () => {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n };\n\n private restartFetchTimer = () => {\n this.stopFetchTimer();\n this.startFetchTimer();\n };\n\n /**\n * Update ticks, fetch new ticks if needed\n */\n private updateTicks = async () => {\n if (this.ticks.length === 0) {\n this.ticks = await this.fetchTicks();\n return;\n }\n\n const currentTick = await this.fetchCurrentTick(this.tickSpaceIndex);\n\n if (currentTick) {\n // if the lask tick is the current tick, replace it\n if (\n this.ticks[this.ticks.length - 1].tickIndex === currentTick.tickIndex\n ) {\n console.debug(`replace tick ${currentTick.tickIndex}`, currentTick);\n this.ticks[this.ticks.length - 1] = currentTick;\n }\n // if the current tick is the next tick, add it to the end\n else if (\n this.ticks[this.ticks.length - 1].tickIndex ===\n currentTick.tickIndex - 1\n ) {\n console.debug(\n 'KLine.updateTicks: current tick is the next tick ',\n currentTick\n );\n this.ticks.push(currentTick);\n }\n // maybe something wrong, reload the ticks\n else {\n console.warn(\n 'KLine.updateTicks:maybe something wrong, reload the ticks'\n );\n this.ticks = await this.fetchTicks();\n }\n }\n };\n\n /**\n * fetch ticks\n * @returns {Promise>}\n */\n private fetchTicks(): Promise> {\n const offset = 0;\n const limit = 1000;\n return this.klineActor.fetchTicks(this.tickSpaceIndex, offset, limit);\n }\n\n /**\n * get the current tick\n * @returns {Promise}\n */\n public fetchCurrentTick(\n tickSpace: TickSpaceIndex\n ): Promise {\n return this.klineActor.fetchCurrentTick(tickSpace);\n }\n /**\n * must be called before destroy\n */\n dispose = () => this.stopFetchTimer;\n}\n","import { FC } from 'react';\nimport { faStar } from '@fortawesome/free-solid-svg-icons';\n\nimport { IconButton } from '../../../component/IconButton';\nimport { IndexNumber } from '../../../component/IndexNumber';\nimport {\n formatNumber,\n priceFormatter\n} from '../../../model/utils/helper/formatter';\nimport classNames from 'classnames';\nimport BigNumber from 'bignumber.js';\nimport { zero } from '../../../model/utils/helper';\nimport * as styles from './index.module.less';\n\nexport interface AssetIndexProps {\n className?: string;\n baseTokenSymbol: string;\n baseTokenName: string;\n quoteTokenSymbol: string;\n fiatPrice: BigNumber;\n fiatCurrency: string;\n lastPrice: BigNumber;\n open: BigNumber;\n high: BigNumber;\n low: BigNumber;\n close: BigNumber;\n volume: BigNumber;\n}\n\nconst bnSafe = (bn?: BigNumber): BigNumber => {\n return !bn || bn.isNaN() ? zero : bn;\n};\nexport const AssetIndex: FC = props => {\n const {\n className,\n baseTokenSymbol = '',\n baseTokenName = '',\n quoteTokenSymbol = '',\n fiatPrice = zero,\n fiatCurrency = 'USD'\n } = props;\n const lastPrice = bnSafe(props?.lastPrice);\n const open = bnSafe(props?.open);\n const high = bnSafe(props?.high);\n const low = bnSafe(props?.low);\n const close = bnSafe(props?.close);\n const volume = bnSafe(props?.volume);\n const changed = open.eq(zero)\n ? zero\n : close.minus(open).div(open).multipliedBy(100);\n return (\n
    \n
  • \n

    \n {baseTokenSymbol}/{quoteTokenSymbol}\n \n

    \n {baseTokenName}\n
  • \n
  • \n \n
  • \n
  • \n Fiat Price\n
    \n {priceFormatter.format(fiatPrice.toNumber())} {fiatCurrency}\n
    \n
  • \n
  • \n Change\n
    \n (\n )\n
    \n
  • \n
  • \n 24H High\n
    \n {priceFormatter.format(high.toNumber())}\n
    \n
  • \n
  • \n 24H Low\n
    \n {priceFormatter.format(low.toNumber())}\n
    \n
  • \n
  • \n 24H Vol\n
    \n {formatNumber(volume.toNumber())} {baseTokenSymbol}\n
    \n
  • \n
\n );\n};\n","import { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faCaretDown,\n faCaretUp,\n faMinus\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { priceFormatter } from '../model/utils/helper/formatter/numberFormatter';\n\nexport interface IndexNumberProps {\n showIcon?: boolean;\n value: number | string;\n}\n\nexport const IndexNumber: FC = ({ value, showIcon }) => {\n const num = typeof value === 'number' ? value : parseFloat(value);\n\n const isGrow = num > 0,\n isSame = !num;\n\n value = num + '' === value + '' ? priceFormatter.format(num) : value;\n\n return (\n \n {showIcon && (\n \n )}\n {value}\n \n );\n};\n",".asset-index-wrap{\n height: 46px;\n display: flex;\n align-items: center;\n list-style: none;\n padding: 0;\n margin: 0;\n border-bottom: 1px solid #262d40;\n & > li{\n padding: 0 12px;\n white-space: nowrap;\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: 100%;\n border-right: 1px solid #262d40;\n &:first-child{\n padding: 0 1rem 0 1.25rem;\n .btn{padding: 0 !important;margin-left: 10px;}\n }\n &:last-child{\n border:none;\n }\n }\n .symbol{\n font-size: 14px;\n }\n}\n","import classNames from 'classnames';\nimport { IReactionDisposer, observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { PureComponent } from 'react';\nimport {\n Badge,\n Button,\n ToggleButton,\n ButtonGroup,\n InputGroup,\n Form,\n Row,\n Tab,\n Tabs,\n Spinner\n} from 'react-bootstrap';\nimport BigNumber from 'bignumber.js';\n\nimport { toastStore } from '../../../component/Toast';\nimport { RangeInput } from '../../../component/RangeInput';\nimport { ChooseWallet } from '../../../component/ChooseWallet';\nimport * as style from './index.module.less';\nimport session from '../../../model/Session';\nimport {\n formatNumber,\n getPrecision,\n parseToCommon,\n parseToOrigin,\n toBigInt,\n toBigNumber,\n toPrecision,\n zero\n} from '../../../model/utils/helper';\nimport { DFT, TokenInfo } from '../../../model/canister/DFT';\nimport { DepthItem } from '../../../model/canister/Depth';\nimport { SpotOrderType } from '../../../model/canister/Fusion';\nimport { DEFAULT_APPROVE_AMOUNT } from '../../../model/utils/config';\nimport { CanisterError } from '../../../model/utils/exception';\n\nexport interface TradeFormProps {\n className?: string;\n marketId: string;\n priceDecimals?: number;\n bidOrderDepthClickItem?: DepthItem;\n askOrderDepthClickItem?: DepthItem;\n orderVolumePrecision?: number;\n orderPricePrecision?: number;\n maxAskPriceLimit?: number;\n maxBidPriceLimit?: number;\n baseToken?: TokenInfo;\n quoteToken?: TokenInfo;\n baseTokenPrecision?: number;\n quoteTokenPrecision?: number;\n latestPrice?: number;\n onAskOrderSubmitted?: (price: bigint, volume: bigint) => Promise;\n onBidOrderSubmitted?: (price: bigint, volume: bigint) => Promise;\n}\n\ninterface ActionState {\n approvedAmount: BigNumber;\n submitting: boolean;\n input: ActionInput;\n validation: ActionValidation;\n}\n\nconst defaultActionState: ActionState = {\n approvedAmount: zero,\n submitting: false,\n input: {\n price: zero,\n pricePrecision: 0,\n amount: zero,\n amountPrecision: 0,\n percent: 0,\n total: new BigNumber(0)\n },\n validation: {\n priceValid: true,\n priceInvalidMsg: '',\n amountValid: true,\n amountInvalidMsg: ''\n }\n};\ninterface ActionInput {\n price: BigNumber;\n pricePrecision: number;\n amount: BigNumber;\n amountPrecision: number;\n percent: number;\n total: BigNumber;\n}\n\ninterface ActionValidation {\n priceValid: boolean;\n priceInvalidMsg: string;\n amountValid: boolean;\n amountInvalidMsg: string;\n}\n\n@observer\nexport class TradeForm extends PureComponent {\n @observable\n baseTokenBalance = new BigNumber(0);\n\n @observable\n quoteTokenBalance = new BigNumber(0);\n\n @observable\n bidState = defaultActionState;\n\n @observable\n askState = defaultActionState;\n\n private updateBalanceTimer?: NodeJS.Timer;\n private baseTokenActor: DFT;\n private quoteTokenActor: DFT;\n private updateBalanceInterval = 10 * 1000;\n private activeIDisposers: IReactionDisposer[] = [];\n\n /**\n * trade form input price changed\n */\n onTradeFormPriceChanged = (price: BigNumber, type: SpotOrderType) => {\n if (this.checkPricePrecision(price))\n switch (type) {\n case SpotOrderType.Bid:\n return this.onBidPriceChanged(price);\n case SpotOrderType.Ask:\n return this.onAskPriceChanged(price);\n }\n };\n\n /**\n * trade form input amount changed\n */\n onTradeFormAmountChanged = (amount: BigNumber, type: SpotOrderType) => {\n if (this.checkAmountPrecision(amount))\n switch (type) {\n case SpotOrderType.Bid:\n return this.onBidAmountChanged(amount);\n case SpotOrderType.Ask:\n return this.onAskAmountChanged(amount);\n }\n };\n\n /**\n * trade form input percent changed\n *\n * @param percent the percent value of the slider\n */\n onTradeFormSliderPercentChanged = (percent: number, type: SpotOrderType) => {\n switch (type) {\n case SpotOrderType.Bid:\n return this.onBidSliderPercentChanged(percent);\n case SpotOrderType.Ask:\n return this.onAskSliderPercentChanged(percent);\n }\n };\n\n /**\n * submit trade action\n */\n onTradeFormSubmit = (type: SpotOrderType) => {\n switch (type) {\n case SpotOrderType.Bid:\n return this.onBidOrderSubmitted();\n case SpotOrderType.Ask:\n return this.onAskOrderSubmitted();\n }\n };\n\n /**\n * Regularly update user's balance\n */\n updateTokenBalances = async () => {\n const userAddress = session?.walletAuth?.principal,\n { baseToken, quoteToken } = this.props;\n\n const baseTokenDecimals = baseToken?.decimals || 0;\n const quoteTokenDecimals = quoteToken?.decimals || 0;\n\n if (!userAddress) return;\n\n const baseRes = await this.baseTokenActor.balanceOf(userAddress);\n\n this.baseTokenBalance = parseToCommon(baseRes.balance, baseTokenDecimals);\n\n const quoteRes = await this.quoteTokenActor.balanceOf(userAddress);\n\n this.quoteTokenBalance = parseToCommon(\n quoteRes.balance,\n quoteTokenDecimals\n );\n console.info(\n `baseTokenBalance: ${this.baseTokenBalance}, quoteTokenBalance: ${this.quoteTokenBalance}`\n );\n };\n\n /**\n * Regularly update user's allowances\n */\n updateTokenAllowances = async () => {\n const userAddress = session.walletAuth?.principal;\n const { marketId, baseToken, quoteToken } = this.props;\n\n if (!userAddress || !marketId) return;\n\n const baseAllowance = await this.baseTokenActor.getTokenAllowance(\n userAddress,\n marketId\n );\n this.askState.approvedAmount = toBigNumber(baseAllowance).shiftedBy(\n -baseToken.decimals\n );\n const quoteAllowance = await this.quoteTokenActor.getTokenAllowance(\n userAddress,\n marketId\n );\n this.bidState.approvedAmount = toBigNumber(quoteAllowance).shiftedBy(\n -quoteToken.decimals\n );\n\n console.info(\n `base token allowance: ${this.bidState.approvedAmount}, quote token balance: ${this.askState.approvedAmount}`\n );\n };\n\n /**\n * call updateTokenBalances & updateTokenAllowances\n */\n startTimer = () => {\n this.updateBalanceTimer = setInterval(() => {\n this.updateTokenBalances();\n this.updateTokenAllowances();\n }, this.updateBalanceInterval);\n };\n\n /**\n * should clear the timer when component unmount\n */\n stopTimer = () => {\n if (this.updateBalanceTimer) {\n clearInterval(this.updateBalanceTimer);\n this.updateBalanceTimer = undefined;\n }\n };\n\n /**\n * stop & start\n */\n restartTimer = () => {\n this.stopTimer();\n this.startTimer();\n };\n\n /**\n * 1. restart balances fetching timer when token info changed\n * 2. update trade form price when depth order clicked\n */\n async componentDidMount() {\n const updateBalancesReactionDisposer = reaction(\n () => (this.props.baseToken, this.props.quoteToken),\n async (baseToken, quoteToken) => {\n if (!baseToken || !quoteToken) return;\n this.baseTokenActor = new DFT(this.props.baseToken.id);\n this.quoteTokenActor = new DFT(this.props.quoteToken.id);\n await this.updateTokenBalances();\n await this.updateTokenAllowances();\n this.restartTimer();\n },\n { fireImmediately: true }\n );\n this.activeIDisposers.push(updateBalancesReactionDisposer);\n\n const bidOrderDepthClickItemDisposer = reaction(\n () => this.props.bidOrderDepthClickItem,\n item => {\n if (!item) return;\n const price = Number(item.price);\n const priceBN = new BigNumber(price);\n this.bidState.input.price = priceBN;\n this.askState.input.price = priceBN;\n this.bidState.input.pricePrecision = this.props.orderPricePrecision;\n this.askState.input.pricePrecision = this.props.orderPricePrecision;\n this.onTradeFormPriceChanged(priceBN, SpotOrderType.Bid);\n this.onTradeFormPriceChanged(priceBN, SpotOrderType.Ask);\n console.info('this.bidState.input.price', Number(item.price));\n }\n );\n this.activeIDisposers.push(bidOrderDepthClickItemDisposer);\n\n const askOrderDepthClickItemDisposer = reaction(\n () => this.props.askOrderDepthClickItem,\n item => {\n if (!item) return;\n const price = Number(item.price);\n const priceBN = new BigNumber(price);\n this.bidState.input.price = priceBN;\n this.askState.input.price = priceBN;\n this.bidState.input.pricePrecision = this.props.orderPricePrecision;\n this.askState.input.pricePrecision = this.props.orderPricePrecision;\n this.onTradeFormPriceChanged(priceBN, SpotOrderType.Bid);\n this.onTradeFormPriceChanged(priceBN, SpotOrderType.Ask);\n console.info('this.sellState.input.price', Number(item.price));\n }\n );\n this.activeIDisposers.push(askOrderDepthClickItemDisposer);\n }\n\n /**\n * clear all disposers and stop timer (which can not auto-GC when component unmount)\n */\n componentWillUnmount() {\n this.stopTimer();\n\n for (const disposer of this.activeIDisposers) disposer();\n }\n\n /**\n * on bid order form price change\n */\n onBidPriceChanged = (price: BigNumber) => {\n console.debug(`onBidPriceChanged ${price}`);\n const { input } = this.bidState;\n const { orderVolumePrecision = 2 } = this.props;\n const { quoteTokenBalance = zero } = this;\n\n this.bidState.input.price = price;\n this.validateBidPrice(price);\n\n if (!input.amount || input.amount.isNaN()) return;\n\n if (price.isNaN()) {\n this.bidState.input.total = zero;\n this.bidState.input.percent = 0;\n return;\n }\n\n this.bidState.input.total = toPrecision(\n new BigNumber(input.amount).multipliedBy(price),\n orderVolumePrecision\n );\n const percent = this.bidState.input.total\n .div(quoteTokenBalance)\n .multipliedBy(100);\n this.bidState.input.percent = percent.isNaN()\n ? 0\n : Math.min(percent.toNumber(), 100);\n };\n\n /**\n * validate bid price\n *\n * @returns the price is valid or not\n */\n validateBidPrice = (price: BigNumber) => {\n const { maxBidPriceLimit = 1.5, latestPrice = 0 } = this.props;\n const bnLastPrice = new BigNumber(latestPrice);\n\n if (price.lte(0)) {\n this.bidState.validation.priceValid = false;\n this.bidState.validation.priceInvalidMsg = `Buy price cannot be 0`;\n console.debug('Buy price cannot be 0');\n return false;\n }\n\n if (\n !bnLastPrice.eq(0) &&\n maxBidPriceLimit &&\n bnLastPrice.multipliedBy(maxBidPriceLimit).lt(price)\n ) {\n this.bidState.validation.priceValid = false;\n\n const percent = new BigNumber(maxBidPriceLimit)\n .multipliedBy(100)\n .toFixed(2);\n this.bidState.validation.priceInvalidMsg = `Buy price cannot be more than ${percent}% of latest price`;\n\n console.debug(\n `Buy price cannot be more than ${percent} % of latest price( ${bnLastPrice})`\n );\n return false;\n }\n\n this.bidState.validation.priceValid = true;\n this.bidState.validation.priceInvalidMsg = '';\n return true;\n };\n\n /**\n * on ask order form price change\n */\n onAskPriceChanged = (price: BigNumber) => {\n console.debug('onAskPriceChanged', price);\n const { input } = this.askState;\n const { orderVolumePrecision = 2 } = this.props;\n\n this.askState.input.price = price;\n this.validateAskPrice(price);\n\n if (!input.amount || input.amount.isNaN()) return;\n\n if (price.isNaN()) {\n this.askState.input.total = zero;\n return;\n }\n\n this.askState.input.total = toPrecision(\n new BigNumber(input.amount).multipliedBy(price),\n orderVolumePrecision\n );\n };\n\n /**\n * validate ask price\n *\n * @returns the price is valid or not\n */\n validateAskPrice = (price: BigNumber) => {\n const { maxAskPriceLimit = 0.5, latestPrice = 0 } = this.props;\n const bnLastPrice = new BigNumber(latestPrice);\n\n if (price.lte(0)) {\n this.askState.validation.priceValid = false;\n this.askState.validation.priceInvalidMsg = `Ask price cannot be 0`;\n console.debug('Ask price cannot be 0');\n return false;\n }\n\n if (\n !bnLastPrice.eq(0) &&\n maxAskPriceLimit &&\n bnLastPrice.multipliedBy(maxAskPriceLimit).gt(price)\n ) {\n this.askState.validation.priceValid = false;\n\n const percent = new BigNumber(maxAskPriceLimit)\n .multipliedBy(100)\n .toFixed(2);\n this.askState.validation.priceInvalidMsg = `Ask price cannot be less than ${percent}% of latest price`;\n\n console.debug(\n `Ask price cannot be less than ${percent} % of latest price( ${bnLastPrice})`\n );\n return false;\n }\n\n this.askState.validation.priceValid = true;\n this.askState.validation.priceInvalidMsg = '';\n return true;\n };\n\n /**\n * The price precision cannot exceed the setting\n */\n checkPricePrecision = (price: BigNumber) => {\n const { orderPricePrecision = 2 } = this.props;\n const precision = price.dp();\n\n if (precision <= orderPricePrecision) return true;\n\n console.debug(`price precision exceed ${orderPricePrecision}`);\n return false;\n };\n\n /**\n * The amount precision cannot exceed the setting\n */\n checkAmountPrecision = (amount: BigNumber) => {\n const { orderVolumePrecision = 2 } = this.props;\n const precision = amount.dp();\n\n if (precision <= orderVolumePrecision) return true;\n\n console.debug(`amount precision exceed ${orderVolumePrecision}`);\n return false;\n };\n\n /**\n * on bid order form amount change\n */\n onBidAmountChanged = (amount: BigNumber) => {\n console.debug('onBidAmountChanged', amount);\n const { input } = this.bidState;\n const { orderVolumePrecision = 2 } = this.props;\n\n console.debug(`onBidAmountChanged ${amount.toString()}`);\n this.bidState.input.amount = amount;\n this.validateBidAmount(amount);\n\n if (!input.price || input.price.isNaN()) return;\n\n if (amount.isNaN()) {\n this.bidState.input.total = zero;\n this.bidState.input.percent = 0;\n return;\n }\n\n this.bidState.input.total = toPrecision(\n new BigNumber(input.price).multipliedBy(amount),\n orderVolumePrecision\n );\n const percent = this.bidState.input.total\n .div(this.quoteTokenBalance)\n .multipliedBy(100)\n .toNumber();\n this.bidState.input.percent = Math.min(percent, 100);\n };\n\n /**\n * validate bid amount\n */\n validateBidAmount = (amount: BigNumber) => {\n const { quoteTokenBalance = 0 } = this;\n const { orderVolumePrecision = 0 } = this.props;\n const bnPrice = new BigNumber(this.bidState.input.price);\n const quoteTokenBalanceBN = new BigNumber(quoteTokenBalance);\n\n if (amount.eq(0)) {\n this.bidState.validation.amountValid = false;\n this.bidState.validation.amountInvalidMsg = `Buy volume cannot be 0`;\n console.debug('Buy volume cannot be 0');\n return false;\n }\n\n if (bnPrice.gt(0) && quoteTokenBalance > 0) {\n const maxBidAmount = quoteTokenBalanceBN.div(bnPrice);\n\n if (amount.gt(maxBidAmount)) {\n const amountFmt = toPrecision(maxBidAmount, orderVolumePrecision);\n this.bidState.validation.amountValid = false;\n this.bidState.validation.amountInvalidMsg = `Bid amount cannot be more than ${amountFmt}`;\n console.debug(`Bid amount cannot be more than ${amountFmt}`);\n return false;\n }\n }\n this.bidState.validation.amountValid = true;\n this.bidState.validation.amountInvalidMsg = '';\n return true;\n };\n\n /**\n * on ask order form amount change\n */\n onAskAmountChanged = (amount: BigNumber) => {\n console.debug(`onAskAmountChanged ${amount}`);\n const { input } = this.askState;\n const { orderVolumePrecision = 2 } = this.props;\n\n this.askState.input.amount = amount;\n this.validateAskAmount(amount);\n\n if (amount.isNaN()) {\n this.askState.input.total = zero;\n this.askState.input.percent = 0;\n return;\n }\n if (this.baseTokenBalance.gt(0))\n this.askState.input.percent = new BigNumber(amount)\n .div(this.baseTokenBalance)\n .multipliedBy(100)\n .toNumber();\n else if (this.baseTokenBalance.eq(0) && amount.gt(0))\n this.askState.input.percent = 100;\n\n if (input.price.gt(0) && amount.gt(0))\n this.askState.input.total = toPrecision(\n new BigNumber(input.price).multipliedBy(amount),\n orderVolumePrecision\n );\n };\n\n /**\n * validate ask amount\n */\n validateAskAmount = (amount: BigNumber) => {\n const { baseTokenBalance = zero } = this;\n const { orderVolumePrecision = 0 } = this.props;\n\n if (amount.eq(0)) {\n this.askState.validation.amountValid = false;\n this.askState.validation.amountInvalidMsg = `Sell volume cannot be 0`;\n console.debug('Sell volume cannot be 0');\n return false;\n }\n\n if (baseTokenBalance.gt(0) && amount.gt(baseTokenBalance)) {\n const amountFmt = toPrecision(baseTokenBalance, orderVolumePrecision);\n this.askState.validation.amountValid = false;\n this.askState.validation.amountInvalidMsg = `Sell amount cannot be more than ${amountFmt}`;\n console.debug(`Sell amount cannot be more than ${amountFmt}`);\n return false;\n }\n\n this.askState.validation.amountValid = true;\n this.askState.validation.amountInvalidMsg = '';\n return true;\n };\n\n /**\n * on bid order form percent change\n */\n onBidSliderPercentChanged = (percent: number) => {\n const { input } = this.bidState;\n const { orderVolumePrecision = 2 } = this.props;\n\n this.bidState.input.percent = percent;\n\n if (this.quoteTokenBalance.eq(0) || !input.price) return;\n\n this.bidState.input.total = this.quoteTokenBalance\n .multipliedBy(percent)\n .div(100);\n\n this.bidState.input.amount = toPrecision(\n this.bidState.input.total.div(input.price),\n orderVolumePrecision\n );\n this.bidState.input.amountPrecision = orderVolumePrecision;\n };\n\n /**\n * on ask order form percent change\n */\n onAskSliderPercentChanged = (percent: number) => {\n const { input } = this.askState;\n const { orderVolumePrecision = 2 } = this.props;\n\n this.askState.input.percent = percent;\n this.askState.input.amount = this.baseTokenBalance\n .multipliedBy(percent)\n .div(100);\n\n if (this.baseTokenBalance.eq(0) || !input.price) return;\n\n this.askState.input.total = toPrecision(\n new BigNumber(this.askState.input.amount).multipliedBy(input.price),\n orderVolumePrecision\n );\n\n this.askState.input.amountPrecision = orderVolumePrecision;\n };\n\n /**\n * submit bid order\n */\n onBidOrderSubmitted = async () => {\n const { input } = this.bidState;\n const {\n marketId,\n baseToken,\n quoteToken,\n priceDecimals,\n onBidOrderSubmitted\n } = this.props;\n\n if (!this.validateBidPrice(input.price)) return;\n if (!this.validateBidAmount(input.amount)) return;\n\n const transferFee = DFT.calcTransferFee(input.amount, quoteToken);\n\n this.bidState.submitting = true;\n // approve first\n if (this.bidState.approvedAmount < input.amount.plus(transferFee))\n try {\n await this.quoteTokenActor.approveToken(\n marketId,\n toBigNumber(DEFAULT_APPROVE_AMOUNT),\n baseToken.decimals\n );\n console.debug('Approve quote token success');\n } catch (e) {\n console.warn('Approve quote token fail', e);\n if (e instanceof CanisterError) {\n toastStore.error(`code ${e.code}, ${e.message}`, 'Swap error');\n } else {\n toastStore.error(`Unknown error: ${e.message}`, 'Swap error');\n }\n return;\n } finally {\n this.bidState.submitting = false;\n }\n const priceBN = toBigInt(parseToOrigin(input.price, priceDecimals));\n const amountBN = toBigInt(parseToOrigin(input.amount, baseToken.decimals));\n\n if (!onBidOrderSubmitted) {\n console.debug('Bid order submit called');\n return;\n }\n\n try {\n const orderId = await onBidOrderSubmitted(priceBN, amountBN);\n\n toastStore.success(\n `price ${input.price}, volume ${input.amount}`,\n 'Submit bid order success'\n );\n console.info('Bid order success', orderId);\n } catch (e) {\n toastStore.error(`${e?.message || ''}`, 'Submit ask order fail');\n } finally {\n this.bidState.submitting = false;\n }\n };\n\n /**\n * submit ask order\n * @returns\n */\n onAskOrderSubmitted = async () => {\n const { input } = this.askState;\n\n if (\n !this.validateAskPrice(input.price) ||\n !this.validateAskAmount(input.amount)\n )\n return;\n\n const { marketId, baseToken, priceDecimals, onAskOrderSubmitted } =\n this.props;\n const transferFee = DFT.calcTransferFee(input.amount, baseToken);\n\n this.askState.submitting = true;\n // approve first\n if (this.askState.approvedAmount < input.amount.plus(transferFee))\n try {\n await this.baseTokenActor.approveToken(\n marketId,\n toBigNumber(DEFAULT_APPROVE_AMOUNT),\n baseToken.decimals\n );\n console.debug('Approve base token success');\n } catch (e) {\n console.warn('Approve base token fail', e);\n if (e instanceof CanisterError) {\n toastStore.error(`code ${e.code}, ${e.message}`, 'Swap error');\n } else {\n toastStore.error(`Unknown error: ${e.message}`, 'Swap error');\n }\n return;\n } finally {\n this.askState.submitting = false;\n }\n\n const priceBN = toBigInt(parseToOrigin(input.price, priceDecimals));\n const amountBN = toBigInt(parseToOrigin(input.amount, baseToken.decimals));\n\n if (!onAskOrderSubmitted) {\n console.debug('Ask order submit called');\n return;\n }\n console.debug(\n `Ask order submit called: price ${input.price} amount ${input.amount}`\n );\n try {\n const orderId = await onAskOrderSubmitted(priceBN, amountBN);\n\n toastStore.success(\n `price ${input.price}, volume ${input.amount}`,\n 'Submit ask order success'\n );\n console.info(`Ask order success ${orderId}`);\n } catch (e) {\n toastStore.error(`${e?.message || ''}`, 'Submit ask order fail');\n } finally {\n this.askState.submitting = false;\n }\n };\n\n renderForm(type: SpotOrderType) {\n const isBuy = type === SpotOrderType.Bid;\n const quoteTokenSymbol = this.props?.quoteToken?.symbol || '';\n const baseTokenSymbol = this.props?.baseToken?.symbol || '';\n const {\n baseTokenPrecision = 0,\n quoteTokenPrecision = 0,\n orderPricePrecision = 0,\n orderVolumePrecision = 0\n } = this.props;\n const actionState = isBuy ? this.bidState : this.askState;\n const {\n amount = zero,\n amountPrecision = 0,\n price = zero,\n pricePrecision = 0\n } = actionState.input;\n const validation = actionState.validation;\n const availableAmount = isBuy\n ? formatNumber(this.quoteTokenBalance.toNumber(), quoteTokenPrecision)\n : formatNumber(this.baseTokenBalance.toNumber(), baseTokenPrecision);\n\n return (\n {\n e.preventDefault();\n e.stopPropagation();\n this.onTradeFormSubmit(type);\n }}\n >\n \n Avbl\n \n |Fee 0.0%\n \n {availableAmount}\n \n {isBuy ? quoteTokenSymbol : baseTokenSymbol}\n \n \n \n {\n const { value } = e.target;\n actionState.input.pricePrecision = Math.min(\n getPrecision(value),\n orderPricePrecision\n );\n console.debug('pricePrecision', actionState.input.pricePrecision);\n this.onTradeFormPriceChanged(toBigNumber(value), type);\n }}\n isInvalid={!validation.priceValid}\n />\n \n {quoteTokenSymbol}\n \n \n {validation.priceInvalidMsg}\n \n \n \n {\n const { value } = e.target;\n actionState.input.amountPrecision = Math.min(\n getPrecision(value),\n orderVolumePrecision\n );\n console.debug(\n 'amountPrecision',\n actionState.input.amountPrecision\n );\n this.onTradeFormAmountChanged(toBigNumber(value), type);\n }}\n isInvalid={!validation.amountValid}\n />\n \n {baseTokenSymbol}\n \n \n {validation.amountInvalidMsg}\n \n \n
\n {\n this.onTradeFormSliderPercentChanged(v, type);\n }}\n />\n
\n\n \n Total\n {formatNumber(\n actionState.input.total.toNumber(),\n quoteTokenPrecision\n )}\n \n {quoteTokenSymbol}\n \n \n \n \n {!session.isConnected ? 'Connect Wallet' : isBuy ? 'Buy' : 'Sell'}\n {actionState.submitting && (\n \n )}\n \n \n \n );\n }\n\n renderTowards() {\n return (\n \n \n Withdraw\n \n \n Deposit\n \n \n );\n }\n\n render() {\n const { className } = this.props;\n\n return (\n \n \n \n \n {this.renderForm(SpotOrderType.Bid)}\n {this.renderForm(SpotOrderType.Ask)}\n \n \n \n
\n Coming soon...\n
\n
\n
\n\n {/* TODO: hide it now. {this.renderTowards()} */}\n
\n );\n }\n}\n",".tabs {\n height: 37px;\n --bs-nav-link-font-size: 14px;\n --bs-nav-tabs-border-color: rgb(var(--ex3-secondary-rgb));\n :global {\n .nav-link {\n height: 36px;\n --bs-nav-link-color: rgb(var(--bs-secondary-rgb));\n --bs-link-hover-color: white;\n --bs-nav-link-hover-color: white;\n --bs-nav-tabs-link-active-color: white;\n --bs-nav-tabs-link-active-bg: rgb(var(--bs-black-rgb));\n --bs-nav-tabs-border-radius: 0;\n --bs-nav-tabs-link-hover-border-color: rgb(var(--ex3-secondary-rgb));\n --bs-nav-tabs-link-active-border-color: rgb(var(--ex3-secondary-rgb));\n border-color: rgb(var(--ex3-secondary-rgb)) !important;\n &,\n &:hover,\n &.active {\n border-bottom: none;\n border-left-color: transparent !important;\n border-top-color: transparent !important;\n outline: none;\n }\n }\n }\n & + :global.tab-content {\n flex: 1;\n .tab-pane {\n height: 100%;\n }\n }\n}\n\n.towards {\n position: absolute;\n top: 0.35rem;\n right: 0.35rem;\n}\n\n.btn{\n height: 40px;\n border-radius: 6px;\n box-shadow: none !important;\n border-style:solid;\n border-width: 1px;\n .spinner{\n margin-left: 10px;\n }\n &.connect-btn {\n background: #1a2239 !important;\n border-color: transparent !important;\n color: #0099e6;\n font-weight: 400;\n box-shadow: none !important;\n &:hover,\n &:active,\n &:focus {\n background: #212a45 !important;\n border-color: #212a45 !important;\n }\n }\n &.btn-buy{\n background: rgba(15, 190, 175, 0.1);\n border-color: rgba(15, 190, 175, 0.4);\n &:hover,\n &:active,\n &:focus{\n background: rgba(15, 190, 175, 0.3);\n }\n &:disabled{\n color: rgba(15, 190, 175, 0.4);\n }\n .spinner{\n color: rgba(15, 190, 175, 0.4) !important;\n }\n \n }\n &.btn-sell{\n background: rgba(236, 73, 83, 0.1);\n border-color: rgba(236, 73, 83, 0.4);\n &:hover,\n &:active,\n &:focus{\n background: rgba(236, 73, 83, 0.3);\n }\n &:disabled{\n color: rgba(236, 73, 83, 0.4);\n }\n }\n .spinner{\n color: rgba(236, 73, 83, 0.4) !important;\n }\n}\n\n\n.trading-form-wrap{\n padding-bottom: 20px;\n}\n.form-wrap{\n :global{\n .badge{\n background-color: #212A45 !important;\n font-weight: 400;\n }\n }\n}\n.header{\n height: 20px;\n margin: 20px 0 10px;\n}\n.footer{\n height: 20px;\n margin: 8px 0 12px;\n}\n.input-group{\n height: 36px;\n margin-bottom: 4px;\n :global{\n .form-control{\n box-shadow: none !important;\n }\n }\n}\n\n.RangeInput-wrap{\n height: 1rem;\n display: flex;\n align-items: center;\n}\n.RangeInput{\n background-color: #353E59;\n height: 2px;\n input[type=\"range\"]{\n transform: translateY(-14px);\n &::-webkit-slider-runnable-track {\n height: 2px;\n background: rgb(var(--bs-dark-rgb));\n }\n &::-webkit-slider-thumb {\n height: 12px;\n width: 12px;\n background: #5F7195;\n border-radius: 2px;\n }\n }\n}\n@-moz-document url-prefix(){\n input[type=\"range\"]{\n &::-moz-range-track{\n height: 3px;\n background: rgb(var(--bs-dark-rgb));\n }\n &::-moz-range-thumb {\n border:none;\n height: 12px;\n width: 12px;\n background: #5F7195;\n border-radius: 2px;\n transform: translateY(2px);\n }\n }\n}","import { Column, IdeaTable } from 'idea-react';\nimport {\n action,\n computed,\n IReactionDisposer,\n observable,\n reaction\n} from 'mobx';\nimport { observer } from 'mobx-react';\nimport { PureComponent } from 'react';\nimport { Tabs, Tab } from 'react-bootstrap';\nimport { SpotOrder, SpotOrderType } from '../../../model/canister/Fusion';\nimport { SpotTradeRecord } from '../../../model/canister/TradeHistory';\nimport { TableInlineButton } from './TableInlineButton';\nimport * as styles from './index.module.less';\nimport {\n formatDateTime,\n parseToCommon,\n toPrecision\n} from '../../../model/utils/helper';\nimport BigNumber from 'bignumber.js';\nimport session from '../../../model/Session';\nimport classnames from 'classnames';\nimport { toastStore } from '../../../component/Toast';\nimport { ChooseWallet } from '../../../component/ChooseWallet';\nimport { CanisterError } from '../../../model/utils/exception';\n\ninterface MyOrderDto {\n id: string;\n type: SpotOrderType;\n volume: BigNumber;\n createdAt: number;\n filled: BigNumber;\n price: number;\n}\n\ninterface TradeHistory extends SpotTradeRecord {\n id: number;\n}\n\ninterface Props {\n myOrderList?: SpotOrder[];\n tradeHistoryList?: SpotTradeRecord[];\n baseTokenSymbol: string;\n baseTokenDecimals: number;\n quoteTokenSymbol: string;\n quoteTokenDecimals: number;\n baseTokenPrecision?: number;\n quoteTokenPrecision?: number;\n orderPricePrecision?: number;\n onSwitchOnlyCurrencyMarket: (onlyCurrentMarket: boolean) => void;\n onOrderCancelled: (orderId: bigint) => Promise;\n onCancelAllClicked: () => Promise;\n}\n\n@observer\nexport class MyOrder extends PureComponent {\n @observable\n onlyCurrentMarket: boolean = false;\n @observable\n myOpenOrders: MyOrderDto[] = [];\n @observable\n tradeHistoryList: TradeHistory[] = [];\n\n private activeIDisposers: IReactionDisposer[] = [];\n\n componentDidMount() {\n const myOrderSupervisor = reaction(\n () => this.props.myOrderList,\n orders => {\n console.debug(\n `MyOrder.componentDidMount: myOrderList changed ${\n orders?.length || 0\n }`\n );\n const { baseTokenDecimals = 0 } = this.props;\n this.myOpenOrders = orders?.map(item => {\n return {\n ...item,\n volume: parseToCommon(item.volume, baseTokenDecimals),\n filled: parseToCommon(item.filled, baseTokenDecimals),\n id: item.id.toString()\n };\n });\n },\n { fireImmediately: true }\n );\n\n const tradeHistorySupervisor = reaction(\n () => this.props.tradeHistoryList,\n history => {\n console.debug(\n `MyOrder.componentDidMount: tradeHistoryList changed ${\n history?.length || 0\n }`\n );\n this.tradeHistoryList = history?.map((item, index) => {\n return { ...item, id: index };\n });\n },\n { fireImmediately: true }\n );\n this.activeIDisposers.push(myOrderSupervisor);\n this.activeIDisposers.push(tradeHistorySupervisor);\n }\n\n /**\n * clear all disposers (which can not auto-GC when component unmount)\n */\n async componentWillUnmount() {\n this.activeIDisposers.forEach(disposer => disposer());\n }\n\n /**\n * generate my open orders columns\n * @param p this.Props\n * @returns\n */\n @computed get myOpenOrdersColumns(): Column[] {\n const baseSymbol = (this.props?.baseTokenSymbol || '').toUpperCase();\n const quoteSymbol = (this.props?.quoteTokenSymbol || '').toUpperCase();\n const { baseTokenPrecision = 0, orderPricePrecision = 0 } = this.props;\n return [\n {\n key: 'createdAt',\n label: 'Time',\n render: item => {formatDateTime(item.createdAt)}\n },\n {\n key: 'pair',\n label: 'Pair',\n render: () => (\n \n {baseSymbol}/{quoteSymbol}\n \n )\n },\n {\n key: 'side',\n label: 'Side',\n render: item => (\n {item.type === SpotOrderType.Bid ? 'Buy' : 'Sell'}\n )\n },\n {\n key: 'price',\n label: `Price (${quoteSymbol})`,\n render: item => (\n {toPrecision(item.price, orderPricePrecision).toString()}\n )\n },\n {\n key: 'amount',\n label: `Amount (${baseSymbol})`,\n render: item => (\n {toPrecision(item.volume, baseTokenPrecision).toFormat()}\n )\n },\n {\n key: 'executed',\n label: 'Executed',\n render: item => (\n {toPrecision(item.filled, baseTokenPrecision).toFormat()}\n )\n },\n {\n key: 'unexecuted',\n label: 'unexecuted',\n render: item => (\n \n {toPrecision(\n new BigNumber(item.volume).minus(item.filled),\n baseTokenPrecision\n ).toFormat()}\n \n )\n },\n {\n key: 'action',\n label: 'Action',\n render: ({ id }) => (\n this.cancelOrder(BigInt(id))}\n />\n )\n }\n ];\n }\n\n @computed get tradeHistoryColumns(): Column[] {\n const baseSymbol = (this.props?.baseTokenSymbol || '').toUpperCase();\n const quoteSymbol = (this.props?.quoteTokenSymbol || '').toUpperCase();\n const {\n baseTokenPrecision = 0,\n quoteTokenPrecision = 0,\n orderPricePrecision = 0\n } = this.props;\n return [\n {\n key: 'time',\n label: 'Time',\n render: item => {formatDateTime(item.time)}\n },\n {\n key: 'pair',\n label: 'Pair',\n render: () => (\n \n {baseSymbol}/{quoteSymbol}\n \n )\n },\n {\n key: 'side',\n label: 'Side',\n render: item => (\n {item.type === SpotOrderType.Bid ? 'Buy' : 'Sell'}\n )\n },\n {\n key: 'price',\n label: `Price (${quoteSymbol})`,\n render: item => (\n {toPrecision(item.price, orderPricePrecision).toString()}\n )\n },\n {\n key: 'filled',\n label: `Filled (${baseSymbol})`,\n render: item => (\n {toPrecision(item.volume, baseTokenPrecision).toFormat()}\n )\n },\n {\n key: 'fee',\n label: 'Fee',\n render: item => (\n \n 0 {item.type === SpotOrderType.Bid ? baseSymbol : quoteSymbol}\n \n )\n },\n {\n key: 'total',\n label: `Total (${quoteSymbol})`,\n render: item => (\n \n {toPrecision(\n new BigNumber(item.price).multipliedBy(item.volume),\n quoteTokenPrecision\n ).toFormat()}\n \n )\n }\n ];\n }\n\n @action\n cancelOrder = (orderId: bigint | string): Promise => {\n return this.props\n ?.onOrderCancelled(BigInt(orderId))\n .then(() => {\n this.myOpenOrders = this.myOpenOrders.filter(\n item => item.id !== orderId.toString()\n );\n toastStore.success(\n `OrderId ${orderId} has been cancelled successfully`,\n 'Cancel order success'\n );\n console.info('Cancel order success', orderId);\n })\n .catch(e => {\n if (e instanceof CanisterError) {\n toastStore.error(`${e.message}`, 'Cancel order fail');\n } else {\n toastStore.error(`${e?.message || ''}`, 'Cancel order fail');\n }\n });\n };\n\n @action\n cancelAll = (): Promise => {\n return this.props\n .onCancelAllClicked()\n .then(() => {\n this.myOpenOrders = [];\n toastStore.success(\n `All order has been cancelled successfully`,\n 'Cancel order success'\n );\n console.info('Cancel all order success');\n })\n .catch(e => {\n if (e instanceof CanisterError) {\n toastStore.error(`${e.message}`, 'Cancel order fail');\n } else {\n toastStore.error(`${e?.message || ''}`, 'Cancel order fail');\n }\n });\n };\n\n toggleSwitch = () => {\n this.onlyCurrentMarket = !this.onlyCurrentMarket;\n };\n renderOperator() {\n const { onlyCurrentMarket } = this;\n return (\n
\n \n \n
\n );\n }\n\n renderNoData() {\n return session.isConnected ? (\n
no data
\n ) : (\n
\n \n \n \n
\n );\n }\n\n renderMyOpenOrders(columns: Column[], data: MyOrderDto[]) {\n return (\n
\n \n
\n );\n }\n\n renderTradeHistory(columns: Column[], data: TradeHistory[]) {\n return (\n
\n \n
\n );\n }\n\n render() {\n const {\n myOpenOrdersColumns = [],\n tradeHistoryColumns = [],\n myOpenOrders,\n tradeHistoryList\n } = this;\n return (\n
\n {this.renderOperator()}\n \n \n {this.renderMyOpenOrders(myOpenOrdersColumns, myOpenOrders)}\n \n \n {this.renderTradeHistory(tradeHistoryColumns, tradeHistoryList)}\n \n \n
\n );\n }\n}\n","import classNames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { PureComponent } from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport * as styles from './index.module.less';\n\nexport interface TableInlineButtonProps {\n id: string;\n className?: string;\n kind?: 'cancel';\n text: string;\n onClick?: () => Promise;\n}\n\n@observer\nexport class TableInlineButton extends PureComponent {\n @observable\n submitting = false;\n\n handleClick = () => {\n this.submitting = true;\n this.props.onClick().finally(() => (this.submitting = false));\n };\n\n render() {\n const { className, kind } = this.props;\n\n return (\n \n {this.props.text}\n {this.submitting && (\n \n )}\n \n );\n }\n}\n",".my-order-wrap {\n --color-primary: #0099e6;\n --color-gray: #5f7195;\n --border-color: #262d40;\n --bar-height:40px;\n}\n\n.my-order-wrap {\n margin: 0 0 2.5rem;\n position: relative;\n :global {\n .nav-tabs {\n padding-left: 1px;\n height: var(--bar-height);\n border-bottom: 1px solid var(--border-color);\n .nav-link {\n height: 100%;\n border-radius: 0;\n border-width: 0 1px 0 0;\n border-color: var(--border-color);\n border-style: solid;\n background: transparent;\n color: var(--color-gray);\n font-weight: 400;\n transition: all 0.3s;\n &:hover,\n &.active {\n background: #090d1a;\n color: var(--color-primary);\n }\n }\n }\n .tab-content {\n padding-top: var(--bar-height);\n }\n }\n .order-operator {\n padding: 0 1rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height:var(--bar-height);\n position: absolute;\n width: 100%;\n top: var(--bar-height);\n border-bottom: 1px solid var(--border-color);\n }\n}\n\n.check-switch {\n display: flex;\n align-items: center;\n .check-switch-title {\n color: var(--color-gray);\n padding-right: 5px;\n }\n .toggle {\n cursor: pointer;\n border: none;\n background: #090d1a;\n border-radius: 1rem;\n color: #fff;\n display: block;\n position: relative;\n transition: background 120ms;\n width: 2rem;\n height: 0.875rem;\n margin: 0 1rem 0 0.5rem;\n padding: 0;\n &:before {\n content: '';\n display: block;\n text-align: right;\n }\n &.active {\n background: var(--color-primary);\n &:before {\n text-align: left;\n }\n }\n .handle {\n background: #212a45;\n border-radius: 50%;\n display: block;\n height: 1rem;\n width: 1rem;\n left: -10%;\n margin-top: -0.5rem;\n position: absolute;\n top: 50%;\n transition: all 120ms;\n }\n &.active .handle {\n left: 70%;\n background: #ffffff;\n }\n }\n}\n\n.btn-connect {\n background: none;\n border: none;\n color: var(--color-primary);\n transition: all 0.3s;\n border-bottom: 1px solid rgba(0, 153, 230, 0.5);\n padding: 0;\n &:hover {\n color: #ffffff;\n border-bottom: 1px solid #ffffff;\n }\n}\n\n.btn-cancel {\n background: #1a2239;\n border-radius: 0.5rem;\n font-weight: 400;\n color: var(--color-gray);\n border: none;\n min-width: 4rem;\n height: 1.5rem;\n padding: 0 8px;\n transition: all 0.3s;\n &:hover {\n color: var(--color-primary);\n background: #212a45;\n }\n &:disabled {\n color: var(--color-gray);\n background: #212a45;\n }\n :global {\n .spinner-border {\n width: 0.75rem;\n height: 0.75rem;\n margin-left: 5px;\n color: var(--color-primary) !important;\n }\n }\n}\n\n.order-table {\n border-bottom: none;\n th,\n td {\n text-align: left;\n border-color: var(--border-color);\n font-weight: 400;\n color: var(--color-gray);\n white-space: nowrap;\n &:last-child {\n text-align: right;\n width: 6.25rem;\n }\n }\n thead th {\n vertical-align: middle;\n }\n tbody tr {\n &:hover td {\n color: var(--color-gray);\n }\n &:last-child td {\n border: none;\n }\n }\n}\n\n@media screen and (min-width: 768px) {\n .btn-cancel:hover {\n color: #fff;\n }\n .my-order-wrap {\n .order-operator {\n width: auto;\n padding: 0;\n right: 0;\n top: 0;\n justify-content: flex-end;\n :global{\n .btn-cancel {\n border-width: 0 0 0 1px;\n border-color: var(--border-color);\n border-style: solid;\n background: transparent;\n height: 100%;\n color: var(--color-gray);\n font-weight: 400;\n transition: all 0.3s;\n border-radius: 0;\n padding: 0 1rem;\n &:hover {\n background: #090d1a;\n color: #fff;\n }\n }\n }\n }\n :global {\n .tab-content {\n padding-top: 0;\n }\n .nav-tabs .nav-link {\n width: 9.375rem;\n &:hover,\n &.active {\n color: #ffffff;\n }\n }\n }\n }\n}","import { Constructor, parseURLData } from 'web-utility';\nimport { Location } from 'history';\nimport React, { Component, PureComponent } from 'react';\nimport { useLocation, useParams } from 'react-router-dom';\n\n// Types come from https://cdn.jsdelivr.net/npm/@types/react-router/index.d.ts\n\nexport interface StaticContext {\n statusCode?: number | undefined;\n}\n\nexport interface match<\n Params extends Partial> = {}\n> {\n url: string;\n path: string;\n params: Params;\n}\n\nexport interface RouteComponentProps<\n Params extends Partial> = {},\n Context extends StaticContext = StaticContext,\n Query extends Record = {}\n> {\n location: Location;\n match: match;\n query: Query;\n staticContext?: Context;\n}\n\n/**\n * @see https://v5.reactrouter.com/web/api/withRouter\n */\nexport function withRouter(\n Class: Constructor<\n Component | PureComponent\n >\n) {\n return () => {\n const location = useLocation(),\n params = useParams();\n\n const { pathname = '/', search = '', hash = '' } = location;\n\n const path = pathname + search + hash;\n\n const match = {\n url: globalThis.location.origin + path,\n path,\n params\n },\n query = parseURLData(search);\n\n return ;\n };\n}\n"],"names":["$1Yvdb","parcelRequire","$1391fff915f6f56f$export$81482c677a163d2a","$acw62","PureComponent","async","this","bqDisposer","$57kwV","reaction","props","match","params","p","console","log","b","q","$iI5ED","TOKEN_DBTC_ID","TOKEN_DICP_ID","baseTokenId","quoteTokenId","market","$iErjh","MarketStore","info","initialize","fireImmediately","dispose","debug","render","isDesktop","$fxvql","default","depth","baseToken","quoteToken","tickOf24H","marketSetting","$ayMG0","jsxs","$biXX6","Container","as","className","$parcel$interopDefault","$8g1PZ","isLaptop","fluid","jsx","$ltbZC","MainSearch","Fragment","$l09qH","AssetIndex","baseTokenSymbol","symbol","baseTokenName","name","quoteTokenSymbol","lastPrice","high","low","volume","open","close","fiatPrice","fiatCurrency","style","height","$7dhMp","TVChartContainer","klineCanisterId","priceDecimals","baseTokenDecimals","decimals","$g3T3g","TradeForm","marketId","baseTokenPrecision","quoteTokenPrecision","maxAskPriceLimit","maxBidPriceLimit","orderPricePrecision","orderVolumePrecision","latestPrice","price","bidOrderDepthClickItem","askOrderDepthClickItem","onAskOrderSubmitted","submitAskLimitOrder","onBidOrderSubmitted","submitBidLimitOrder","$2KrWB","Depth","levels","depthLevels","count","level","type","depthVolumePrecision","askOrders","bidOrders","onChangeDepthLevel","switchLevel","onChangeDepthType","switchType","onAskOrderClick","item","onBidOrderClick","$dQE7N","MyOrder","myOrderList","myOpenOrders","tradeHistoryList","tradeHistory","quoteTokenDecimals","onSwitchOnlyCurrencyMarket","onOrderCancelled","orderId","cancelOrder","onCancelAllClicked","cancelAllOrders","observable","prototype","$eOZ0o","observer","$1391fff915f6f56f$export$2e2bcd8739ae039","$3tzs6","withRouter","$e91db2e7ecb0b15a$var$filterHead","$e91db2e7ecb0b15a$var$tableHead","$e91db2e7ecb0b15a$export$e870e12a9fd6474c","data","ascend","sortFiled","filter","undefined","marketService","$1VuYG","Market","dataWithFilter","lowerFilter","toLowerCase","d","token","DEFAULT_DATA","fav","top","change","marketList","getMarketList","setting","priceUpdateTimer","setInterval","forEach","kline","$brav4","KLine","tick","fetchCurrentTick","TickSpaceIndex","OneDay","priceChanged","minus","div","shiftedBy","dp","toNumber","componentWillUnmount","clearInterval","searchCoin","event","preventDefault","stopPropagation","onFilterChanged","onSortFiledChanged","theFiled","$ec13Y","toCamelCase","diff","sort","a","toggleFav","map","redirectMarket","window","location","hash","renderList","index","onClick","$9UoUt","IconButton","icon","$4iLuP","faStar","color","$jEyqx","FontAwesomeIcon","faSortUp","faSortDown","toFixed","width","$iktDz","Form","onSubmit","$TdvKl","IconInput","faSearch","placeholder","required","ToggleButtonGroup","onChange","head","ToggleButton","id","variant","size","value","checked","Table","borderless","hover","table","header","minWidth","faSort","computed","$d581159a9530047a$export$6084c78a3d99fd2b","$d581159a9530047a$export$e37752190853367f","$d581159a9530047a$export$9852986a3ec5f6a0","$6db3d402f8edd168$var$timeButtons","text","resolution","$6db3d402f8edd168$export$f6958aa45248cbb5","interval","componentDidMount","symbolDisposer","tvWidget","TradingView","dataFeed","unsubscribeBars","$4rNti","EX3DataFeed","widgetOptions","datafeed","container_id","library_path","locale","charts_storage_url","charts_storage_api_version","client_id","user_id","autosize","theme","toolbar_bg","customFormatters","timeFormatter","format","date","formatDate","formatLocal","dateFormatter","overrides","disabled_features","widget","onChartReady","button","createButton","attr","addClass","parent","css","on","e","srcElement","getAttribute","indexOf","target","parentNode","querySelectorAll","element","children","classList","remove","setAttribute","add","chart","setResolution","$asqJN","$8c68bd71eec0ac6e$export$22c5d51923debbed","constructor","historyProvider","$7snXe","EX3HistoryProvider","streamProvider","$892Al","EX3StreamProvider","searchSymbols","userInput","exchange","symbolType","onResult","resolveSymbol","symbolName","onResolve","onError","split_data","split","symbol_stub","description","session","timezone","ticker","minmov","pricescale","has_intraday","intraday_multipliers","supported_resolutions","supportedResolutions","volume_precision","data_status","full_name","listed_exchange","setTimeout","getBars","symbolInfo","rangeStartDate","rangeEndDate","isFirstCall","then","bars","length","noData","catch","err","subscribeBars","onTick","listenerGuid","onResetCacheNeededCallback","subscribeDepth","callback","Error","unsubscribeDepth","subscriberUID","onReady","$c95f9a86722d8e07$export$4078bfa3d9f911fe","$fb29e7f9cdf46804$export$cff61a0a6477707b","firstDataRequest","$3jtud","parseResolutionToTickSpaceIndex","historyData","fetchTicks","time","reverse","error","$a63f41910960ad0c$export$8fc2ba451c947191","OneMinute","FiveMinutes","FifteenMinutes","ThirtyMinutes","OneHour","FourHours","Week","Month","$8396a28a802c9b9c$export$97245c780040f109","onRealtimeCallback","fetchLatestTickTimer","klineActor","crtTick","newBar","Second","$70091907e8246b5a$export$ec9a71745c2761ee","from","toTs","first","limit","fsym","tsym","url","qs","aggregate","body","Response","Message","Data","$iDCui","tvClient","post","buildURLData","volumefrom","rest","history","lastBar","$840998644807d193$var$socket","$73MNt","$840998644807d193$var$_subs","$840998644807d193$var$xResolution","$840998644807d193$var$symbolInfoname","$840998644807d193$var$newSub","$840998644807d193$export$8776f53f689efee","subIndex","findIndex","uid","sub","emit","subs","channelString","splice","channel","to","$840998644807d193$var$createChannelString","listener","push","$840998644807d193$var$updateBar","includes","_lastBar","coeff","rounded","Math","floor","e1","_data","$ipYHn","ExampleHistoryProvider","to_sym","from_sym","newdata","subX","find","_lastBarX","sub_type","parseInt","trade_id","parseFloat","channelString1","$kATNo","$523eaa49d3f99bf8$var$cache","$523eaa49d3f99bf8$export$841407ceb083bd74","uri","opts","parsed","path","source","sameNamespace","io","forceNew","multiplex","$fL4YY","Manager","query","queryKey","socket","Object","assign","$lGX0c","Socket","connect","$l7wSz","$efe27346e00da8a8$export$128fa18b7194ef","loc","obj","protocol","host","charAt","test","parse","port","href","$al9N3","$gEtm1","$787375aed2c43820$export$4798917dbf149b79","$687to","Emitter","super","hostname","secure","$5vwdc","installTimerFunctions","transports","readyState","writeBuffer","prevBufferLen","agent","withCredentials","upgrade","timestampParam","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","replace","$2buxl","decode","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","addEventListener","transport","removeAllListeners","offlineEventListener","onClose","createTransport","EIO","$CnWUo","sid","priorWebsocketSuccess","setTimeoutFn","emitReserved","shift","setTransport","onDrain","bind","onPacket","reason","probe","failed","onTransportOpen","send","once","msg","upgrading","pause","cleanup","flush","freezeTransport","onerror","onTransportClose","onclose","onupgrade","removeListener","off","onOpen","i","l","packet","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","clearTimeoutFn","autoUnref","unref","writable","packets","getWritablePackets","payloadSize","byteLength","slice","write","options","fn","compress","cleanupAndClose","waitForUpgrade","removeEventListener","filteredUpgrades","j","$7pvuz","$c1f726e793763466$export$46dec00755c1153b","websocket","WS","polling","Polling","$6opKi","$56534be56e5aa809$var$empty","$56534be56e5aa809$var$hasXHR2","$lB1J3","XHR","xdomain","responseType","$56534be56e5aa809$export$265ee5eefd4c309b","Transport","isSSL","xd","xs","forceBase64","supportsBinary","doOpen","poll","onPause","total","doPoll","onData","decodePayload","binaryType","doClose","encodePayload","doWrite","schema","timestampRequests","$e3yjg","yeast","b64","Number","encodedQuery","encode","request","$56534be56e5aa809$export$7fa6c5b6f8193917","req","method","xhrStatus","context","pollXhr","create","pick","xscheme","xhr","extraHeaders","setDisableHeaderCheck","hasOwnProperty","setRequestHeader","e2","requestTimeout","timeout","onreadystatechange","status","onLoad","document","requestsCount","requests","fromError","abort","responseText","attachEvent","$56534be56e5aa809$var$unloadHandler","terminationEvent","$3kfWP","globalThisShim","$ezyGD","$4a78f487f5bb98d8$var$TransportError","$4a78f487f5bb98d8$export$86495b081fef8e52","details","$bRHuL","$0736208648dc8bae$var$SEPARATOR","String","fromCharCode","$0736208648dc8bae$export$144d64fe58dad441","encodedPackets","Array","encodedPacket","join","$0736208648dc8bae$export$d10cc2e7f7566a2d","encodedPayload","decodedPacket","$0736208648dc8bae$export$a51d6b395ff4c65a","$fsDlh","$8a3662315a48cdbd$var$withNativeBlob","Blob","toString","call","$8a3662315a48cdbd$var$withNativeArrayBuffer","ArrayBuffer","$8a3662315a48cdbd$var$encodeBlobAsBase64","fileReader","FileReader","onload","content","result","readAsDataURL","$8a3662315a48cdbd$export$2e2bcd8739ae039","isView","buffer","PACKET_TYPES","$b417fd17fc84e4e3$export$c169aefb7330cccb","$b417fd17fc84e4e3$export$47791e8004edd485","keys","key","$b417fd17fc84e4e3$export$c718b5840781f8a7","$a9bf3da28855a34f$var$withNativeArrayBuffer","$a9bf3da28855a34f$var$decodeBase64Packet","decoded","$aVEkU","$a9bf3da28855a34f$var$mapBinary","base64","$a9bf3da28855a34f$export$2e2bcd8739ae039","substring","PACKET_TYPES_REVERSE","ERROR_PACKET","$7f4e842ae29bcbc5$var$chars","$7f4e842ae29bcbc5$var$lookup","Uint8Array","charCodeAt","$7f4e842ae29bcbc5$export$2f872c0f2117be69","i2","encoded1","encoded2","encoded3","encoded4","bufferLength","len","arraybuffer","bytes","$8ff0082eecb39b62$export$4293555f241ae35a","$8ff0082eecb39b62$var$mixin","_callbacks","apply","arguments","cb","callbacks","args","listeners","hasListeners","$4028d5a20a4526d1$export$357523c63a2253b9","reduce","acc","k","$4028d5a20a4526d1$var$NATIVE_SET_TIMEOUT","$4028d5a20a4526d1$var$NATIVE_CLEAR_TIMEOUT","clearTimeout","$4028d5a20a4526d1$export$2f67576668b97183","useNativeTimers","$4028d5a20a4526d1$export$a48f0734ac7c2329","str","c","$4028d5a20a4526d1$var$utf8Length","ceil","$26bf9c4279db2ef0$export$394f9358f6231289","self","Function","$a3bbf5b17719daf1$var$alphabet","$a3bbf5b17719daf1$var$map","$a3bbf5b17719daf1$var$prev","$a3bbf5b17719daf1$var$seed","$a3bbf5b17719daf1$var$i","$a3bbf5b17719daf1$export$c564cdbbe6da493","num","encoded","$a3bbf5b17719daf1$export$5bb64b92cb4135a","now","Date","$19744bce3c183d10$export$c564cdbbe6da493","encodeURIComponent","$19744bce3c183d10$export$2f872c0f2117be69","qry","pairs","pair","decodeURIComponent","$kxvpX","$fb8e645f3bad3d56$export$a2d42eb087c10497","XMLHttpRequest","hasCORS","concat","$ef3f42a25dd224af$var$value","$ef3f42a25dd224af$export$5235bbd4a1ef06e","$9ab7b46a38551fa4$var$isReactNative","navigator","product","$9ab7b46a38551fa4$export$911baa0677ac404c","check","protocols","headers","ws","$cFgwF","usingBrowserWebSocket","WebSocket","defaultBinaryType","addEventListeners","onopen","_socket","closeEvent","onmessage","ev","lastPacket","$9ab7b46a38551fa4$require$Buffer","nextTick","$93862213c34af1ff$export$bdd553fddd433dcb","Promise","resolve","$93862213c34af1ff$export$3909fb301d3dc8c9","MozWebSocket","$93862213c34af1ff$export$3407ba5dfb7a683d","$93862213c34af1ff$export$790dcbc41e2d75d5","$f603c1892ffe9e8b$var$re","$f603c1892ffe9e8b$var$parts","$f603c1892ffe9e8b$export$98e6a39c04603d36","src","m","exec","authority","ipv6uri","pathNames","regx","names","substr","$f603c1892ffe9e8b$var$pathNames","$0","$1","$2","$f603c1892ffe9e8b$var$queryKey","$b78f1c3cb524f77d$export$d0d38e7dec7a1a61","_a","nsps","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","$5pEXn","Backoff","min","max","jitter","_readyState","_parser","parser","$2BjQv","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","v","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","_reconnecting","attempts","reconnect","engine","skipReconnect","openSubDestroy","$vPX8d","errorSub","timer","onping","ondata","ondecoded","nsp","_destroy","active","_close","_packet","subDestroy","destroy","disconnect","reset","delay","duration","onreconnect","attempt","$fcab49da21a6222a$var$RESERVED_EVENTS","freeze","connect_error","disconnecting","newListener","$fcab49da21a6222a$export$4798917dbf149b79","connected","receiveBuffer","sendBuffer","ids","acks","flags","auth","disconnected","subEvents","onpacket","unshift","PacketType","EVENT","ack","pop","_registerAckCallback","isTransportWritable","volatile","notifyOutgoingListeners","CONNECT","onconnect","BINARY_EVENT","onevent","ACK","BINARY_ACK","onack","DISCONNECT","ondisconnect","CONNECT_ERROR","message","emitEvent","_anyListeners","sent","emitBuffered","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","$1e4e6e6cc3958162$export$a51d6b395ff4c65a","$1e4e6e6cc3958162$export$84d4095e16c6fc19","PacketType1","$1e4e6e6cc3958162$export$a50aceb0e02a00aa","replacer","$eGKCF","hasBinary","encodeAsString","encodeAsBinary","attachments","stringify","deconstruction","$8URBv","deconstructPacket","pack","buffers","$1e4e6e6cc3958162$export$f9de6ca0bc043724","reviver","decodeString","reconstructor","$1e4e6e6cc3958162$var$BinaryReconstructor","isBinary","takeBinaryData","start","buf","next","payload","tryParse","isPayloadValid","static","isArray","finishedReconstruction","reconPack","binData","reconstructPacket","$67dd224d5a131c9e$export$ac2edb9eb7af56f6","packetData","$67dd224d5a131c9e$var$_deconstructPacket","_placeholder","newData","$67dd224d5a131c9e$export$a00da3b1ec037a04","$67dd224d5a131c9e$var$_reconstructPacket","$ab192732c3780e48$var$withNativeArrayBuffer","$ab192732c3780e48$var$toString","$ab192732c3780e48$var$withNativeBlob","$ab192732c3780e48$var$withNativeFile","File","$ab192732c3780e48$export$37488ff1135b1696","$ab192732c3780e48$var$isView","$ab192732c3780e48$export$5234c529abdb5610","toJSON","$05fb321879039179$export$af631764ddc44097","$3f0f0eae169725b6$export$2d38012449449c89","ms","factor","pow","rand","random","deviation","$af87ae26bc22e0a3$export$950556173b6cbecb","radios","$3RHRn","DepthType","All","Bid","Ask","renderButtonGroup","ButtonGroup","$g4NtT","radio","idx","renderSelect","DepthLevel","Two","$fuNpx","Select","menuVariant","Option","renderTitle","Card","Title","Badge","badge","renderPrice","trend","PriceTrend","Equal","Up","green","Down","red","white","$j1eIZ","formatNumber","renderOrderList","orders","miniPrice","depthPriceDecimals","$5Kq8F","volumeSum","maxVolume","order","renderOrders","plus","sum","percent","times","$2sUhp","SpotOrderType","ListGroup","Item","backgroundSize","Header","Body","$bb4366fd148aaa09$export$81542e59773ce399","$bb4366fd148aaa09$export$d7f1bf221683375b","$bb4366fd148aaa09$export$61a6b4d3399863b6","$bb4366fd148aaa09$export$84bf76cd7afc7469","$bb4366fd148aaa09$export$a38bfcdc9e03eaa8","$bb4366fd148aaa09$export$1b4aee0b51c3def8","$bb4366fd148aaa09$export$fe0c27da941d48c6","$bb4366fd148aaa09$export$163338a71f1866be","$bb4366fd148aaa09$export$13bb94cc1bb431ac","$bb4366fd148aaa09$export$b1c2ad82f9995540","$bb4366fd148aaa09$export$4aebd143f31d0c0d","$bb4366fd148aaa09$export$5bec8eb0bdc7f0d9","$bb4366fd148aaa09$export$377817097f96120","$bb4366fd148aaa09$export$63c31deb8bd5d3d4","$bb4366fd148aaa09$export$4431f64c1e0164a8","$bb4366fd148aaa09$export$3b5f0228ff59d3b9","$bb4366fd148aaa09$export$1766dc9f9f2dd14","$bb4366fd148aaa09$export$c26b6b8d0c58f01b","$bb4366fd148aaa09$export$30b6dc633c1f7902","$bb4366fd148aaa09$export$321c0b1a406de31f","$bb4366fd148aaa09$export$955a2ebd2fb142ae","$bb4366fd148aaa09$export$a90204d1394caf30","$bb4366fd148aaa09$export$8fa4e5556fd77a60","$cdNtN","$ec10372c452549f6$export$983f3b759863328f","DepthLevel1","$ec10372c452549f6$export$ed4ee5d1e55474a5","DepthType1","$ec10372c452549f6$export$950556173b6cbecb","AuthBase","getDepth","createDepthActor","depthCanisterId","res","get_depth","bids","parseOriginDepth","Ok","asks","$eLiKN","CanisterError","Err","originData","toBigNumber","anonymous","createActor","$kiatt","idlFactory","$ec5d9d1588acab10$var$__createBinding","module","exports","__createBinding","o","k2","desc","getOwnPropertyDescriptor","__esModule","configurable","enumerable","get","defineProperty","$ec5d9d1588acab10$var$__exportStar","__exportStar","init","$h7GhG","$08b27c415293c825$export$1e511d4a378977f5","$c773e3dc4ea4d7ed$export$1e511d4a378977f5","$c773e3dc4ea4d7ed$export$2cd8252107eb640b","$c773e3dc4ea4d7ed$export$b2034e2ea8897403","IDL","CanisterNames","Variant","OrderbookDepth","Null","AmountToken","OrderbookKline","SELF","CanisterManagement","BucketManager","OrderbookTradeList","VolumeToken","EventStorage","Fusion","BalanceKeeper","StateExportData","Record","dev_named_canister_ids","Vec","Tuple","Principal","state_data","Nat8","ErrorInfo","Nat32","Text","StateExportResponse","OrderBookDepth","Nat","Result","BooleanActorResponse","Bool","GetVersionResponse","Nat64","Service","export_state","Func","Nat16","get_reverse_depth","get_wasm_info","load_state","trigger_event_processing","version","InitArgs","Opt","$4fec26593bde2dc8$export$71eca91c27092856","PriceTrend1","$4fec26593bde2dc8$export$28982c03c196c7e1","priceDecimalsShow","initialized","marketTickTimer","marketTickTimeInterval","fetchMyOpenOrderTimer","fetchMyOpenOrderInterval","marketActor","subNewPrice","quotaTokenId","$bCqTI","DFT","getTokenInfo","getMarketSetting","$9ylhw","DepthStore","$932bn","KLineStore","$4a11O","TradeHistoryStore","fusionActor","startMarketTickTimer","sessionSupervisorDisposer","isConnected","updateMyOpenOrders","startFetchMyOpenOrdersTimer","stopFetchMyOpenOrdersTimer","checkInitialized","fetchOpenOrders","afterOrderOperation","fetchTick","parseToCommon","toPrecision","multipliedBy","updateUserTradeList","stopMarketTickTimer","$3ca9619f1cac11c4$export$556c3a48a9e28265","fetchTimeInterval","marketStore","One","defaultDepthLevel","depthActor","fetchDepth","startFetchTimer","restartFetchTimer","newLevel","stopFetchTimer","depthTask","swapTask","fetchLiquidityInfo","swap","all","swapDepth","$cptKm","SwapDepth","liquidity","toBigInt","poolLP","poolVolume","amount","poolAmount","priceFixed","miniVolume","SWAP_DEPTH_VOLUME_FACTOR","bidOrderOption","direction","DepthDirection","deltaP","SWAP_DEPTH_PRICE_FACTOR","maxCount","minVolume","mapBidsOrders","depthItems","askOrderOption","mapAsksOrders","mergeOrders","ordersA","ordersB","Map","has","oldOrder","set","returnOrders","values","returnCount","comparedTo","$02cb38a44abae19d$export$8fef7050222c4109","DepthDirection1","$02cb38a44abae19d$export$8177e720482360ef","$02cb38a44abae19d$export$53901946b714f472","items","depthDict","dict","$02cb38a44abae19d$export$a66ecf07d0248ad1","$cj2h1","p0","decimalPlaces","pLast","gt","volumeLast","pNow","getPriceNow","pMin","pMax","squareRoot","volumeNow","lte","$21de1e09dfebd3af$export$1a9b8d76f4797280","maxTradeHistoryCount","tradeHistoryActor","$kjDQT","TradeHistory","tradeHistoryCanisterId","startFetchMyTradeHistoryTimer","stopFetchMyTradeHistoryTimer","fetchUserTradeList","$33e8a12c933a991b$export$dc397b0da942bb54","offset","$9YgT4","executeWithLogging","createTradeHistoryActor","get_user_trade_list","parseTrade","trade","order_direction","$ewW0L","$a9410daeddad89bb$var$__createBinding","$a9410daeddad89bb$var$__exportStar","$bKeP4","$91998ef657b038c8$export$1e511d4a378977f5","$88cf7d107048cc1b$export$1e511d4a378977f5","$88cf7d107048cc1b$export$2cd8252107eb640b","$88cf7d107048cc1b$export$b2034e2ea8897403","OrderDirection","TradeRecord","get_trade_list","$ddacabf4795646c4$export$fd70ae1e4f47c167","ticks","tickSpaceIndex","switchTickSpace","updateTicks","currentTick","tickIndex","warn","tickSpace","$e909be2c453ba951$var$bnSafe","bn","isNaN","zero","$e909be2c453ba951$export$32ec6abefa73480","changed","eq","$a66rf","btn","$fBpmM","IndexNumber","$g7sdx","priceFormatter","showIcon","$35b8fb94baf4d345$export$c83e6f467738e834","isGrow","isSame","$6oZza","faCaretUp","faMinus","faCaretDown","$759f757e68f48dd9$export$534219b709288da9","$759f757e68f48dd9$export$8f701197936bc2a6","$759f757e68f48dd9$export$9394863499631edf","$2fff68771c858513$var$defaultActionState","approvedAmount","submitting","input","pricePrecision","amountPrecision","validation","priceValid","priceInvalidMsg","amountValid","amountInvalidMsg","$2fff68771c858513$export$a63ebd99d34087f2","baseTokenBalance","quoteTokenBalance","bidState","askState","updateBalanceInterval","activeIDisposers","onTradeFormPriceChanged","checkPricePrecision","onBidPriceChanged","onAskPriceChanged","onTradeFormAmountChanged","checkAmountPrecision","onBidAmountChanged","onAskAmountChanged","onTradeFormSliderPercentChanged","onBidSliderPercentChanged","onAskSliderPercentChanged","onTradeFormSubmit","updateTokenBalances","userAddress","walletAuth","principal","baseRes","baseTokenActor","balanceOf","balance","quoteRes","quoteTokenActor","updateTokenAllowances","baseAllowance","getTokenAllowance","quoteAllowance","startTimer","updateBalanceTimer","stopTimer","restartTimer","updateBalancesReactionDisposer","bidOrderDepthClickItemDisposer","priceBN","askOrderDepthClickItemDisposer","disposer","validateBidPrice","bnLastPrice","lt","validateAskPrice","validateBidAmount","bnPrice","quoteTokenBalanceBN","maxBidAmount","amountFmt","validateAskAmount","transferFee","calcTransferFee","approveToken","DEFAULT_APPROVE_AMOUNT","$cOVdM","toastStore","parseToOrigin","amountBN","success","renderForm","isBuy","actionState","availableAmount","noValidate","$6nY0Q","bg","InputGroup","Control","getPrecision","isInvalid","Feedback","tooltip","$2xH21","RangeInput","colors","footer","$cBLmd","ChooseWallet","Button","disabled","Spinner","animation","spinner","renderTowards","towards","Tabs","tabs","Tab","eventKey","title","Row","$4a63714d05b69c52$export$39f5674517ec0000","$4a63714d05b69c52$export$dff840edf10f285e","$4a63714d05b69c52$export$534219b709288da9","$4a63714d05b69c52$export$641374ffb95bc399","$4a63714d05b69c52$export$7ef555c6aef20aec","$4a63714d05b69c52$export$c659e452bab99a57","$4a63714d05b69c52$export$bd4c6d3f752e8ef6","$4a63714d05b69c52$export$37957852aec08359","$4a63714d05b69c52$export$f85df913b3b63720","$4a63714d05b69c52$export$38e42c68cf43b5d4","$4a63714d05b69c52$export$adb608be33961c98","$4a63714d05b69c52$export$58006689be929417","$4a63714d05b69c52$export$a671e0480694f021","$4a63714d05b69c52$export$f5603a09670563b9","$ed02f7179293c681$export$f683d71531d28a01","onlyCurrentMarket","BigInt","cancelAll","myOrderSupervisor","filled","tradeHistorySupervisor","myOpenOrdersColumns","baseSymbol","toUpperCase","quoteSymbol","label","formatDateTime","createdAt","toFormat","$d0acp","TableInlineButton","kind","tradeHistoryColumns","toggleSwitch","renderOperator","$gcV9H","toggle","handle","renderNoData","renderMyOpenOrders","columns","IdeaTable","list","noneNode","renderTradeHistory","defaultActiveKey","action","$45bed6a52e64d7fe$export$5029fa4b808c2d8d","handleClick","finally","$bcca1a3417a37e95$export$6b49c933d8810e84","$bcca1a3417a37e95$export$7b2f6446b96abfef","$bcca1a3417a37e95$export$aeddb16902a8a28c","$bcca1a3417a37e95$export$f6e39d2fbf0452d3","$bcca1a3417a37e95$export$e03c1c3201ee8bb7","$bcca1a3417a37e95$export$89da14300d534261","$bcca1a3417a37e95$export$8f34ce051745d39e","$bcca1a3417a37e95$export$ba310d98d04c7900","$bcca1a3417a37e95$export$8bc5ee67b66bb4d3","$bcca1a3417a37e95$export$228f2bb1ec207cd5","$287f94a0f75add88$export$369b6b2b30582e8e","Class","$14Ta7","useLocation","useParams","pathname","search","globalThis","origin","parseURLData"],"version":3,"file":"Trading.8640e855.js.map"}