{"version":3,"sources":["jsdelivr-header.js","/npm/binbot-charts@0.7.4/src/main.tsx","/npm/binbot-charts@0.7.4/src/charting_library/charting_library.esm.js","/npm/binbot-charts@0.7.4/src/helpers.ts","/npm/binbot-charts@0.7.4/src/streaming.ts","/npm/binbot-charts@0.7.4/src/datafeed.ts"],"names":[],"mappings":"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","file":"/npm/binbot-charts@0.7.4/dist/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/binbot-charts@0.7.4/dist/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { FC, useEffect, useRef, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { type IOrderLine } from \"./charting-library-interfaces\";\nimport {\n  ResolutionString,\n  widget,\n} from \"./charting_library/\";\nimport Datafeed from \"./datafeed\";\n\nexport interface OrderLine extends IOrderLine {\n  id: string;\n  lineStyle?: number;\n}\n\ninterface TVChartContainerProps {\n  symbol?: string;\n  interval?: ResolutionString;\n  libraryPath?: string;\n  timescaleMarks?: any[];\n  orderLines?: OrderLine[];\n  height?: string;\n  onTick?: (event: any) => void;\n  getLatestBar?: (data: any) => void;\n}\n\nconst TVChartContainer: FC<TVChartContainerProps> = ({\n  symbol = \"BTCUSDT\",\n  interval = \"1h\" as ResolutionString,\n  libraryPath = \"/charting_library/\",\n  timescaleMarks = [],\n  orderLines = [],\n  height = \"calc(100vh - 80px)\",\n  onTick,\n  getLatestBar,\n}) => {\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  const [chartOrderLines, setChartOrderLines] = useImmer<any[]>([]);\n  const [widgetState, setWidgetState] = useImmer<any>(null);\n  const [symbolState] = useState<string | null>(null);\n  const prevTimescaleMarks = useRef<any[]>(timescaleMarks);\n\n  useEffect(() => {\n    if (!widgetState) {\n      initializeChart(interval);\n    }\n\n    if (orderLines && orderLines.length > 0) {\n      updateOrderLines(orderLines);\n    }\n\n    if (widgetState && symbol !== symbolState) {\n      widgetState.setSymbol(symbol, interval);\n    }\n\n    if (\n      widgetState &&\n      prevTimescaleMarks.current &&\n      timescaleMarks !== prevTimescaleMarks.current\n    ) {\n      widgetState._options.datafeed.timescaleMarks = timescaleMarks;\n      prevTimescaleMarks.current = timescaleMarks;\n    }\n  }, [orderLines, timescaleMarks]);\n\n  const initializeChart = (interval: ResolutionString) => {\n    const widgetOptions: any = {\n      symbol: symbol,\n      datafeed: new Datafeed(timescaleMarks, interval),\n      interval: interval,\n      container: containerRef.current,\n      library_path: libraryPath,\n      locale: \"en\",\n      fullscreen: false,\n      autosize: true,\n      studies_overrides: {},\n      symbol_search_request_delay: 1000,\n      overrides: {\n        volumePaneSize: \"small\",\n        \"mainSeriesProperties.barStyle.dontDrawOpen\": false,\n      },\n    };\n    const tvWidget = new widget(widgetOptions);\n\n    tvWidget.onChartReady(() => {\n      tvWidget.subscribe(\"onTick\", (event: any) => onTick && onTick(event));\n      setWidgetState(tvWidget);\n\n      // get latest bar for last price\n      const prices = async () => {\n        const data = await tvWidget.activeChart().exportData({\n          includeTime: false,\n          includeSeries: true,\n          includedStudies: [],\n        });\n        getLatestBar && getLatestBar(data.data[data.data.length - 1]);\n      };\n      prices();\n    });\n  };\n\n  const updateOrderLines = (orderLines: OrderLine[]) => {\n    if (chartOrderLines && chartOrderLines.length > 0) {\n      chartOrderLines.forEach((item) => {\n        orderLines.forEach((order) => {\n          if (item.id == order.id) {\n            item\n              .setText(order.text)\n              .setTooltip(order.tooltip)\n              .setQuantity(order.quantity)\n              .setPrice(order.price);\n          }\n        });\n      });\n    } else {\n      if (widgetState && orderLines && orderLines.length > 0) {\n        orderLines.forEach((order) => {\n          const lineStyle = order.lineStyle || 0;\n          let chartOrderLine = widgetState\n            .chart()\n            .createOrderLine()\n            .setText(order.text)\n            .setTooltip(order.tooltip)\n            .setQuantity(order.quantity)\n            .setQuantityFont(\"inherit 14px Arial\")\n            .setQuantityBackgroundColor(order.color)\n            .setQuantityBorderColor(order.color)\n            .setLineStyle(lineStyle)\n            .setLineLength(25)\n            .setLineColor(order.color)\n            .setBodyFont(\"inherit 14px Arial\")\n            .setBodyBorderColor(order.color)\n            .setBodyTextColor(order.color)\n            .setPrice(order.price);\n\n          // set custom id easier search\n          chartOrderLine.id = order.id;\n\n          setChartOrderLines((draft) => {\n            draft.push(chartOrderLine);\n            return draft;\n          });\n        });\n      }\n    }\n  };\n\n  return <div ref={containerRef} style={{ height: height }} />;\n};\n\nexport default TVChartContainer;","function e(t,i){const n={...t};for(const o in i)\"object\"!=typeof t[o]||null===t[o]||Array.isArray(t[o])?void 0!==i[o]&&(n[o]=i[o]):n[o]=e(t[o],i[o]);return n}const t={mobile:{disabled_features:[\"left_toolbar\",\"header_widget\",\"timeframes_toolbar\",\"edit_buttons_in_legend\",\"context_menus\",\"control_bar\",\"border_around_the_chart\"],enabled_features:[]}},i={width:800,height:500,interval:\"1D\",timezone:\"Etc/UTC\",container:\"\",library_path:\"\",locale:\"en\",widgetbar:{details:!1,watchlist:!1,watchlist_settings:{default_symbols:[]}},overrides:{\"mainSeriesProperties.showCountdown\":!1},studies_overrides:{},trading_customization:{position:{},order:{}},brokerConfig:{configFlags:{}},fullscreen:!1,autosize:!1,disabled_features:[],enabled_features:[],debug:!1,logo:{},time_frames:[{text:\"5y\",resolution:\"1W\"},{text:\"1y\",resolution:\"1W\"},{text:\"6m\",resolution:\"120\"},{text:\"3m\",resolution:\"60\"},{text:\"1m\",resolution:\"30\"},{text:\"5d\",resolution:\"5\"},{text:\"1d\",resolution:\"1\"}],client_id:\"0\",user_id:\"0\",charts_storage_api_version:\"1.0\",favorites:{intervals:[],chartTypes:[]}};let n=!1;function o(){return\"CL v21.064 (internal id f0bc1e45 @ 2022-03-17T12:19:26.809Z)\"}const s=class{constructor(o){if(this._id=`tradingview_${(1048576*(1+Math.random())|0).toString(16).substring(1)}`,this._ready=!1,this._readyHandlers=[],this._onWindowResize=this._autoResizeChart.bind(this),!o.datafeed)throw new Error(\"Datafeed is not defined\");if(this._options=e(i,o),o.preset){const e=t[o.preset];e?(void 0!==this._options.disabled_features?this._options.disabled_features=this._options.disabled_features.concat(e.disabled_features):this._options.disabled_features=e.disabled_features,void 0!==this._options.enabled_features?this._options.enabled_features=this._options.enabled_features.concat(e.enabled_features):this._options.enabled_features=e.enabled_features):console.warn(\"Unknown preset: `\"+o.preset+\"`\")}\"Dark\"===this._options.theme&&void 0===this._options.loading_screen&&(this._options.loading_screen={backgroundColor:\"#131722\"}),this._options.debug&&(n||(n=!0,console.log(\"Using CL v21.064 (internal id f0bc1e45 @ 2022-03-17T12:19:26.809Z)\"))),this._create()}onChartReady(e){this._ready?e.call(this):this._readyHandlers.push(e)}headerReady(){return this._innerWindowLoaded.then((()=>this._innerWindow().headerReady()))}onGrayedObjectClicked(e){this._doWhenInnerApiLoaded((t=>{t.onGrayedObjectClicked(e)}))}onShortcut(e,t){this._doWhenInnerWindowLoaded((i=>{i.createShortcutAction(e,t)}))}subscribe(e,t){this._doWhenInnerApiLoaded((i=>{i.subscribe(e,t)}))}unsubscribe(e,t){this._doWhenInnerApiLoaded((i=>{i.unsubscribe(e,t)}))}chart(e){return this._innerAPI().chart(e)}getLanguage(){return this._options.locale}setSymbol(e,t,i){this._innerAPI().changeSymbol(e,t,i)}remove(){window.removeEventListener(\"resize\",this._onWindowResize),this._readyHandlers.splice(0,this._readyHandlers.length),delete window[this._id],this._iFrame.parentNode&&this._iFrame.parentNode.removeChild(this._iFrame)}closePopupsAndDialogs(){this._doWhenInnerApiLoaded((e=>{e.closePopupsAndDialogs()}))}selectLineTool(e){this._innerAPI().selectLineTool(e)}selectedLineTool(){return this._innerAPI().selectedLineTool()}save(e){this._innerAPI().saveChart(e)}load(e,t){this._innerAPI().loadChart({json:e,extendedData:t})}getSavedCharts(e){this._innerAPI().getSavedCharts(e)}loadChartFromServer(e){this._innerAPI().loadChartFromServer(e)}saveChartToServer(e,t,i){this._innerAPI().saveChartToServer(e,t,i)}removeChartFromServer(e,t){this._innerAPI().removeChartFromServer(e,t)}onContextMenu(e){this._doWhenInnerApiLoaded((t=>{t.onContextMenu(e)}))}createButton(e){return this._innerWindow().createButton(e)}createDropdown(e){return this._innerWindow().createDropdown(e)}showNoticeDialog(e){this._doWhenInnerApiLoaded((t=>{t.showNoticeDialog(e)}))}showConfirmDialog(e){this._doWhenInnerApiLoaded((t=>{t.showConfirmDialog(e)}))}showLoadChartDialog(){this._innerAPI().showLoadChartDialog()}showSaveAsChartDialog(){this._innerAPI().showSaveAsChartDialog()}symbolInterval(){return this._innerAPI().getSymbolInterval()}mainSeriesPriceFormatter(){return this._innerAPI().mainSeriesPriceFormatter()}getIntervals(){return this._innerAPI().getIntervals()}getStudiesList(){return this._innerAPI().getStudiesList()}getStudyInputs(e){return this._innerAPI().getStudyInputs(e)}addCustomCSSFile(e){this._innerWindow().addCustomCSSFile(e)}applyOverrides(t){this._options=e(this._options,{overrides:t}),this._doWhenInnerWindowLoaded((e=>{e.applyOverrides(t)}))}applyStudiesOverrides(e){this._doWhenInnerWindowLoaded((t=>{t.applyStudiesOverrides(e)}))}watchList(){return this._innerAPI().watchlist()}news(){return this._innerAPI().news()}activeChart(){return this._innerAPI().activeChart()}chartsCount(){return this._innerAPI().chartsCount()}layout(){return this._innerAPI().layout()}setLayout(e){this._innerAPI().setLayout(e)}layoutName(){return this._innerAPI().layoutName()}changeTheme(e,t){return this._innerWindow().changeTheme(e,t)}getTheme(){return this._innerWindow().getTheme()}takeScreenshot(){this._doWhenInnerApiLoaded((e=>{e.takeScreenshot()}))}lockAllDrawingTools(){return this._innerAPI().lockAllDrawingTools()}hideAllDrawingTools(){return this._innerAPI().hideAllDrawingTools()}drawOnAllCharts(e){this._innerAPI().drawOnAllCharts(e)}magnetEnabled(){return this._innerAPI().magnetEnabled()}magnetMode(){return this._innerAPI().magnetMode()}undoRedoState(){return this._innerAPI().undoRedoState()}setIntervalLinkingEnabled(e){this._innerAPI().setIntervalLinkingEnabled(e)}setTimeFrame(e){this._innerAPI().setTimeFrame(e)}symbolSync(){return this._innerAPI().symbolSync()}intervalSync(){return this._innerAPI().intervalSync()}crosshairSync(){return this._innerAPI().crosshairSync()}timeSync(){return this._innerAPI().timeSync()}getAllFeatures(){return this._innerWindow().getAllFeatures()}clearUndoHistory(){return this._innerAPI().clearUndoHistory()}undo(){return this._innerAPI().undo()}redo(){return this._innerAPI().redo()}startFullscreen(){this._innerAPI().startFullscreen()}exitFullscreen(){this._innerAPI().exitFullscreen()}takeClientScreenshot(e){return this._innerAPI().takeClientScreenshot(e)}navigationButtonsVisibility(){return this._innerWindow().getNavigationButtonsVisibility()}paneButtonsVisibility(){return this._innerWindow().getPaneButtonsVisibility()}dateFormat(){return this._innerWindow().getDateFormat()}_innerAPI(){return this._innerWindow().tradingViewApi}_innerWindow(){return this._iFrame.contentWindow}_doWhenInnerWindowLoaded(e){this._ready?e(this._innerWindow()):this._innerWindowLoaded.then((()=>{e(this._innerWindow())}))}_doWhenInnerApiLoaded(e){this._doWhenInnerWindowLoaded((t=>{t.doWhenApiIsReady((()=>e(this._innerAPI())))}))}_autoResizeChart(){this._options.fullscreen&&(this._iFrame.style.height=window.innerHeight+\"px\")}_create(){const e=this._render();this._options.container_id&&console.warn(\"`container_id` is now deprecated. Please use `container` instead to either still pass a string or an `HTMLElement`.\");const t=this._options.container_id||this._options.container,i=\"string\"==typeof t?document.getElementById(t):t;if(null===i)throw new Error(`There is no such element - #${this._options.container}`);i.innerHTML=e,this._iFrame=i.querySelector(`#${this._id}`);const n=this._iFrame;(this._options.autosize||this._options.fullscreen)&&(n.style.width=\"100%\",this._options.fullscreen||(n.style.height=\"100%\")),window.addEventListener(\"resize\",this._onWindowResize),this._onWindowResize(),this._innerWindowLoaded=new Promise((e=>{const t=()=>{n.removeEventListener(\"load\",t,!1),e()};n.addEventListener(\"load\",t,!1)})),this._innerWindowLoaded.then((()=>{this._innerWindow().widgetReady((()=>{this._ready=!0;for(const e of this._readyHandlers)try{e.call(this)}catch(e){console.error(e)}this._innerWindow().initializationFinished()}))}))}_render(){const e=window;if(e[this._id]={datafeed:this._options.datafeed,customFormatters:this._options.custom_formatters||this._options.customFormatters,brokerFactory:this._options.broker_factory||this._options.brokerFactory,overrides:this._options.overrides,studiesOverrides:this._options.studies_overrides,tradingCustomization:this._options.trading_customization,disabledFeatures:this._options.disabled_features,enabledFeatures:this._options.enabled_features,brokerConfig:this._options.broker_config||this._options.brokerConfig,restConfig:this._options.restConfig,favorites:this._options.favorites,logo:this._options.logo,numeric_formatting:this._options.numeric_formatting,rss_news_feed:this._options.rss_news_feed,newsProvider:this._options.news_provider,loadLastChart:this._options.load_last_chart,saveLoadAdapter:this._options.save_load_adapter,loading_screen:this._options.loading_screen,settingsAdapter:this._options.settings_adapter,getCustomIndicators:this._options.custom_indicators_getter,additionalSymbolInfoFields:this._options.additional_symbol_info_fields,headerWidgetButtonsMode:this._options.header_widget_buttons_mode,symbolSearchComplete:this._options.symbol_search_complete},this._options.saved_data)e[this._id].chartContent={json:this._options.saved_data},this._options.saved_data_meta_info&&(e[this._id].chartContentExtendedData=this._options.saved_data_meta_info);else if(!this._options.load_last_chart&&!this._options.symbol)throw new Error(\"Symbol is not defined: either 'symbol' or 'load_last_chart' option must be set\");const t=(this._options.library_path||\"\")+`${encodeURIComponent(this._options.locale)}-tv-chart.f0bc1e45.html#symbol=`+encodeURIComponent(this._options.symbol||\"\")+\"&interval=\"+encodeURIComponent(this._options.interval)+(this._options.timeframe?\"&timeframe=\"+encodeURIComponent(this._options.timeframe):\"\")+(this._options.toolbar_bg?\"&toolbarbg=\"+encodeURIComponent(this._options.toolbar_bg.replace(\"#\",\"\")):\"\")+(this._options.studies_access?\"&studiesAccess=\"+encodeURIComponent(JSON.stringify(this._options.studies_access)):\"\")+\"&widgetbar=\"+encodeURIComponent(JSON.stringify(this._options.widgetbar))+(this._options.drawings_access?\"&drawingsAccess=\"+encodeURIComponent(JSON.stringify(this._options.drawings_access)):\"\")+\"&timeFrames=\"+encodeURIComponent(JSON.stringify(this._options.time_frames))+\"&locale=\"+encodeURIComponent(this._options.locale)+\"&uid=\"+encodeURIComponent(this._id)+\"&clientId=\"+encodeURIComponent(String(this._options.client_id))+\"&userId=\"+encodeURIComponent(String(this._options.user_id))+(this._options.charts_storage_url?\"&chartsStorageUrl=\"+encodeURIComponent(this._options.charts_storage_url):\"\")+(this._options.charts_storage_api_version?\"&chartsStorageVer=\"+encodeURIComponent(this._options.charts_storage_api_version):\"\")+(this._options.custom_css_url?\"&customCSS=\"+encodeURIComponent(this._options.custom_css_url):\"\")+(this._options.auto_save_delay?\"&autoSaveDelay=\"+encodeURIComponent(String(this._options.auto_save_delay)):\"\")+\"&debug=\"+encodeURIComponent(String(this._options.debug))+(this._options.snapshot_url?\"&snapshotUrl=\"+encodeURIComponent(this._options.snapshot_url):\"\")+(this._options.timezone?\"&timezone=\"+encodeURIComponent(this._options.timezone):\"\")+(this._options.study_count_limit?\"&studyCountLimit=\"+encodeURIComponent(String(this._options.study_count_limit)):\"\")+(this._options.symbol_search_request_delay?\"&ssreqdelay=\"+encodeURIComponent(String(this._options.symbol_search_request_delay)):\"\")+(this._options.compare_symbols?\"&compareSymbols=\"+encodeURIComponent(JSON.stringify(this._options.compare_symbols)):\"\")+(this._options.theme?\"&theme=\"+encodeURIComponent(String(this._options.theme)):\"\")+(this._options.header_widget_buttons_mode?\"&header_widget_buttons_mode=\"+encodeURIComponent(String(this._options.header_widget_buttons_mode)):\"\")+(this._options.time_scale?\"&time_scale=\"+encodeURIComponent(JSON.stringify(this._options.time_scale)):\"\");return'<iframe id=\"'+this._id+'\" name=\"'+this._id+'\"  src=\"'+t+'\"'+(this._options.autosize||this._options.fullscreen?\"\":' width=\"'+this._options.width+'\" height=\"'+this._options.height+'\"')+' title=\"Financial Chart\" frameborder=\"0\" allowTransparency=\"true\" scrolling=\"no\" allowfullscreen style=\"display:block;\"></iframe>'}};window.TradingView=window.TradingView||{},window.TradingView.version=o;export{o as version,s as widget};\n","import { useEffect, useRef } from \"react\";\n\n\nexport async function makeApiRequest(path) {\n  try {\n    const response = await fetch(`https://api.binance.com/${path}`);\n    return response.json();\n  } catch (error) {\n    throw new Error(`Binance request error: ${error.status}`);\n  }\n}\n\nexport async function getAllSymbols(symbol) {\n  let newSymbols = [];\n  try {\n    const data = await makeApiRequest(`api/v3/exchangeInfo?symbol=${symbol.toUpperCase()}`);\n    data.symbols.forEach(item => {\n      if (item.status === \"TRADING\") {\n        newSymbols.push({\n          symbol: item.symbol,\n          full_name: `${item.baseAsset}/${item.quoteAsset}`,\n          description: `Precision: ${item.quoteAssetPrecision}`,\n          exchange: \"Binance\",\n          ticker: item.symbol,\n          type: \"crypto\",\n        });\n      }\n    });\n  } catch (e) {\n    return newSymbols\n  }\n  return newSymbols;\n}\n\nexport function usePrevious(value) {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\n\nexport function roundTime(ts: number): number {\n  /**\n   * @param ts a JavaScript new Date().getTime() timestamp\n   */\n  let time = new Date(ts);\n  time.setMinutes(0);\n  time.setSeconds(0)\n  time.setMilliseconds(0);\n  const roundFloor = time.getTime();\n  return roundFloor / 1000\n}","const channelToSubscription = new Map();\n\ndeclare global {\n  interface Window { socket: WebSocket; }\n}\n\nfunction setupSockets(subRequest) {\n  const socket: WebSocket = new WebSocket(\"wss://stream.binance.com:9443/ws\");\n  window.socket = socket;\n  socket.onopen = (event) => {\n    console.log(\"[socket] Connected\");\n    socket.send(JSON.stringify(subRequest));\n  };\n\n  socket.onclose = (reason) => {\n    console.log(\"[socket] Disconnected:\", reason);\n  };\n\n  socket.onerror = (error) => {\n    console.log(\"[socket] Error:\", error);\n  };\n\n  socket.onmessage = (e) => {\n    const data = JSON.parse(e.data);\n    if (data.e == undefined) {\n      // skip all non-TRADE events\n      return;\n    }\n    const {\n      s: symbol,\n      t: startTime,\n      T: closeTime,\n      i: interval,\n      o: open,\n      c: close,\n      h: high,\n      l: low,\n      v: volume,\n      n: trades,\n      q: quoteVolume,\n    } = data.k;\n\n    const channelString = `${symbol.toLowerCase()}@kline_${interval}`;\n    const subscriptionItem = channelToSubscription.get(channelString);\n    if (subscriptionItem === undefined) {\n      return;\n    }\n    const bar = {\n      time: startTime,\n      // Binance stream payload kline fields are strings; convert to numbers\n      open: parseFloat(open),\n      high: parseFloat(high),\n      low: parseFloat(low),\n      close: parseFloat(close),\n      volume: parseFloat(volume),\n    };\n    // send data to every subscriber of that symbol\n    subscriptionItem.handlers.forEach((handler) => handler.callback(bar));\n  };\n}\n\nexport function subscribeOnStream(\n  symbolInfo,\n  resolution,\n  onRealtimeCallback,\n  subscribeUID,\n  onResetCacheNeededCallback,\n  interval\n) {\n  const channelString = `${symbolInfo.name.toLowerCase()}@kline_${interval}`;\n  const handler = {\n    id: subscribeUID,\n    callback: onRealtimeCallback,\n  };\n  let subscriptionItem = channelToSubscription.get(channelString);\n  if (subscriptionItem) {\n    // already subscribed to the channel, use the existing subscription\n    subscriptionItem.handlers.push(handler);\n    return;\n  }\n  subscriptionItem = {\n    subscribeUID,\n    resolution,\n    handlers: [handler],\n  };\n  const subRequest = {\n    method: \"SUBSCRIBE\",\n    params: [channelString],\n    id: 1,\n  };\n  channelToSubscription.set(channelString, subscriptionItem);\n  setupSockets(subRequest);\n}\n\nexport function unsubscribeFromStream(subscriberUID) {\n  // find a subscription with id === subscriberUID\n  for (const channelString of channelToSubscription.keys()) {\n    const subscriptionItem = channelToSubscription.get(channelString);\n    const handlerIndex = subscriptionItem.handlers.findIndex(\n      (handler) => handler.id === subscriberUID\n    );\n\n    if (handlerIndex !== -1) {\n      // remove from handlers\n      subscriptionItem.handlers.splice(handlerIndex, 1);\n\n      if (subscriptionItem.handlers.length === 0) {\n        // unsubscribe from the channel, if it was the last handler\n        console.log(\n          \"[unsubscribeBars]: Unsubscribe from streaming. Channel:\",\n          channelString\n        );\n        const subRequest = {\n          method: \"UNSUBSCRIBE\",\n          params: [channelString],\n          id: 1,\n        };\n        window.socket.send(JSON.stringify(subRequest));\n        channelToSubscription.delete(channelString);\n        window.socket = undefined;\n        break;\n      }\n    }\n  }\n}\n","import { getAllSymbols, makeApiRequest } from \"./helpers\";\nimport { subscribeOnStream, unsubscribeFromStream } from \"./streaming\";\n\nenum BinanceResolutions {\n  one_second = \"1s\",\n  one_minute = \"1m\",\n  three_minute = \"3m\",\n  five_minute = \"5m\",\n  fifteen_minute = \"15m\",\n  thirty_minute = \"30m\",\n  one_hour = \"1h\",\n  two_hour = \"2h\",\n  four_hour = \"4h\",\n  six_hour = \"6h\",\n  eight_hour = \"8h\",\n  twelve_hour = \"12h\",\n  one_day = \"1d\",\n  three_day = \"3d\",\n  one_week = \"1w\",\n  one_month = \"1M\",\n}\n\ninterface ConfigurationData {\n  supports_marks: boolean;\n  supports_timescale_marks: boolean;\n  supports_time: boolean;\n  supported_resolutions: string[];\n  exchanges: { value: string; name: string; desc: string }[];\n  symbols_types: { name: string; value: string }[];\n}\n\nconst getConfigurationData = async (): Promise<ConfigurationData> => {\n  return {\n    supports_marks: true,\n    supports_timescale_marks: true,\n    supports_time: true,\n    supported_resolutions: [\n      \"1S\",\n      \"1\",\n      \"3\",\n      \"5\",\n      \"15\",\n      \"30\",\n      \"60\",\n      \"120\",\n      \"240\",\n      \"360\",\n      \"480\",\n      \"720\",\n      \"1D\",\n      \"3D\",\n      \"1W\",\n      \"12M\",\n    ],\n    exchanges: [\n      {\n        value: \"Binance\",\n        name: \"Binance\",\n        desc: \"Binance\",\n      },\n    ],\n    symbols_types: [\n      {\n        name: \"crypto\",\n        value: \"crypto\",\n      },\n    ],\n  };\n};\n\ninterface TimescaleMark {\n  id: string;\n  time: number;\n  color: string;\n  label: string;\n  tooltip: string;\n}\n\ninterface SymbolInfo {\n  name: string;\n  ticker: string;\n  description: string;\n  type: string;\n  session: string;\n  timezone: string;\n  exchange: string;\n  minmov: number;\n  pricescale: number;\n  has_daily: boolean;\n  has_intraday: boolean;\n  has_no_volume: boolean;\n  has_seconds: boolean;\n  seconds_multipliers: number[];\n  volume: string;\n  volume_precision: number;\n  data_status: string;\n  resolution: string;\n}\n\ninterface PeriodParams {\n  from: number;\n  to: number;\n  firstDataRequest: boolean;\n}\n\ninterface Bar {\n  time: number;\n  low: number;\n  high: number;\n  open: number;\n  close: number;\n  volume: number;\n}\n\nexport default class Datafeed {\n  private streaming: any;\n  private timescaleMarks: TimescaleMark[];\n  private interval: string;\n  private configurationData: ConfigurationData | null = null;\n\n  constructor(timescaleMarks: TimescaleMark[] = [], interval: string = \"1h\") {\n    this.streaming = null;\n    this.timescaleMarks = timescaleMarks;\n    this.interval = interval;\n  }\n\n  onReady = async (callback: (data: ConfigurationData) => void): Promise<void> => {\n    this.configurationData = await getConfigurationData();\n    callback(this.configurationData);\n  };\n\n  searchSymbols = async (\n    userInput: string,\n    exchange: string,\n    symbolType: string,\n    onResultReadyCallback: (symbols: any[]) => void\n  ): Promise<void> => {\n    const symbols = await getAllSymbols(userInput);\n    onResultReadyCallback(symbols);\n  };\n\n  resolveSymbol = async (\n    symbolName: string,\n    onSymbolResolvedCallback: (symbolInfo: SymbolInfo) => void,\n    onResolveErrorCallback: (error: string) => void\n  ): Promise<void> => {\n    if (!symbolName) {\n      await onResolveErrorCallback(\"cannot resolve symbol\");\n      return;\n    }\n\n    const symbolInfo = async (): Promise<SymbolInfo> => {\n\n      const symbolData = await makeApiRequest(`api/v3/exchangeInfo?symbol=${symbolName}`);\n      const priceScale = symbolData.symbols[0].baseAssetPrecision;\n\n      return {\n        name: symbolName,\n        ticker: symbolName,\n        description: symbolName,\n        type: \"crypto\",\n        session: \"24x7\",\n        timezone: \"Etc/UTC\",\n        exchange: \"Binance\",\n        minmov: 1,\n        pricescale: 10 ** parseFloat(priceScale),\n        has_daily: true,\n        has_intraday: true,\n        has_no_volume: false,\n        has_seconds: true,\n        seconds_multipliers: [1],\n        volume: \"hundreds\",\n        volume_precision: 9,\n        data_status: \"streaming\",\n        resolution: \"1h\",\n      };\n    };\n    const symbol = await symbolInfo();\n    console.log(\"Resolve requested for:\", symbol);\n\n    onSymbolResolvedCallback(symbol);\n  };\n\n  getBars = async (\n    symbolInfo: SymbolInfo,\n    resolution: string,\n    periodParams: PeriodParams,\n    onHistoryCallback: (bars: Bar[], meta: { noData: boolean }) => void,\n    onErrorCallback: (error: any) => void\n  ): Promise<void> => {\n    const { from, to, firstDataRequest } = periodParams;\n    let interval = \"60\"; // 1 hour\n    // Calculate interval using resolution data\n    if (!/[a-zA-Z]$/.test(resolution)) {\n      if (parseInt(resolution) >= 60) {\n        interval = parseInt(resolution) / 60 + \"h\";\n      } else {\n        interval = resolution + \"m\";\n      }\n    } else {\n      interval = resolution.toLowerCase().replace(/[a-z]\\b/g, (c) => c.toLowerCase());\n    }\n\n    let urlParameters = {\n      symbol: symbolInfo.name,\n      interval: interval,\n      startTime: Math.abs(from * 1000),\n      endTime: Math.abs(to * 1000),\n      limit: 600,\n    };\n\n    const query = Object.keys(urlParameters)\n      .map((name) => `${name}=${encodeURIComponent(urlParameters[name])}`)\n      .join(\"&\");\n\n    try {\n      const data = await makeApiRequest(`api/v3/uiKlines?${query}`);\n      if ((data.Response && data.Response === \"Error\") || data.length === 0) {\n        // \"noData\" should be set if there is no data in the requested period.\n        onHistoryCallback([], {\n          noData: true,\n        });\n        return;\n      }\n      let bars: Bar[] = [];\n      data.forEach((bar: any) => {\n        if (bar[0] >= from * 1000 && bar[0] < to * 1000) {\n          // Binance returns string values; convert to numbers so the library can compute volume\n          const open = parseFloat(bar[1]);\n          const high = parseFloat(bar[2]);\n          const low = parseFloat(bar[3]);\n          const close = parseFloat(bar[4]);\n          const volume = parseFloat(bar[5]);\n          bars = [\n            ...bars,\n            {\n              time: bar[0],\n              low,\n              high,\n              open,\n              close,\n              volume,\n            },\n          ];\n        }\n      });\n      onHistoryCallback(bars, {\n        noData: false,\n      });\n    } catch (error) {\n      console.log(\"[getBars]: Get error\", error);\n      onErrorCallback(error);\n    }\n  };\n\n  getTimescaleMarks(\n    symbolInfo: SymbolInfo,\n    from: number,\n    to: number,\n    onDataCallback: (marks: TimescaleMark[]) => void,\n    resolution: string\n  ): void {\n    if (this.timescaleMarks.length > 0) {\n      let timescaleMarks = Object.assign([], this.timescaleMarks);\n      onDataCallback(timescaleMarks);\n    }\n  }\n\n  async getServerTime(onServertimeCallback: (time: number) => void): Promise<void> {\n    const data = await makeApiRequest(`api/v3/time`);\n    const serverTime = data.serverTime / 1000;\n    onServertimeCallback(serverTime);\n  }\n\n  subscribeBars = (\n    symbolInfo: SymbolInfo,\n    resolution: string,\n    onRealtimeCallback: (bar: Bar) => void,\n    subscribeUID: string,\n    onResetCacheNeededCallback: () => void\n  ): void => {\n    subscribeOnStream(\n      symbolInfo,\n      resolution,\n      onRealtimeCallback,\n      subscribeUID,\n      onResetCacheNeededCallback,\n      this.interval\n    );\n  };\n\n  unsubscribeBars = (subscriberUID: string): void => {\n    unsubscribeFromStream(subscriberUID);\n  };\n}\n"]}