npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node.bittrex.api-mod

v0.7.4

Published

Node Bittrex API - asynchronous node.js library for the Bittrex API https://bittrex.com/

Downloads

4

Readme

Node Bittrex API

Node Bittrex API is an asynchronous node.js library for the Bittrex API - https://bittrex.com/. The Bittrex API data can be received either as a GET request or via Websockets API.

Documentation for the Bittrex API: https://bittrex.com/Home/Api

This Library is licensed under the MIT license.

Contributors

Thanks go to the people who have contributed code to this Library.

Before you start

This is just a quick reminder that you are handling coins with this library (and thus real money), so, understand the situation as much as possible and make everything to prevent losing them.

Here is a small checklist you should go through before you start:

  • Make sure you don't give your api key more rights as absolutely necessary - for first testing READ INFO alone should be enough! (bittrex.com under: Settings/API Keys)

bittrex_ap_keys_control

  • make sure to understand the API Key permissions
    1. READ INFO - Allows you to read private details such as open orders, order history, balances, etc
    2. TRADE LIMIT - Allows you to create/cancel trade limit buy/sell orders
    3. TRADE MARKET - allows you to create/cancel market buy/sell orders
    4. WITHDRAW - Allows you to withdraw to another address
  • Make use of the Bittrex IP Whitelist as also the Withdrawal Whitelist features
  • Do not ever commit your API Keys to GitHub or expose them under any circumstances!

Quick start

$ npm install node.bittrex.api
var bittrex = require('node.bittrex.api');
bittrex.options({
  'apikey' : API_KEY,
  'apisecret' : API_SECRET,
});
bittrex.getmarketsummaries( function( data, err ) {
  if (err) {
    return console.error(err);
  }
  for( var i in data.result ) {
    bittrex.getticker( { market : data.result[i].MarketName }, function( ticker ) {
      console.log( ticker );
    });
  }
});

Advanced start

fetch the project via git:

$ git clone https://github.com/dparlevliet/node.bittrex.api.git

then meet the package dependencies:

$ cd node-bittrex-api/
$ npm install

include node.bittrex.api.js into your project:

var bittrex = require('./node.bittrex.api.js');
configure
bittrex.options({
  'apikey' : API_KEY,
  'apisecret' : API_SECRET,
  'verbose' : true,
  'cleartext' : false
});

By default the returned data is an object, in order to get clear text you have to add the option cleartext (streams will always return text):

'cleartext' : true

The baseUrl itself can also be set via options

'baseUrl' : 'https://bittrex.com/api/v1',
'baseUrlv2' : 'https://bittrex.com/Api/v2.0',

Change the callbacks arguments sequence

'inverse_callback_arguments' : true,

This simply changes the sequence in which the arguments are passed, instead of e.g.:

getmarkethistory({market : 'USDT-BTC'}, function(data, error) {});

you'll get the reversed order:

getmarkethistory({market : 'USDT-BTC'}, function(error, data) {});

Websockets

Basic example

bittrex.websockets.client(function() {
  console.log('Websocket connected');
  bittrex.websockets.subscribe(['BTC-ETH'], function(data) {
    if (data.M === 'updateExchangeState') {
      data.A.forEach(function(data_for) {
        console.log('Market Update for '+ data_for.MarketName, data_for);
      });
    }
  });
});

Basic example with event emitters

bittrex.options({
  websockets: {
    onConnect: function() {
      console.log('Websocket connected');
      bittrex.websockets.subscribe(['BTC-ETH'], function(data) {
        if (data.M === 'updateExchangeState') {
          data.A.forEach(function(data_for) {
            console.log('Market Update for '+ data_for.MarketName, data_for);
          });
        }
      });
    },
    onDisconnect: function() {
      console.log('Websocket disconnected');
    }
  }
});

var websocketClient;
bittrex.websockets.client(function(client) {
  websocketClient = client;
});

Available methods

All of these methods will build a websocket client and attempt a connection if you have not run websockets.client yourself. See examples/ for a better understanding.

websockets.listen

bittrex.websockets.listen(function(data, client) {
  if (data.M === 'updateSummaryState') {
    data.A.forEach(function(data_for) {
      data_for.Deltas.forEach(function(marketsDelta) {
        console.log('Ticker Update for '+ marketsDelta.MarketName, marketsDelta);
      });
    });
  }
});

websockets.subscribe

bittrex.websockets.subscribe(['BTC-ETH','BTC-SC','BTC-ZEN'], function(data, client) {
  if (data.M === 'updateExchangeState') {
    data.A.forEach(function(data_for) {
      console.log('Market Update for '+ data_for.MarketName, data_for);
    });
  }
});

Websocket serviceHandlers example

You can override the libraries logic for the following events. Note, this will replace the libraries logic.

websocketClient.serviceHandlers.reconnecting = function (message) {
  return true; // set to true stops reconnect/retrying
}

websocketClient.serviceHandlers.messageReceived = function (message) {
  console.log(message); // the messages received must be parsed as json first e.g. via jsonic(message.utf8Data)
}

all possible serviceHandlers

bound: function() { console.log("Websocket bound"); },
connectFailed: function(error) { console.log("Websocket connectFailed: ", error); },
connected: function(connection) { console.log("Websocket connected"); },
disconnected: function() { console.log("Websocket disconnected"); },
onerror: function (error) { console.log("Websocket onerror: ", error); },
messageReceived: function (message) { console.log("Websocket messageReceived: ", message); return false; },
bindingError: function (error) { console.log("Websocket bindingError: ", error); },
connectionLost: function (error) { console.log("Connection Lost: ", error); },
reconnecting: function (retry { inital: true/false, count: 0} ) {
  console.log("Websocket Retrying: ", retry);
  //return retry.count >= 3; // cancel retry true
  return true;
}

