From 25788b0db7e8185517e06a4125eefde4caefe520 Mon Sep 17 00:00:00 2001 From: Cayle Sharrock Date: Sat, 6 Jan 2018 12:37:39 +0200 Subject: [PATCH] Fixes and improvements to Bittrex WS (#102) * add dev version of node.bittrex.api * convert BittrexFeed subscribe to asynchronous function because verity depends on asynchronous functions inside * add dev version of node.bittrex.api * + updated to new library + typescript module imports not working, switch back to require * + queryExchangeState actually depends on SubscribeToExchangeDeltas * get rid of annoying debugging objects * Some cleanup --- package.json | 2 +- src/exchanges/bittrex/BittrexFeed.ts | 72 +++++--- src/factories/bittrexFactories.ts | 9 +- src/samples/bittrexWSdemo.ts | 60 ++++--- yarn.lock | 236 ++++++++++++++++++--------- 5 files changed, 249 insertions(+), 130 deletions(-) diff --git a/package.json b/package.json index 83eab07d..dbec29d2 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "crypto": "0.0.3", "gdax": "https://github.com/coinbase/gdax-node.git#32360ad73517f168054585a1b0fd6ae3d7e12a77", "limiter": "git://github.com/jhurliman/node-rate-limiter.git#58ce2fda6b5c2bc4ccb81ba3768c5b1bc06c91a5", - "node.bittrex.api": "0.5.1", + "node-bittrex-api": "0.7.7", "pushbullet": "2.0.0", "querystring": "0.2.0", "simple-mock": "0.8.0", diff --git a/src/exchanges/bittrex/BittrexFeed.ts b/src/exchanges/bittrex/BittrexFeed.ts index 8aeb4f85..9fff31a8 100644 --- a/src/exchanges/bittrex/BittrexFeed.ts +++ b/src/exchanges/bittrex/BittrexFeed.ts @@ -13,12 +13,12 @@ ***************************************************************************************************************************/ import { ExchangeFeed, ExchangeFeedConfig } from '../ExchangeFeed'; -import * as Bittrex from 'node.bittrex.api'; import { LevelMessage, SnapshotMessage, TickerMessage, TradeMessage } from '../../core/Messages'; import { BittrexAPI } from './BittrexAPI'; import { Big } from '../../lib/types'; import { OrderPool } from '../../lib/BookBuilder'; import { Level3Order, PriceLevelWithOrders } from '../../lib/Orderbook'; +const Bittrex = require('node-bittrex-api'); export class BittrexFeed extends ExchangeFeed { private client: any; @@ -46,38 +46,60 @@ export class BittrexFeed extends ExchangeFeed { return 'Bittrex'; } - subscribe(products: string[]): boolean { + subscribe(products: string[]): Promise { if (!this.connection) { - return false; + return Promise.reject(false); } - products.forEach((product: string) => { - this.client.call('CoreHub', 'SubscribeToExchangeDeltas', product).done((err: Error, result: boolean) => { - if (err) { - return console.error(err); - } + return Promise.all(products.map((product: string) => { + return new Promise((resolve, reject) => { + this.client.call('CoreHub', 'SubscribeToExchangeDeltas', product).done((err: Error, result: boolean) => { + if (err) { + return reject(err); + } - if (result === true) { - this.log('info', `Subscribed to ${product} on ${this.owner}`); - } - }); - this.client.call('CoreHub', 'queryExchangeState', product).done((err: Error, data: any) => { - const snapshot: SnapshotMessage = this.processSnapshot(product, data); - this.push(snapshot); + if (!result) { + const msg = `Failed to subscribeExchangeDeltas to ${product} on ${this.owner}`; + this.log('info', msg); + return reject(new Error(msg)); + } + + this.client.call('CoreHub', 'queryExchangeState', product).done((queryErr: Error, data: any) => { + if (queryErr) { + return reject(queryErr); + } + if (!data) { + const msg = `failed to queryExchangeState to ${product} on ${this.owner}`; + this.log('error', msg); + return reject(new Error(msg)); + } + const snapshot: SnapshotMessage = this.processSnapshot(product, data); + this.push(snapshot); + return resolve(true); + }); + }); }); + })).then(() => { + // Every result is guaranteed to be true + return Promise.resolve(true); + }).catch((err) => { + return Promise.reject(err); }); - return true; } protected connect() { - const client = this.client = this.client = Bittrex.websockets.client(); - client.serviceHandlers.messageReceived = (msg: any) => this.handleMessage(msg); - client.serviceHandlers.bound = () => this.onNewConnection(); - client.serviceHandlers.disconnected = (code: number, reason: string) => this.onClose(code, reason); - client.serviceHandlers.onerror = (err: Error) => this.onError(err); - client.serviceHandlers.connected = (connection: any) => { - this.connection = connection; - this.emit('websocket-connection'); - }; + Bittrex.websockets.client( + (client: any) => { + this.client = client; + client.serviceHandlers.messageReceived = (msg: any) => this.handleMessage(msg); + client.serviceHandlers.bound = () => this.onNewConnection(); + client.serviceHandlers.disconnected = (code: number, reason: string) => this.onClose(code, reason); + client.serviceHandlers.onerror = (err: Error) => this.onError(err); + client.serviceHandlers.connected = (connection: any) => { + this.connection = connection; + this.emit('websocket-connection'); + }; + } + ); } protected handleMessage(msg: any): void { diff --git a/src/factories/bittrexFactories.ts b/src/factories/bittrexFactories.ts index 91c93cad..c97a14fe 100644 --- a/src/factories/bittrexFactories.ts +++ b/src/factories/bittrexFactories.ts @@ -45,9 +45,12 @@ export function getSubscribedFeeds(options: ExchangeFeedConfig, products: string return reject(new Error('TIMEOUT. Could not connect to Bittrex Feed server')); }, 30000); feed.on('websocket-connection', () => { - feed.subscribe(products); - clearTimeout(timeout); - return resolve(feed); + feed.subscribe(products).then(() => { + clearTimeout(timeout); + return resolve(feed); + }).catch((err: Error) => { + return reject(err); + }); }); }); } diff --git a/src/samples/bittrexWSdemo.ts b/src/samples/bittrexWSdemo.ts index ac3d7cba..8efe1cf6 100644 --- a/src/samples/bittrexWSdemo.ts +++ b/src/samples/bittrexWSdemo.ts @@ -26,36 +26,42 @@ const product: string = 'BTC-ETH'; const config: ExchangeFeedConfig = { logger: logger, auth: null, - wsUrl: null, + wsUrl: null }; const feed: BittrexFeed = new BittrexFeed(config); + feed.on('websocket-connection', () => { - feed.subscribe([product]); -}); -const book = new LiveOrderbook({ logger: logger, product: product, strictMode: false }); -book.on('LiveOrderbook.snapshot', () => { - logger.log('info', 'Snapshot received by LiveOrderbook Demo'); - setInterval(() => { - console.log(printOrderbook(book, 10, 4, 4)); - }, 5000); -}); -book.on('LiveOrderbook.ticker', (ticker: Ticker) => { - console.log(printTicker(ticker)); -}); -book.on('LiveOrderbook.trade', (trade: TradeMessage) => { - logger.log('info', `${trade.side} ${trade.size} on ${trade.productId} at ${trade.price}`); + feed.subscribe([product]).then(() => { + doSomethingWithFeed(); + }); }); -book.on('LiveOrderbook.skippedMessage', (details: SkippedMessageEvent) => { - console.log('SKIPPED MESSAGE', details); - console.log('Reconnecting to feed'); - feed.reconnect(1000); -}); -book.on('end', () => { - console.log('Orderbook closed'); -}); -book.on('error', (err: Error) => { - console.log('Livebook errored: ', err); + +function doSomethingWithFeed() { + const book = new LiveOrderbook({ logger: logger, product: product, strictMode: false }); + book.on('LiveOrderbook.snapshot', () => { + logger.log('info', 'Snapshot received by LiveOrderbook Demo'); + setInterval(() => { + console.log(printOrderbook(book, 10, 4, 4)); + }, 5000); + }); + book.on('LiveOrderbook.ticker', (ticker: Ticker) => { + console.log(printTicker(ticker)); + }); + book.on('LiveOrderbook.trade', (trade: TradeMessage) => { + logger.log('info', `${trade.side} ${trade.size} on ${trade.productId} at ${trade.price}`); + }); + book.on('LiveOrderbook.skippedMessage', (details: SkippedMessageEvent) => { + console.log('SKIPPED MESSAGE', details); + console.log('Reconnecting to feed'); + feed.reconnect(1000); + }); + book.on('end', () => { + console.log('Orderbook closed'); + }); + book.on('error', (err: Error) => { + console.log('Livebook errored: ', err); + feed.pipe(book); + }); feed.pipe(book); -}); -feed.pipe(book); +} diff --git a/yarn.lock b/yarn.lock index 71cf09cd..f40a67fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -98,13 +98,6 @@ dependencies: "@types/node" "*" -"JSONStream@>= 0.8.4": - version "1.3.1" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -112,6 +105,15 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -257,7 +259,11 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" @@ -366,6 +372,18 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" @@ -478,6 +496,12 @@ clone@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" +cloudscraper@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/cloudscraper/-/cloudscraper-1.4.1.tgz#f2b4431f317286d819b1357266ca3463b112ebca" + dependencies: + request "^2.49.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -589,6 +613,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + crypto-js@3.1.9-1: version "3.1.9-1" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" @@ -688,10 +718,6 @@ diff@^3.1.0, diff@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -716,18 +742,6 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -"event-stream@>= 3.1.5": - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -762,7 +776,7 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@^3.0.0, extend@~3.0.0: +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -780,6 +794,14 @@ eyes@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -867,6 +889,14 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + format-people@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/format-people/-/format-people-0.1.4.tgz#b1da1aad853e967426cceaf9f6a635a8eeaad97d" @@ -879,10 +909,6 @@ formidable@^1.0.17: version "1.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" @@ -1058,6 +1084,10 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -1074,6 +1104,13 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1097,6 +1134,15 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + highlight.js@^9.0.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" @@ -1105,6 +1151,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + homedir-polyfill@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" @@ -1135,6 +1185,14 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1383,6 +1441,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -1421,10 +1483,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -1597,10 +1655,6 @@ make-error@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - markdown-link@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/markdown-link/-/markdown-link-0.1.1.tgz#32c5c65199a6457316322d1e4229d13407c8c7cf" @@ -1713,12 +1767,22 @@ mime-db@~1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.16" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" dependencies: mime-db "~1.29.0" +mime-types@~2.1.17: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + mime@^1.3.4: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" @@ -1799,6 +1863,16 @@ nock@9.0.2: propagate "0.4.0" qs "^6.0.2" +node-bittrex-api@0.7.7: + version "0.7.7" + resolved "https://registry.yarnpkg.com/node-bittrex-api/-/node-bittrex-api-0.7.7.tgz#6db465f323dbc05697815543621da3bc9d9e9bc3" + dependencies: + cloudscraper "^1.4.1" + jsonic "^0.3.0" + object-assign "^4.1.1" + request ">= 2.35.0" + signalr-client "0.0.17" + node-fetch@2.0.0-alpha.9: version "2.0.0-alpha.9" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.0.0-alpha.9.tgz#990c0634f510f76449a0d6f6eaec96b22f273628" @@ -1807,17 +1881,6 @@ node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" -node.bittrex.api@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/node.bittrex.api/-/node.bittrex.api-0.5.1.tgz#d36ffff09364b36dd81c50a3b96c65bee22322b7" - dependencies: - JSONStream ">= 0.8.4" - event-stream ">= 3.1.5" - jsonic "^0.3.0" - object-assign "^4.1.1" - request ">= 2.35.0" - signalr-client "0.0.17" - normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -1881,7 +1944,7 @@ nyc@11.1.0: yargs "^8.0.1" yargs-parser "^5.0.0" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -2025,16 +2088,14 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2094,7 +2155,7 @@ pushbullet@2.0.0: request "^2.79.0" websocket "^1.0.24" -qs@6.5.1: +qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -2275,6 +2336,33 @@ request@2.81.0, request@^2.79.0: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" +request@^2.49.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2313,7 +2401,7 @@ rimraf@^2.3.3, rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.0.5" -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -2393,6 +2481,12 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + source-map-support@0.4.16, source-map-support@^0.4.0: version "0.4.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" @@ -2434,12 +2528,6 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2469,12 +2557,6 @@ static-extend@^0.1.2: define-property "^0.2.5" object-copy "^0.1.0" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2500,7 +2582,7 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2598,10 +2680,6 @@ then-request@^2.0.1: promise "^7.1.1" qs "^6.1.0" -through@2, "through@>=2.2.7 <3", through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -2626,6 +2704,12 @@ tough-cookie@~2.3.0: dependencies: punycode "^1.4.1" +tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -2791,6 +2875,10 @@ uuid@3.0.0, uuid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" +uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + v8flags@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.0.tgz#4be9604488e0c4123645def705b1848d16b8e01f"