diff --git a/README.md b/README.md index cd03c27..05e5f6b 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ By default the returned data is an object, in order to get clear text you have t The baseUrl itself can also be set via options ```javascript -'baseUrl' : 'https://bittrex.com/api/v1', +'baseUrl' : 'https://bittrex.com/api/v1.1', 'baseUrlv2' : 'https://bittrex.com/Api/v2.0', ``` @@ -405,79 +405,129 @@ 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 +##### getmarkets() ```javascript -bittrex.getticker( { market : 'BTC-LTC' }, function( data, err ) { +bittrex.getmarkets( function( data, err ) { console.log( data ); }); ``` - -##### getbalances +##### getcurrencies() ```javascript -bittrex.getbalances( function( data, err ) { +bittrex.getcurrencies( function( data, err ) { console.log( data ); }); ``` - -##### getmarkethistory +##### getticker() ```javascript -bittrex.getmarkethistory({ market : 'BTC-LTC' }, function( data, err ) { +bittrex.getticker( { market : 'BTC-LTC' }, function( data, err ) { console.log( data ); }); ``` - -##### getmarketsummaries +##### getmarketsummaries() ```javascript bittrex.getmarketsummaries( function( data, err ) { console.log( data ); }); ``` - -##### getmarketsummary +##### getmarketsummary() ```javascript bittrex.getmarketsummary( { market : 'BTC-LTC'}, function( data, err ) { console.log( data ); }); ``` - -##### getorderbook +##### getorderbook() ```javascript bittrex.getorderbook({ market : 'BTC-LTC', depth : 10, type : 'both' }, function( data, err ) { console.log( data ); }); ``` - -##### getwithdrawalhistory +##### getmarkethistory() +```javascript +bittrex.getmarkethistory({ market : 'BTC-LTC' }, function( data, err ) { + console.log( data ); +}); +``` +##### buylimit() +```javascript +bittrex.buylimit({market: 'BTC-LTC', quantity: '100', rate: '.0015'}, function( data, err ) { + console.log( data ); +}); +``` +##### buymarket() +```javascript +bittrex.buymarket({market: 'BTC-LTC', quantity: '100'}, function( data, err ) { + console.log( data ); +}); +``` +##### selllimit() +```javascript +bittrex.selllimit({market: 'BTC-LTC', quantity: '100', rate: '.0015'}, function( data, err ) { + console.log( data ); +}); +``` +##### sellmarket() +```javascript +bittrex.sellmarket({market: 'BTC-LTC', quantity: '100'}, function( data, err ) { + console.log( data ); +}); +``` +##### cancel() +```javascript +bittrex.cancel({uuid: 'EE50BC5B-E9A1-478A-BEB6-F73023ABD069'}, function( data, err ) { + console.log( data ); +}); +``` +##### getopenorders() +```javascript +bittrex.getopenorders({market: 'USDT-BTC'}, function( data, err ) { + console.log( data ); +}); +``` +##### getbalances() +```javascript +bittrex.getbalances( function( data, err ) { + console.log( data ); +}); +``` +##### getbalance() +```javascript +bittrex.getbalance({ currency : 'BTC' }, function( data, err ) { + console.log( data ); +}); +``` +##### getwithdrawalhistory() ```javascript bittrex.getwithdrawalhistory({ currency : 'BTC' }, function( data, err ) { console.log( data ); }); ``` - -##### getdepositaddress +##### getdepositaddress() ```javascript bittrex.getdepositaddress({ currency : 'BTC' }, function( data, err ) { console.log( data ); }); ``` - -##### getdeposithistory +##### getdeposithistory() ```javascript bittrex.getdeposithistory({ currency : 'BTC' }, function( data, err ) { console.log( data ); }); ``` - -##### getbalance +##### getorderhistory() ```javascript -bittrex.getbalance({ currency : 'BTC' }, function( data, err ) { +bittrex.getorderhistory({market: 'USDT-BTC'}, function( data, err ) { console.log( data ); }); ``` - -##### withdraw +##### getorder() +```javascript +bittrex.getorder({uuid: 'EE50BC5B-E9A1-478A-BEB6-F73023ABD069'}, function( data, err ) { + console.log( data ); +}); +``` +##### withdraw() ```javascript -bittrex.withdraw({ currency : 'BTC', quantity : '1.5112', address : 'THE_ADDRESS' }, function( data, err ) { +bittrex.withdraw({ currency : 'BTC', quantity : '1.5112', address : 'THE_ADDRESS' }, function( console.log( data ); }); ``` diff --git a/jsdoc2md/README.hbs b/jsdoc2md/README.hbs new file mode 100644 index 0000000..febce99 --- /dev/null +++ b/jsdoc2md/README.hbs @@ -0,0 +1,493 @@ +!Important! Note +---- + +This is a maintained fork of the original package. **The npm package name has +changed** because we could not get access to the npmjs repository to keep it +updated. Please see the [Quick start](https://github.com/dparlevliet/node.bittrex.api#quick-start) section for the new package name and +instructions. + +Also, the **websocket code has changed** after Bittrex switched to using Cloudflare +so please see the new ``Websockets`` documentation and updated unit tests and +examples in the ``examples/`` folder. + + +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](https://github.com/dparlevliet/node.bittrex.api/blob/master/LICENSE). + + +Contributors +---- +Thanks go to the people who have contributed code to this Library. + +* [n0mad01](https://github.com/n0mad01) Special kudos - the original creator of the library. Thanks for the hard work. +* [cyberwlf](https://github.com/armandohg) & [armandohg](https://github.com/armandohg) - Special thanks to them for the cloudflare websocket research and fix but also thanks to everyone else in [issue #67](https://github.com/n0mad01/node.bittrex.api/issues/67) +* [samuelhei](https://github.com/samuelhei) Special kudos - thanks to him all missing calls are complemented as also structural improvements have been made. +* [mhuggins](https://github.com/mhuggins) +* [192-sean](https://github.com/192-sean) +* [caffeinewriter](https://github.com/caffeinewriter) +* [apense](https://github.com/apense) +* [TheRealest](https://github.com/TheRealest) +* [Alexsey](https://github.com/Alexsey) + + +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](https://user-images.githubusercontent.com/260321/29748739-a6c2c00e-8b1c-11e7-95ec-1b0221348235.png) + +- 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 +---- +```sh +$ npm install node-bittrex-api +``` + +```javascript +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: +```sh +$ git clone https://github.com/dparlevliet/node.bittrex.api.git +``` + +then meet the package dependencies: +```sh +$ cd node.bittrex.api/ +$ npm install +``` + +Include ``node.bittrex.api.js`` into your project: +```javascript +var bittrex = require('./node.bittrex.api.js'); +``` + +##### Configuration +```javascript +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): +```javascript +'cleartext' : true +``` + +The baseUrl itself can also be set via options +```javascript +'baseUrl' : 'https://bittrex.com/api/v1.1', +'baseUrlv2' : 'https://bittrex.com/Api/v2.0', +``` + +Change the callbacks arguments sequence +```javascript +'inverse_callback_arguments' : true, +``` +This simply changes the sequence in which the arguments are passed, instead of e.g.: +```javascript +getmarkethistory({market : 'USDT-BTC'}, function(data, error) {}); +``` +you'll get the reversed order: +```javascript +getmarkethistory({market : 'USDT-BTC'}, function(error, data) {}); +``` + + +Websockets +-- + +#### Basic example +```javascript +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 +```javascript +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 +This will subscribe to just the global ticker updates. + +```javascript +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 +This will subscribe to the specified markets data. To build +your candle data, order book and market history, etc. you will need to subscribe +to the individual markets you wish to watch. You can subscribe to all of them. + +```javascript +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. +```javascript +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 +```javascript +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 +```javascript +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 +```javascript +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) +```javascript +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) +```javascript +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: '\r\n ...' + } + } + */ + return console.error(err); + } + console.log(data); +}); +``` + +Example of Bittrex API error +```javascript +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 +```javascript +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) +```javascript +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 +``` + +{{#functions}} +##### {{name}}() +{{#each examples}} +{{{this}}} +{{/each}} +{{/functions}} + + +Supported v2 API methods +------ + +Little is known about the v2 api at present. We have support for only a few methods +with very little documentation. Given that the v2 api is still indevelopment by +Bittrex it is possible these methods will change or become invalid without notice. + +##### getcandles +```javascript +bittrex.getcandles({ + marketName: 'USDT-BTC', + tickInterval: 'fiveMin', // intervals are keywords +}, function( data, err ) { + console.log( data ); +}); +``` + +##### tradesell +```javascript +bittrex.tradesell({ + MarketName: 'BTC-ZEC', + OrderType: 'LIMIT', + Quantity: 1.00000000, + Rate: 0.04423432, + TimeInEffect: 'IMMEDIATE_OR_CANCEL', // supported options are 'IMMEDIATE_OR_CANCEL', 'GOOD_TIL_CANCELLED', 'FILL_OR_KILL' + ConditionType: 'NONE', // supported options are 'NONE', 'GREATER_THAN', 'LESS_THAN' + Target: 0, // used in conjunction with ConditionType +}, function( data, err ) { + console.log( data ); +}); +``` + +##### tradebuy +```javascript +bittrex.tradebuy({ + MarketName: 'BTC-ZEC', + OrderType: 'LIMIT', + Quantity: 1.00000000, + Rate: 0.04423432, + TimeInEffect: 'IMMEDIATE_OR_CANCEL', // supported options are 'IMMEDIATE_OR_CANCEL', 'GOOD_TIL_CANCELLED', 'FILL_OR_KILL' + ConditionType: 'NONE', // supported options are 'NONE', 'GREATER_THAN', 'LESS_THAN' + Target: 0, // used in conjunction with ConditionType +}, function( data, err ) { + console.log( data ); +}); +``` + + +Testing +---- + +Installing test gear +```bash +npm install --only=dev +``` + +Running all tests +```bash +npm test tests +``` + +or individually +```bash +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``. + +```bash +cp tests/tests_example.json tests/config.json +vim tests/config.json +``` + diff --git a/node.bittrex.api.js b/node.bittrex.api.js index 861b839..159dca2 100644 --- a/node.bittrex.api.js +++ b/node.bittrex.api.js @@ -333,36 +333,116 @@ var NodeBittrexApi = function() { } sendRequestCallback(callback, op); }, + /** + * @example + * ```javascript + * bittrex.getmarkets( function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getmarkets: function(callback) { publicApiCall(opts.baseUrl + '/public/getmarkets', callback, null); }, + /** + * @example + * ```javascript + * bittrex.getcurrencies( function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getcurrencies: function(callback) { publicApiCall(opts.baseUrl + '/public/getcurrencies', callback, null); }, + /** + * @example + * ```javascript + * bittrex.getticker( { market : 'BTC-LTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getticker: function(options, callback) { publicApiCall(opts.baseUrl + '/public/getticker', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getmarketsummaries( function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getmarketsummaries: function(callback) { publicApiCall(opts.baseUrl + '/public/getmarketsummaries', callback, null); }, + /** + * @example + * ```javascript + * bittrex.getmarketsummary( { market : 'BTC-LTC'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getmarketsummary: function(options, callback) { publicApiCall(opts.baseUrl + '/public/getmarketsummary', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getorderbook({ market : 'BTC-LTC', depth : 10, type : 'both' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getorderbook: function(options, callback) { publicApiCall(opts.baseUrl + '/public/getorderbook', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getmarkethistory({ market : 'BTC-LTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getmarkethistory: function(options, callback) { publicApiCall(opts.baseUrl + '/public/getmarkethistory', callback, options); }, getcandles: function(options, callback) { publicApiCall(opts.baseUrlv2 + '/pub/market/GetTicks', callback, options); }, + /** + * @example + * ```javascript + * bittrex.buylimit({market: 'BTC-LTC', quantity: '100', rate: '.0015'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ buylimit: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/buylimit', callback, options); }, + /** + * @example + * ```javascript + * bittrex.buymarket({market: 'BTC-LTC', quantity: '100'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ buymarket: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/buymarket', callback, options); }, + /** + * @example + * ```javascript + * bittrex.selllimit({market: 'BTC-LTC', quantity: '100', rate: '.0015'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ selllimit: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/selllimit', callback, options); }, @@ -372,36 +452,124 @@ var NodeBittrexApi = function() { tradebuy: function(options, callback) { credentialApiCall(opts.baseUrlv2 + '/key/market/TradeBuy', callback, options); }, + /** + * @example + * ```javascript + * bittrex.sellmarket({market: 'BTC-LTC', quantity: '100'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ sellmarket: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/sellmarket', callback, options); }, + /** + * @example + * ```javascript + * bittrex.cancel({uuid: 'EE50BC5B-E9A1-478A-BEB6-F73023ABD069'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ cancel: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/cancel', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getopenorders({market: 'USDT-BTC'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getopenorders: function(options, callback) { credentialApiCall(opts.baseUrl + '/market/getopenorders', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getbalances( function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getbalances: function(callback) { credentialApiCall(opts.baseUrl + '/account/getbalances', callback, {}); }, + /** + * @example + * ```javascript + * bittrex.getbalance({ currency : 'BTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getbalance: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getbalance', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getwithdrawalhistory({ currency : 'BTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getwithdrawalhistory: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getwithdrawalhistory', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getdepositaddress({ currency : 'BTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getdepositaddress: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getdepositaddress', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getdeposithistory({ currency : 'BTC' }, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getdeposithistory: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getdeposithistory', callback, options); }, + /** + * @example + * ```javascript + * bittrex.getorderhistory({market: 'USDT-BTC'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getorderhistory: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getorderhistory', callback, options || {}); }, + /** + * @example + * ```javascript + * bittrex.getorder({uuid: 'EE50BC5B-E9A1-478A-BEB6-F73023ABD069'}, function( data, err ) { + * console.log( data ); + * }); + * ``` + */ getorder: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/getorder', callback, options); }, + /** + * @example + * ```javascript + * bittrex.withdraw({ currency : 'BTC', quantity : '1.5112', address : 'THE_ADDRESS' }, function( + * console.log( data ); + * }); + * ``` + */ withdraw: function(options, callback) { credentialApiCall(opts.baseUrl + '/account/withdraw', callback, options); } diff --git a/package-lock.json b/package-lock.json index b8307e7..ab0c2ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,24 @@ { - "name": "node.bittrex.api", - "version": "0.6.4", + "name": "node-bittrex-api", + "version": "0.8.1", "lockfileVersion": 1, "requires": true, "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + } + }, "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", @@ -13,6 +28,52 @@ "json-stable-stringify": "1.0.1" } }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escape-sequences": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz", + "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=", + "dev": true, + "requires": { + "array-back": "1.0.4" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -23,6 +84,12 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -53,6 +120,12 @@ "tweetnacl": "0.14.5" } }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -77,16 +150,93 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, + "cache-point": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz", + "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "fs-then-native": "2.0.0", + "mkdirp2": "1.0.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "cloudscraper": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-1.4.1.tgz", + "integrity": "sha1-8rRDHzFyhtgZsTVyZso0Y7ES68o=", + "requires": { + "request": "2.81.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, + "collect-all": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz", + "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==", + "dev": true, + "requires": { + "stream-connect": "1.0.2", + "stream-via": "1.0.4" + } + }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", @@ -95,6 +245,64 @@ "delayed-stream": "1.0.0" } }, + "command-line-args": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "find-replace": "1.0.3", + "typical": "2.6.1" + } + }, + "command-line-tool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.7.0.tgz", + "integrity": "sha1-yoB5KuIGnPfKpWLAy8LNEYERIqA=", + "dev": true, + "requires": { + "ansi-escape-sequences": "3.0.0", + "array-back": "1.0.4", + "command-line-args": "4.0.7", + "command-line-usage": "4.0.2", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "command-line-usage": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.0.2.tgz", + "integrity": "sha512-PpgwSX9SSZZDSTMXmVttJ9w8szzBgMma0bsVpiRfdXljLOBSmJvvxNTAP7twHIsnd6i6jEbcX/JpmAMC+FCbSQ==", + "dev": true, + "requires": { + "ansi-escape-sequences": "4.0.0", + "array-back": "2.0.0", + "table-layout": "0.4.2", + "typical": "2.6.1" + }, + "dependencies": { + "ansi-escape-sequences": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz", + "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==", + "dev": true, + "requires": { + "array-back": "2.0.0" + } + } + } + }, "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", @@ -104,12 +312,35 @@ "graceful-readlink": "1.0.1" } }, + "common-sequence": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", + "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "config-master": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", + "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", + "dev": true, + "requires": { + "walk-back": "2.0.1" + }, + "dependencies": { + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -146,6 +377,19 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz", + "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=", + "dev": true + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -157,10 +401,37 @@ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", "dev": true }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + "dmd": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.7.tgz", + "integrity": "sha512-tJeQ0YK5EnpmUD67VX3u5VAVLGSzphrzIRqplk/dIwESQuqoztc9bZkOa1RMDW03iiG6CdT1Uijpxt6uB2WELw==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "cache-point": "0.4.1", + "common-sequence": "1.0.2", + "file-set": "1.1.1", + "handlebars": "4.0.11", + "marked": "0.3.9", + "object-get": "2.1.0", + "reduce-flatten": "1.0.1", + "reduce-unique": "1.0.0", + "reduce-without": "1.0.1", + "test-value": "3.0.0", + "walk-back": "3.0.0" + }, + "dependencies": { + "test-value": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", + "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "typical": "2.6.1" + } + } + } }, "ecc-jsbn": { "version": "0.1.1", @@ -177,18 +448,14 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "espree": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz", + "integrity": "sha1-/V3ux2qXpRIKnNOnyxF3oJI7EdI=", + "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" } }, "extend": { @@ -201,6 +468,48 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "file-set": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-1.1.1.tgz", + "integrity": "sha1-0+xwwIDsjxjyBLod4QZ4DJBWkms=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "glob": "7.1.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "find-replace": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "test-value": "2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -216,10 +525,11 @@ "mime-types": "2.1.16" } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "fs-then-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", + "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=", + "dev": true }, "fs.realpath": { "version": "1.0.0", @@ -256,6 +566,13 @@ "path-is-absolute": "1.0.1" } }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + }, "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", @@ -268,6 +585,18 @@ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", "dev": true }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + }, "har-schema": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", @@ -330,6 +659,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -340,12 +675,112 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "js2xmlparser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz", + "integrity": "sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA=", + "dev": true + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, + "jsdoc-75lb": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jsdoc-75lb/-/jsdoc-75lb-3.6.0.tgz", + "integrity": "sha1-qAcRlSi0AJzLyrSbdSL2P+xs0L0=", + "dev": true, + "requires": { + "bluebird": "3.4.7", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "espree": "3.1.7", + "js2xmlparser": "1.0.0", + "klaw": "1.3.1", + "marked": "0.3.9", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + } + }, + "jsdoc-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-3.0.0.tgz", + "integrity": "sha1-DVJwAjX4Zb1Ki61evB77Vi/IrSo=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "cache-point": "0.4.1", + "collect-all": "1.0.3", + "file-set": "1.1.1", + "fs-then-native": "2.0.0", + "jsdoc-75lb": "3.6.0", + "object-to-spawn-args": "1.1.1", + "temp-path": "1.0.0", + "walk-back": "2.0.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } + } + }, + "jsdoc-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.0.tgz", + "integrity": "sha1-JxUx2I8Z3yUgsWMqf2yYlEGof94=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "reduce-extract": "1.0.0", + "sort-array": "1.1.2", + "test-value": "2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "jsdoc-to-markdown": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-3.0.3.tgz", + "integrity": "sha512-UKv0ebF/g8UMlvhu+r0e8lB/DUrt+0nqoxYDO5QVJ7fNqOVHLn8wDhyqRn/wPoGsvitevmOv9yWiiR2lfF8XzQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "command-line-tool": "0.7.0", + "config-master": "3.1.0", + "dmd": "3.0.7", + "jsdoc-api": "3.0.0", + "jsdoc-parse": "3.0.0", + "walk-back": "3.0.0" + } + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -380,20 +815,6 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -412,6 +833,31 @@ } } }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, "lodash._baseassign": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", @@ -480,10 +926,35 @@ "lodash.isarray": "3.0.4" } }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "marked": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz", + "integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw==", + "dev": true }, "mime-db": { "version": "1.29.0", @@ -522,6 +993,12 @@ "minimist": "0.0.8" } }, + "mkdirp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz", + "integrity": "sha1-zI3YJl8fBuLY9bELblL04FC+0hs=", + "dev": true + }, "mocha": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", @@ -561,6 +1038,18 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-get": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz", + "integrity": "sha1-ciu9tgA576R8rTxtws5RqFwCxa4=", + "dev": true + }, + "object-to-spawn-args": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz", + "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -570,20 +1059,22 @@ "wrappy": "1.0.2" } }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "2.3.8" - } - }, "performance-now": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", @@ -599,6 +1090,63 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" }, + "reduce-extract": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz", + "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=", + "dev": true, + "requires": { + "test-value": "1.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "test-value": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz", + "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + } + } + } + }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", + "dev": true + }, + "reduce-unique": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz", + "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=", + "dev": true + }, + "reduce-without": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz", + "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=", + "dev": true, + "requires": { + "test-value": "2.1.0" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", @@ -628,6 +1176,33 @@ "uuid": "3.1.0" } }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -649,12 +1224,35 @@ "hoek": "2.16.3" } }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "sort-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-1.1.2.tgz", + "integrity": "sha1-uImGBTwBcKf53mPxiknsecJMPmQ=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "object-get": "2.1.0", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, "requires": { - "through": "2.3.8" + "amdefine": "1.0.1" } }, "sshpk": { @@ -679,19 +1277,43 @@ } } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "stream-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", + "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=", + "dev": true, "requires": { - "duplexer": "0.1.1" + "array-back": "1.0.4" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } } }, + "stream-via": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", + "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==", + "dev": true + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", @@ -701,10 +1323,51 @@ "has-flag": "1.0.0" } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "table-layout": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz", + "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "deep-extend": "0.5.0", + "lodash.padend": "4.6.1", + "typical": "2.6.1", + "wordwrapjs": "3.0.0" + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "temp-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", + "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=", + "dev": true + }, + "test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } }, "tough-cookie": { "version": "2.3.2", @@ -736,6 +1399,63 @@ "is-typedarray": "1.0.0" } }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", @@ -758,6 +1478,12 @@ } } }, + "walk-back": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz", + "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=", + "dev": true + }, "websocket": { "version": "1.0.24", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.24.tgz", @@ -769,6 +1495,29 @@ "yaeti": "0.0.6" } }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "dev": true, + "requires": { + "reduce-flatten": "1.0.1", + "typical": "2.6.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -779,6 +1528,19 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } } diff --git a/package.json b/package.json index 39986b7..132a443 100644 --- a/package.json +++ b/package.json @@ -33,9 +33,12 @@ }, "homepage": "https://github.com/dparlevliet/node.bittrex.api", "scripts": { - "test": "mocha" + "test": "mocha", + "docs": "jsdoc2md --template jsdoc2md/README.hbs --files node.bittrex.api.js > README.md", + "docs-json": "jsdoc2md --json node.bittrex.api.js" }, "devDependencies": { + "jsdoc-to-markdown": "^3.0.2", "mocha": "^3.3.0" } }