Streams

Streams have been removed

Examples

After configuration you can use the object right away: example #1

bittrex.getmarketsummaries( function( data, err ) {
  if (err) {
    return console.error(err);
  }
  for( var i in data.result ) {
    bittrex.getticker( { market : data.result[i].MarketName }, function( ticker ) {
      console.log( ticker );
    });
  }
});

example #2

bittrex.getbalance({ currency : 'BTC' }, function( data, err ) {
  if (err) {
    return console.error(err);
  }
  console.log( data );
});

Libraries

Websockets depends on the following npm packages:

  • signalR websockets client https://www.npmjs.com/package/signalrjs
  • jsonic JSON parser https://www.npmjs.com/package/jsonic
  • cloudscraper https://www.npmjs.com/package/cloudscraper

Other libraries utilized:

  • request https://www.npmjs.org/package/request

For HmacSHA512 this package is using a part of Googles Crypto.js (the node crypt package could not provide any appropriate result).

  • http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha512.js

Error examples

Example of request/domain based errors (not Bittrex API error)

var url = 'http://fake.bittrex.com/api/v1.1/public/getticker?market=USDT-BTCXXX';
bittrex.sendCustomRequest( url, function( data, err ) {
  if (err) {
    /**
      {
        success: false,
        message: 'URL request error',
        error:
         { Error: getaddrinfo ENOTFOUND fake.bittrex.com fake.bittrex.com:80
             at errnoException (dns.js:28:10)
             at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
           code: 'ENOTFOUND',
           errno: 'ENOTFOUND',
           syscall: 'getaddrinfo',
           hostname: 'fake.bittrex.com',
           host: 'fake.bittrex.com',
           port: 80 },
        result: undefined
      }
    */
    return console.error(err);
  }
  console.log(data);
});

Example of request/url based errors (not Bittrex API error)

var url = 'http://bittrex.com/api/v1.1/public/getfakeendpoint';
bittrex.sendCustomRequest( url, function( data, err ) {
  if (err) {
    /**
      {
        success: false,
        message: 'URL request error',
        error: undefined,
        result: {
          statusCode: 404,
          statusMessage: 'Not Found',
          body: '<!DOCTYPE html>\r\n<html > ...'
        }
      }
    */
    return console.error(err);
  }
  console.log(data);
});

Example of Bittrex API error

bittrex.getcandles({
  marketName: 'USDT-BTC',
  tickInterval: 300
}, function(data, err) {
  if (err) {
    /**
      {
        success: false,
        message: 'INVALID_TICK_INTERVAL',
        result: null
      }
    */
    return console.error(err);
  }
  console.log(data);
});

Methods

Optional parameters may have to be looked up at https://bittrex.com/Home/Api.

It may happen that some Bittrex API methods are missing, also they could have been forgotten in the documentation. In this case, if this strikes you, feel free to open a issue or send me a pull request.

Also: the method sendCustomRequest enables completely custom requests, regardless the specific API methods.

sendCustomRequest
  • url String
  • callback Function
  • credentials Boolean optional whether the credentials should be applied to the request/stream or not, default is set to false.

example #1

var url = 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LTC';
bittrex.sendCustomRequest( url, function( data, err ) {
  console.log( data );
});

example #2 (credentials applied to request/stream)

bittrex.sendCustomRequest( 'https://bittrex.com/api/v1.1/account/getbalances?currency=BTC', function( data, err ) {
  console.log( data );
}, true );

will result in (the Header is being set too):
https://bittrex.com/api/v1.1/account/getbalances?currency=BTC&apikey=API_KEY&nonce=4456490600
getticker
bittrex.getticker( { market : 'BTC-LTC' }, function( data, err ) {
  console.log( data );
});
getbalances
bittrex.getbalances( function( data, err ) {
  console.log( data );
});
getmarkethistory
bittrex.getmarkethistory({ market : 'BTC-LTC' }, function( data, err ) {
  console.log( data );
});
getcandles (v2 method)
bittrex.getcandles({
  marketName: 'USDT-BTC',
  tickInterval: 'fiveMin', // intervals are keywords
}, function( data, err ) {
  console.log( data );
});
getmarketsummaries
bittrex.getmarketsummaries( function( data, err ) {
  console.log( data );
});
getmarketsummary
bittrex.getmarketsummary( { market : 'BTC-LTC'}, function( data, err ) {
  console.log( data );
});
getorderbook
bittrex.getorderbook({ market : 'BTC-LTC', depth : 10, type : 'both' }, function( data, err ) {
  console.log( data );
});
getwithdrawalhistory
bittrex.getwithdrawalhistory({ currency : 'BTC' }, function( data, err ) {
  console.log( data );
});
getdepositaddress
bittrex.getdepositaddress({ currency : 'BTC' }, function( data, err ) {
  console.log( data );
});
getdeposithistory
bittrex.getdeposithistory({ currency : 'BTC' }, function( data, err ) {
  console.log( data );
});
getbalance
bittrex.getbalance({ currency : 'BTC' }, function( data, err ) {
  console.log( data );
});
withdraw
bittrex.withdraw({ currency : 'BTC', quantity : '1.5112', address : 'THE_ADDRESS' }, function( data, err ) {
  console.log( data );
});

Testing

Installing test gear

npm install --only=dev

Running all tests

npm test tests

or individually

npm test tests/public.js
npm test tests/private.js
Testing private methods

Testing private method endpoints requires an api key/secret which should be installed in to tests/config.json - you will find an example file in tests/config_example.json.

cp tests/tests_example.json tests/config.json
vim tests/config.json