defmodule BinanceInterface do
alias BinanceInterface.Env
alias BinanceInterface.Streamer
import BinanceInterface.Normalizer
import BinanceInterface.Request
def stream_trades(base_currency, quote_currency) do
currency_pair = currency_pair(base_currency, quote_currency, :downcase)
{:ok, _pid} = Streamer.connect("wss://stream.binance.com:9443/ws/#{currency_pair}@trade")
end
def asset(currency), do: do_assets(currency)
def positive_assets(), do: do_assets()
defp do_assets(currency \\ nil) do
maybe_currency = maybe_currency(currency, :upcase)
request =
new_request(Env.base_url(), "/sapi/v3/asset/getUserAsset", Env.api_key())
|> add_header("Content-Type", "application/x-www-form-urlencoded")
|> maybe_add_body_data("asset", maybe_currency)
|> add_signature(Env.secret_key())
{:ok, response} =
Finch.build(:post, url(request), headers(request), body(request))
|> Finch.request(BinanceInterface.Finch)
response
|> Map.fetch!(:body)
|> Jason.decode!()
end
def exchange_info(), do: do_exchange_info()
def exchange_info(base_currency, quote_currency) do
currency_pair = currency_pair(base_currency, quote_currency, :upcase)
do_exchange_info(currency_pair)
end
def do_exchange_info(currency_pair \\ nil) do
request =
new_request("https://data.binance.com", "/api/v3/exchangeInfo")
|> maybe_add_body_data("symbol", currency_pair)
{:ok, response} =
Finch.build(:get, url(request), headers(request), body(request))
|> Finch.request(BinanceInterface.Finch, receive_timeout: 600_000)
response
|> Map.fetch!(:body)
|> Jason.decode!()
end
end