From e93480090556cb3a51c2a86320955131d696e7ec Mon Sep 17 00:00:00 2001 From: Torrey Leonard <torreyleonard@voxela.com> Date: Fri, 14 Dec 2018 13:37:50 -0500 Subject: [PATCH] Added Bollinger Bands to AlphaVantage API. Updated to support Robinhood's new authentication API. Added support for Robinhood's multifactor authentication. Made it optional to provide a password in the user constructor when creating a new Robinhood user. --- .gitignore | 3 +- LICENSE.md | 0 README.md | 10 + docs/ALGORITHM.md | 0 docs/DATA.md | 19 + docs/GLOBALS.md | 0 docs/ROBINHOOD.md | 173 ++- examples/highest-open-interest.js | 0 index.js | 0 objects/algorithm/Backtest.js | 0 objects/algorithm/PaperTrader.js | 0 objects/algorithm/Scheduler.js | 0 objects/broker/robinhood/Fundamentals.js | 0 objects/broker/robinhood/Instrument.js | 2 +- objects/broker/robinhood/Market.js | 0 objects/broker/robinhood/OptionInstrument.js | 4 +- objects/broker/robinhood/OptionOrder.js | 4 +- objects/broker/robinhood/Order.js | 8 +- objects/broker/robinhood/Portfolio.js | 0 objects/broker/robinhood/Robinhood.js | 2 +- objects/broker/robinhood/User.js | 101 +- objects/data/AlphaVantage.js | 29 + objects/data/IEX.js | 0 objects/data/Nasdaq.js | 0 objects/data/News.js | 0 objects/data/Query.js | 0 objects/data/Stream.js | 0 objects/data/Yahoo.js | 0 objects/globals/LibraryError.js | 0 objects/globals/OptionsChain.js | 0 objects/globals/Quote.js | 0 package-lock.json | 1328 +++++++----------- package.json | 6 +- test.js | 0 34 files changed, 797 insertions(+), 892 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 LICENSE.md mode change 100644 => 100755 README.md mode change 100644 => 100755 docs/ALGORITHM.md mode change 100644 => 100755 docs/DATA.md mode change 100644 => 100755 docs/GLOBALS.md mode change 100644 => 100755 docs/ROBINHOOD.md mode change 100644 => 100755 examples/highest-open-interest.js mode change 100644 => 100755 index.js mode change 100644 => 100755 objects/algorithm/Backtest.js mode change 100644 => 100755 objects/algorithm/PaperTrader.js mode change 100644 => 100755 objects/algorithm/Scheduler.js mode change 100644 => 100755 objects/broker/robinhood/Fundamentals.js mode change 100644 => 100755 objects/broker/robinhood/Instrument.js mode change 100644 => 100755 objects/broker/robinhood/Market.js mode change 100644 => 100755 objects/broker/robinhood/OptionInstrument.js mode change 100644 => 100755 objects/broker/robinhood/OptionOrder.js mode change 100644 => 100755 objects/broker/robinhood/Order.js mode change 100644 => 100755 objects/broker/robinhood/Portfolio.js mode change 100644 => 100755 objects/broker/robinhood/Robinhood.js mode change 100644 => 100755 objects/broker/robinhood/User.js mode change 100644 => 100755 objects/data/AlphaVantage.js mode change 100644 => 100755 objects/data/IEX.js mode change 100644 => 100755 objects/data/Nasdaq.js mode change 100644 => 100755 objects/data/News.js mode change 100644 => 100755 objects/data/Query.js mode change 100644 => 100755 objects/data/Stream.js mode change 100644 => 100755 objects/data/Yahoo.js mode change 100644 => 100755 objects/globals/LibraryError.js mode change 100644 => 100755 objects/globals/OptionsChain.js mode change 100644 => 100755 objects/globals/Quote.js mode change 100644 => 100755 package-lock.json mode change 100644 => 100755 package.json mode change 100644 => 100755 test.js diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index c52e846..ed8fd82 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ algotrader.iml /node_modules/ /.idea/ -/ignore/ \ No newline at end of file +/ignore/ +.DS_Store \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index c665446..51233d3 --- a/README.md +++ b/README.md @@ -105,6 +105,16 @@ myUser.authenticate() ``` Personally, I either store user data as an array in a .json file, then require it into the class, (insecure) or ask for the user's credentials in the console. You should handle this sensitive data in a way that you're comfortable with. +**Note:** providing a password in the User constructor is optional. If it is not provided, you will be prompted via CLI. + +##### MFA + +Algotrader now supports multifactor authentication. So, if you have this enabled on your account (which is a good idea by the way), you'll be prompted to enter the six-digit code after login. If you run a trading script with this library automatically and have MFA enabled, it may be worth your while to utilize a telecom API (possible through Twilio?) to have the code programmatically entered into the CLI. + +The MFA prompt will appear like so: + +![Algotrader MFA Prompt](https://i.gyazo.com/11420983d69bf02a59026947513408ac.png) + #### Get a user's portfolio There are a good amount of query functions that you can run on the user's portfolio. Using your [```User```](https://github.com/Ladinn/algotrader/blob/master/docs/ROBINHOOD.md#User) instance, you can grab the portfolio using ``` User.getPortfolio()``` which returns a new [```Portfolio```](https://github.com/Ladinn/algotrader/blob/master/docs/ROBINHOOD.md#Portfolio) object. ```js diff --git a/docs/ALGORITHM.md b/docs/ALGORITHM.md old mode 100644 new mode 100755 diff --git a/docs/DATA.md b/docs/DATA.md old mode 100644 new mode 100755 index 385a622..c6b0ea3 --- a/docs/DATA.md +++ b/docs/DATA.md @@ -53,6 +53,7 @@ Further documentation can be found here: https://www.alphavantage.co/documentati * [.stochf(symbol, interval, timePeriod, seriesType, fastKPeriod, fastDPeriod, fastDmaType)](#AlphaVantage+stochf) ⇒ <code>Promise.<Array></code> * [.rsi(symbol, interval, timePeriod, seriesType)](#AlphaVantage+rsi) ⇒ <code>Promise.<Array></code> * [.stochRSI(symbol, interval, timePeriod, seriesType, fastKPeriod, fastDPeriod, fastDmaType)](#AlphaVantage+stochRSI) ⇒ <code>Promise.<Array></code> + * [.bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype)](#AlphaVantage+bbands) ⇒ <code>Promise.<Array></code> <a name="new_AlphaVantage_new"></a> @@ -383,6 +384,24 @@ http://www.fmlabs.com/reference/default.htm?url=StochRSI.htm | fastDPeriod | <code>Number</code> \| <code>Null</code> | | | fastDmaType | <code>Number</code> \| <code>Null</code> | Integers 0 - 8 are accepted with the following mappings: 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA). | +<a name="AlphaVantage+bbands"></a> + +### alphaVantage.bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype) ⇒ <code>Promise.<Array></code> +Returns an array of bollinger bands for the equity specified. +https://www.investopedia.com/articles/technical/04/030304.asp + +**Kind**: instance method of [<code>AlphaVantage</code>](#AlphaVantage) + +| Param | Type | Description | +| --- | --- | --- | +| symbol | <code>String</code> | | +| interval | <code>String</code> | Time interval between two consecutive data points in the time series. The following values are supported: 1min, 5min, 15min, 30min, 60min, daily, weekly, monthly | +| timePeriod | <code>Number</code> | Number of data points used to calculate each BBANDS value. Positive integers are accepted (e.g., time_period=60, time_period=200) | +| seriesType | <code>String</code> | The desired price type in the time series. Four types are supported: close, open, high, low | +| nbdevup | <code>Number</code> \| <code>Null</code> | The standard deviation multiplier of the upper band. Positive integers are accepted. By default, nbdevup=2. | +| nbdevdn | <code>Number</code> \| <code>Null</code> | The standard deviation multiplier of the lower band. Positive integers are accepted. By default, nbdevdn=2. | +| matype | <code>Number</code> \| <code>Null</code> | Moving average type of the time series. By default, matype=0. Integers 0 - 8 are accepted with the following mappings. 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA). | + <a name="IEX"></a> ## IEX diff --git a/docs/GLOBALS.md b/docs/GLOBALS.md old mode 100644 new mode 100755 diff --git a/docs/ROBINHOOD.md b/docs/ROBINHOOD.md old mode 100644 new mode 100755 index 7129299..031bf6c --- a/docs/ROBINHOOD.md +++ b/docs/ROBINHOOD.md @@ -175,13 +175,19 @@ Represents a security traded on Robinhood. * [.isStock()](#Instrument+isStock) ⇒ <code>Boolean</code> * [.isETP()](#Instrument+isETP) ⇒ <code>Boolean</code> * [.isADR()](#Instrument+isADR) ⇒ <code>Boolean</code> + * [.equals(otherInstrument)](#Instrument+equals) ⇒ <code>Boolean</code> * _static_ * [.getAll()](#Instrument.getAll) ⇒ <code>Promise.<Array></code> * [.getBySymbol(symbol)](#Instrument.getBySymbol) ⇒ [<code>Promise.<Instrument></code>](#Instrument) + * [.getByID(id)](#Instrument.getByID) ⇒ [<code>Promise.<Instrument></code>](#Instrument) * [.getByURL(instrumentURL)](#Instrument.getByURL) ⇒ [<code>Promise.<Instrument></code>](#Instrument) * [.getTopMoving(direction)](#Instrument.getTopMoving) ⇒ [<code>Promise.<Instrument></code>](#Instrument) + * [.getByIdArray(ids)](#Instrument.getByIdArray) ⇒ <code>Promise.<Array></code> + * [.getCategories()](#Instrument.getCategories) ⇒ <code>Array.<String></code> * [.getByCategory(category)](#Instrument.getByCategory) ⇒ <code>Promise.<Array></code> * [.getMostPopular()](#Instrument.getMostPopular) ⇒ <code>Promise.<Array></code> + * [.getUpcomingEarnings()](#Instrument.getUpcomingEarnings) ⇒ <code>Promise.<Array></code> + * [.getRecommendations(user)](#Instrument.getRecommendations) ⇒ <code>Promise.<Array></code> <a name="new_Instrument_new"></a> @@ -326,6 +332,17 @@ Checks if the instrument is an American Depositary Receipt. Typically applies to https://www.investopedia.com/terms/a/adr.asp **Kind**: instance method of [<code>Instrument</code>](#Instrument) +<a name="Instrument+equals"></a> + +### instrument.equals(otherInstrument) ⇒ <code>Boolean</code> +Check whether another instance of Instrument equals this instance. + +**Kind**: instance method of [<code>Instrument</code>](#Instrument) + +| Param | Type | +| --- | --- | +| otherInstrument | [<code>Instrument</code>](#Instrument) | + <a name="Instrument.getAll"></a> ### Instrument.getAll() ⇒ <code>Promise.<Array></code> @@ -344,6 +361,17 @@ Returns an instrument object for the specified symbol. | --- | --- | | symbol | <code>String</code> | +<a name="Instrument.getByID"></a> + +### Instrument.getByID(id) ⇒ [<code>Promise.<Instrument></code>](#Instrument) +Returns an instrument object for the specified Robinhood instrument ID. + +**Kind**: static method of [<code>Instrument</code>](#Instrument) + +| Param | Type | +| --- | --- | +| id | <code>String</code> | + <a name="Instrument.getByURL"></a> ### Instrument.getByURL(instrumentURL) ⇒ [<code>Promise.<Instrument></code>](#Instrument) @@ -366,6 +394,26 @@ Returns an array of Instruments for 10 of the top moving S&P 500 equities. | --- | --- | --- | | direction | <code>String</code> | Possible options: [up, down] | +<a name="Instrument.getByIdArray"></a> + +### Instrument.getByIdArray(ids) ⇒ <code>Promise.<Array></code> +Returns an array of instrument objects for the specified array of IDs. + +Note: large arrays will take longer to process and are capped at 50 per request, so multiple +requests will be sent as the function iterates through the array. + +**Kind**: static method of [<code>Instrument</code>](#Instrument) + +| Param | Type | +| --- | --- | +| ids | <code>Array</code> | + +<a name="Instrument.getCategories"></a> + +### Instrument.getCategories() ⇒ <code>Array.<String></code> +Returns an array of known categories that can be used with getByCategory(). This list is non-exhaustive. + +**Kind**: static method of [<code>Instrument</code>](#Instrument) <a name="Instrument.getByCategory"></a> ### Instrument.getByCategory(category) ⇒ <code>Promise.<Array></code> @@ -375,7 +423,7 @@ Returns an array of Instruments related to the given category. | Param | Type | Description | | --- | --- | --- | -| category | <code>String</code> | Possible options: [ technology, 100-most-popular, ... ] | +| category | <code>String</code> | For possible options see getCategories(). | <a name="Instrument.getMostPopular"></a> @@ -383,6 +431,23 @@ Returns an array of Instruments related to the given category. Returns an array of Instruments for the top 100 most popular equities on Robinhood. **Kind**: static method of [<code>Instrument</code>](#Instrument) +<a name="Instrument.getUpcomingEarnings"></a> + +### Instrument.getUpcomingEarnings() ⇒ <code>Promise.<Array></code> +Returns an array of Instruments that have upcoming earnings. + +**Kind**: static method of [<code>Instrument</code>](#Instrument) +<a name="Instrument.getRecommendations"></a> + +### Instrument.getRecommendations(user) ⇒ <code>Promise.<Array></code> +Returns an array of instruments for stocks from Robinhood's recommendations for the given user. + +**Kind**: static method of [<code>Instrument</code>](#Instrument) + +| Param | Type | +| --- | --- | +| user | [<code>User</code>](#User) | + <a name="Market"></a> ## Market @@ -763,6 +828,7 @@ Represents and executes an order for the given instrument. * [new Order(user, object)](#new_Order_new) * _instance_ * [.submit()](#Order+submit) ⇒ <code>Promise.<Object></code> + * [.cancel()](#Order+cancel) ⇒ <code>Promise.<Object></code> * [.getResponse()](#Order+getResponse) ⇒ <code>Object</code> \| <code>Null</code> * _static_ * [.getByOrderID(user, orderID)](#Order.getByOrderID) ⇒ [<code>Promise.<Order></code>](#Order) @@ -784,6 +850,12 @@ Creates a new Order object. ### order.submit() ⇒ <code>Promise.<Object></code> Submits an order to Robinhood to be executed by the exchange. +**Kind**: instance method of [<code>Order</code>](#Order) +<a name="Order+cancel"></a> + +### order.cancel() ⇒ <code>Promise.<Object></code> +Attempts to cancel an order. + **Kind**: instance method of [<code>Order</code>](#Order) <a name="Order+getResponse"></a> @@ -822,7 +894,10 @@ Represents all of the user's holdings on Robinhood and allows for various querie **Kind**: global class * [Portfolio](#Portfolio) - * [new Portfolio(array)](#new_Portfolio_new) + * [new Portfolio(user, array)](#new_Portfolio_new) + * [.sellAll()](#Portfolio+sellAll) ⇒ <code>Promise.<(Boolean\|Error)></code> + * [.setQuantity(symbol, targetQuantity)](#Portfolio+setQuantity) ⇒ [<code>Promise.<Order></code>](#Order) + * [.getStockValue()](#Portfolio+getStockValue) ⇒ <code>Promise.<Number></code> * [.getInstrumentArray()](#Portfolio+getInstrumentArray) ⇒ <code>Array</code> * [.getSymbols()](#Portfolio+getSymbols) ⇒ <code>Array</code> * [.getBuyPrice(symbol)](#Portfolio+getBuyPrice) ⇒ <code>Number</code> @@ -844,14 +919,39 @@ Represents all of the user's holdings on Robinhood and allows for various querie <a name="new_Portfolio_new"></a> -### new Portfolio(array) +### new Portfolio(user, array) Creates a new Portfolio object. -| Param | -| --- | -| array | +| Param | Type | +| --- | --- | +| user | [<code>User</code>](#User) | +| array | <code>Array</code> | +<a name="Portfolio+sellAll"></a> + +### portfolio.sellAll() ⇒ <code>Promise.<(Boolean\|Error)></code> +Sells all positions in the user's portfolio at the market price. + +**Kind**: instance method of [<code>Portfolio</code>](#Portfolio) +<a name="Portfolio+setQuantity"></a> + +### portfolio.setQuantity(symbol, targetQuantity) ⇒ [<code>Promise.<Order></code>](#Order) +Executes a new order to reduce or increase the user's position in the given symbol by the given amount. + +**Kind**: instance method of [<code>Portfolio</code>](#Portfolio) + +| Param | Type | +| --- | --- | +| symbol | <code>String</code> | +| targetQuantity | <code>Number</code> | + +<a name="Portfolio+getStockValue"></a> + +### portfolio.getStockValue() ⇒ <code>Promise.<Number></code> +Returns the total market value of all stocks held by the user. + +**Kind**: instance method of [<code>Portfolio</code>](#Portfolio) <a name="Portfolio+getInstrumentArray"></a> ### portfolio.getInstrumentArray() ⇒ <code>Array</code> @@ -1049,14 +1149,21 @@ Represents the user that is logged in while accessing the Robinhood API. * [User](#User) * [new User(username, password)](#new_User_new) - * [.authenticate()](#User+authenticate) ⇒ <code>Promise</code> + * [.authenticate()](#User+authenticate) ⇒ <code>Promise.<Boolean></code> + * [.logout()](#User+logout) ⇒ <code>Promise.<Boolean></code> * [.getAccount()](#User+getAccount) ⇒ <code>Promise</code> + * [.getBalances()](#User+getBalances) ⇒ <code>Promise.<Object></code> + * [.getBuyingPower()](#User+getBuyingPower) ⇒ <code>Promise</code> * [.getUserInfo()](#User+getUserInfo) ⇒ <code>Promise.<Object></code> + * [.getUID()](#User+getUID) ⇒ <code>Promise.<String></code> * [.getTaxInfo()](#User+getTaxInfo) ⇒ <code>Promise.<Object></code> * [.getDisclosureInfo()](#User+getDisclosureInfo) ⇒ <code>Promise.<Object></code> * [.getEmployerInfo()](#User+getEmployerInfo) ⇒ <code>Promise.<Object></code> * [.getInvestmentProfile()](#User+getInvestmentProfile) ⇒ <code>Promise.<Object></code> * [.getRecentDayTrades()](#User+getRecentDayTrades) ⇒ <code>Promise.<Object></code> + * [.getRecentOrders()](#User+getRecentOrders) ⇒ <code>Promise.<Array.<Order>></code> + * [.cancelOpenOrders()](#User+cancelOpenOrders) ⇒ <code>Promise</code> + * [.getRecentOptionOrders()](#User+getRecentOptionOrders) ⇒ <code>Promise.<Array></code> * [.getPortfolio()](#User+getPortfolio) ⇒ <code>Promise.<Object></code> * [.getLinkedBanks()](#User+getLinkedBanks) ⇒ <code>Promise.<Object></code> * [.addDeposit(bankID, amount, frequency)](#User+addDeposit) ⇒ <code>Promise.<Object></code> @@ -1069,28 +1176,52 @@ Represents the user that is logged in while accessing the Robinhood API. Creates a new User object. -| Param | Type | -| --- | --- | -| username | <code>String</code> | -| password | <code>String</code> | +| Param | Type | Description | +| --- | --- | --- | +| username | <code>String</code> | | +| password | <code>String</code> | Optional. If not provided the user will be prompted via CLI. | <a name="User+authenticate"></a> -### user.authenticate() ⇒ <code>Promise</code> +### user.authenticate() ⇒ <code>Promise.<Boolean></code> Authenticates a user using the inputted username and password. +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+logout"></a> + +### user.logout() ⇒ <code>Promise.<Boolean></code> +Logout the user by expiring the authentication token. + **Kind**: instance method of [<code>User</code>](#User) <a name="User+getAccount"></a> ### user.getAccount() ⇒ <code>Promise</code> Returns vital information about balances and enabled features. +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+getBalances"></a> + +### user.getBalances() ⇒ <code>Promise.<Object></code> +Returns an object containing details on the user's cash and marginbalance. + +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+getBuyingPower"></a> + +### user.getBuyingPower() ⇒ <code>Promise</code> +Returns the amount of money available to be spent. + **Kind**: instance method of [<code>User</code>](#User) <a name="User+getUserInfo"></a> ### user.getUserInfo() ⇒ <code>Promise.<Object></code> Returns information like username, first / last name, creation date, id, and more. +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+getUID"></a> + +### user.getUID() ⇒ <code>Promise.<String></code> +Returns the user's unique ID. + **Kind**: instance method of [<code>User</code>](#User) <a name="User+getTaxInfo"></a> @@ -1121,6 +1252,24 @@ Returns the user's answers to basic questions regarding investment experiences. ### user.getRecentDayTrades() ⇒ <code>Promise.<Object></code> Returns arrays of recent option and equity day trades. +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+getRecentOrders"></a> + +### user.getRecentOrders() ⇒ <code>Promise.<Array.<Order>></code> +Returns an array of recent orders. + +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+cancelOpenOrders"></a> + +### user.cancelOpenOrders() ⇒ <code>Promise</code> +Cancels all open orders. + +**Kind**: instance method of [<code>User</code>](#User) +<a name="User+getRecentOptionOrders"></a> + +### user.getRecentOptionOrders() ⇒ <code>Promise.<Array></code> +Returns an array of recent option orders. + **Kind**: instance method of [<code>User</code>](#User) <a name="User+getPortfolio"></a> diff --git a/examples/highest-open-interest.js b/examples/highest-open-interest.js old mode 100644 new mode 100755 diff --git a/index.js b/index.js old mode 100644 new mode 100755 diff --git a/objects/algorithm/Backtest.js b/objects/algorithm/Backtest.js old mode 100644 new mode 100755 diff --git a/objects/algorithm/PaperTrader.js b/objects/algorithm/PaperTrader.js old mode 100644 new mode 100755 diff --git a/objects/algorithm/Scheduler.js b/objects/algorithm/Scheduler.js old mode 100644 new mode 100755 diff --git a/objects/broker/robinhood/Fundamentals.js b/objects/broker/robinhood/Fundamentals.js old mode 100644 new mode 100755 diff --git a/objects/broker/robinhood/Instrument.js b/objects/broker/robinhood/Instrument.js old mode 100644 new mode 100755 index 5561592..0253d92 --- a/objects/broker/robinhood/Instrument.js +++ b/objects/broker/robinhood/Instrument.js @@ -253,7 +253,7 @@ class Instrument extends Robinhood { request({ uri: "https://analytics.robinhood.com/instruments/tag/for-you/", headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { Robinhood.handleResponse(error, response, body, null, res => { diff --git a/objects/broker/robinhood/Market.js b/objects/broker/robinhood/Market.js old mode 100644 new mode 100755 diff --git a/objects/broker/robinhood/OptionInstrument.js b/objects/broker/robinhood/OptionInstrument.js old mode 100644 new mode 100755 index 3aa550b..76c7797 --- a/objects/broker/robinhood/OptionInstrument.js +++ b/objects/broker/robinhood/OptionInstrument.js @@ -47,7 +47,7 @@ class OptionInstrument extends Robinhood { else request({ uri: "https://api.robinhood.com/options/instruments/", headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => { @@ -71,7 +71,7 @@ class OptionInstrument extends Robinhood { request({ uri: url, headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => { diff --git a/objects/broker/robinhood/OptionOrder.js b/objects/broker/robinhood/OptionOrder.js old mode 100644 new mode 100755 index 338b497..a6762b2 --- a/objects/broker/robinhood/OptionOrder.js +++ b/objects/broker/robinhood/OptionOrder.js @@ -84,7 +84,7 @@ class OptionOrder extends Robinhood { request.post({ uri: _this.url + "/options/orders/", headers: { - 'Authorization': 'Token ' + _this.User.getAuthToken() + 'Authorization': 'Bearer ' + _this.User.getAuthToken() }, form: { account: _this.url + "/accounts/" + _this.User.getAccountNumber() + "/", @@ -109,7 +109,7 @@ class OptionOrder extends Robinhood { request({ uri: "https://api.robinhood.com/options/orders/", headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => { diff --git a/objects/broker/robinhood/Order.js b/objects/broker/robinhood/Order.js old mode 100644 new mode 100755 index 049189b..83ff7da --- a/objects/broker/robinhood/Order.js +++ b/objects/broker/robinhood/Order.js @@ -81,7 +81,7 @@ class Order extends Robinhood { else request.post({ uri: _this.url + "/orders/", headers: { - 'Authorization': 'Token ' + _this.user.getAuthToken() + 'Authorization': 'Bearer ' + _this.user.getAuthToken() }, form: { account: _this.url + "/accounts/" + _this.user.getAccountNumber() + "/", @@ -124,7 +124,7 @@ class Order extends Robinhood { request.post({ uri: _this.response.urls.cancel, headers: { - 'Authorization': 'Token ' + _this.user.getAuthToken() + 'Authorization': 'Bearer ' + _this.user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.user.getAuthToken(), resolve, reject); @@ -144,7 +144,7 @@ class Order extends Robinhood { request({ uri: "https://api.robinhood.com/orders/" + orderID + "/", headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => { @@ -164,7 +164,7 @@ class Order extends Robinhood { request({ uri: "https://api.robinhood.com/orders/", headers: { - 'Authorization': 'Token ' + user.getAuthToken() + 'Authorization': 'Bearer ' + user.getAuthToken() } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, user.getAuthToken(), res => { diff --git a/objects/broker/robinhood/Portfolio.js b/objects/broker/robinhood/Portfolio.js old mode 100644 new mode 100755 diff --git a/objects/broker/robinhood/Robinhood.js b/objects/broker/robinhood/Robinhood.js old mode 100644 new mode 100755 index 5d2f044..172cf30 --- a/objects/broker/robinhood/Robinhood.js +++ b/objects/broker/robinhood/Robinhood.js @@ -37,7 +37,7 @@ class Robinhood { uri: next }; if (token !== null) options.headers = { - 'Authorization': 'Token ' + token + 'Authorization': 'Bearer ' + token }; request(options, (error, response, body) => { if (error) reject(error); diff --git a/objects/broker/robinhood/User.js b/objects/broker/robinhood/User.js old mode 100644 new mode 100755 index 8f7f77d..4cbb1de --- a/objects/broker/robinhood/User.js +++ b/objects/broker/robinhood/User.js @@ -9,6 +9,7 @@ const request = require('request'); const fs = require('fs'); const async = require('async'); const path = require('path'); +const prompt = require('prompt'); /** * Represents the user that is logged in while accessing the Robinhood API. @@ -18,7 +19,7 @@ class User extends Robinhood { /** * Creates a new User object. * @param {String} username - * @param {String} password + * @param {String} password - Optional. If not provided the user will be prompted via CLI. */ constructor(username, password) { super(); @@ -35,25 +36,75 @@ class User extends Robinhood { authenticate() { const _this = this; return new Promise((resolve, reject) => { + if (_this.password == null) { + console.log("You didn't include a password in the constructor of your Robinhood user and it is required to authenticate your account."); + prompt.get({ + properties: { + password: { + required: true, + hidden: true + } + } + }, (error, result) => { + _this.password = result.password; + _preAuth(resolve, reject); + }) + } else _preAuth(resolve, reject); + }); + function _preAuth(resolve, reject) { request.post({ - uri: _this.url + "/api-token-auth/", + uri: _this.url + "/oauth2/token/", form: { username: _this.username, - password: _this.password + password: _this.password, + client_id: 'c82SH0WZOsabOXGP2sxqcj34FxkvfnWRZBKlBjFS', + grant_type: 'password', + scope: 'internal' } }, (error, response, body) => { if (error) reject(error); else if (response.statusCode !== 200) reject(new LibraryError(body)); else { - _this.token = JSON.parse(body).token; - _this.getAccount().then(account => { - _this.account = account.account_number; - _this.password = "*".repeat(_this.password.length); - resolve(_this); - }).catch(error => reject(error)); + const json = JSON.parse(body); + if (json.mfa_required) { + console.log("Multifactor authentication detected. Please enter your six-digit code below:"); + prompt.get({ + properties: { + code: { + pattern: /^[0-9]{6}$/, + message: "Your Robinhood code will most likely be texted to you and should only contain 6 integers.", + required: true + } + } + }, (error, result) => { + request.post({ + uri: _this.url + '/oauth2/token/', + form: { + username: _this.username, + password: _this.password, + client_id: 'c82SH0WZOsabOXGP2sxqcj34FxkvfnWRZBKlBjFS', + grant_type: 'password', + scope: 'internal', + mfa_code: result.code + } + }, (error, response, body) => { + if (error) reject(error); + else if (response.statusCode !== 200) reject(new LibraryError(body)); + else _postAuth(JSON.parse(body), resolve, reject); + }) + }) + } else _postAuth(json, resolve, reject); } }) - }) + } + function _postAuth(json, resolve, reject) { + _this.token = json.access_token; + _this.getAccount().then(account => { + _this.account = account.account_number; + _this.password = "*".repeat(_this.password.length); + resolve(_this); + }).catch(error => reject(error)); + } } /** @@ -66,7 +117,7 @@ class User extends Robinhood { request.post({ uri: _this.url + "/api-token-logout/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { if (error) reject(error); @@ -100,7 +151,7 @@ class User extends Robinhood { request({ uri: _this.url + "/accounts/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -167,7 +218,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -185,7 +236,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/id/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, res => { @@ -205,7 +256,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/basic_info/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -223,7 +274,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/additional_info/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -241,7 +292,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/employment/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -259,7 +310,7 @@ class User extends Robinhood { request({ uri: _this.url + "/user/investment_profile/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -277,7 +328,7 @@ class User extends Robinhood { request({ uri: _this.url + "/accounts/" + _this.account + "/recent_day_trades/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -319,7 +370,7 @@ class User extends Robinhood { request({ uri: _this.url + "/accounts/" + _this.account + "/positions/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { Robinhood.handleResponse(error, response, body, _this.token, res => { @@ -349,7 +400,7 @@ class User extends Robinhood { // request({ // uri: _this.url + "/midlands/notifications/stack/", // headers: { - // 'Authorization': 'Token ' + _this.token + // 'Authorization': 'Bearer ' + _this.token // } // }, (error, response, body) => { // return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -369,7 +420,7 @@ class User extends Robinhood { request({ uri: _this.url + "/ach/relationships/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -396,7 +447,7 @@ class User extends Robinhood { request({ uri: _this.url + "/ach/deposit_schedules/", headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token }, qs: { achRelationship: _this.url + "/ach/relationships/" + bankID + "/", @@ -422,7 +473,7 @@ class User extends Robinhood { request({ uri: _this.url + /documents/, headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { return Robinhood.handleResponse(error, response, body, _this.token, resolve, reject); @@ -452,7 +503,7 @@ class User extends Robinhood { const req = request({ uri: document.download_url, headers: { - 'Authorization': 'Token ' + _this.token + 'Authorization': 'Bearer ' + _this.token } }, (error, response, body) => { if (error) reject(error); diff --git a/objects/data/AlphaVantage.js b/objects/data/AlphaVantage.js old mode 100644 new mode 100755 index 6bca840..3d087cd --- a/objects/data/AlphaVantage.js +++ b/objects/data/AlphaVantage.js @@ -629,6 +629,35 @@ class AlphaVantage { ]); } + /** + * Returns an array of bollinger bands for the equity specified. + * https://www.investopedia.com/articles/technical/04/030304.asp + * @param {String} symbol + * @param {String} interval - Time interval between two consecutive data points in the time series. The following values are supported: 1min, 5min, 15min, 30min, 60min, daily, weekly, monthly + * @param {Number} timePeriod - Number of data points used to calculate each BBANDS value. Positive integers are accepted (e.g., time_period=60, time_period=200) + * @param {String} seriesType - The desired price type in the time series. Four types are supported: close, open, high, low + * @param {Number|Null} nbdevup - The standard deviation multiplier of the upper band. Positive integers are accepted. By default, nbdevup=2. + * @param {Number|Null} nbdevdn - The standard deviation multiplier of the lower band. Positive integers are accepted. By default, nbdevdn=2. + * @param {Number|Null} matype - Moving average type of the time series. By default, matype=0. Integers 0 - 8 are accepted with the following mappings. 0 = Simple Moving Average (SMA), 1 = Exponential Moving Average (EMA), 2 = Weighted Moving Average (WMA), 3 = Double Exponential Moving Average (DEMA), 4 = Triple Exponential Moving Average (TEMA), 5 = Triangular Moving Average (TRIMA), 6 = T3 Moving Average, 7 = Kaufman Adaptive Moving Average (KAMA), 8 = MESA Adaptive Moving Average (MAMA). + * @returns {Promise<Array>} + */ + bbands(symbol, interval, timePeriod, seriesType, nbdevup, nbdevdn, matype) { + return this._technical("BBANDS", symbol, interval, timePeriod, seriesType, [ + { + key: "nbdevup", + val: nbdevup !== null ? nbdevup : 2 + }, + { + key: "nbdevdn", + val: nbdevdn !== null ? nbdevdn : 2 + }, + { + key: "matype", + val: matype !== null ? matype : 0 + } + ]); + } + } module.exports = AlphaVantage; \ No newline at end of file diff --git a/objects/data/IEX.js b/objects/data/IEX.js old mode 100644 new mode 100755 diff --git a/objects/data/Nasdaq.js b/objects/data/Nasdaq.js old mode 100644 new mode 100755 diff --git a/objects/data/News.js b/objects/data/News.js old mode 100644 new mode 100755 diff --git a/objects/data/Query.js b/objects/data/Query.js old mode 100644 new mode 100755 diff --git a/objects/data/Stream.js b/objects/data/Stream.js old mode 100644 new mode 100755 diff --git a/objects/data/Yahoo.js b/objects/data/Yahoo.js old mode 100644 new mode 100755 diff --git a/objects/globals/LibraryError.js b/objects/globals/LibraryError.js old mode 100644 new mode 100755 diff --git a/objects/globals/OptionsChain.js b/objects/globals/OptionsChain.js old mode 100644 new mode 100755 diff --git a/objects/globals/Quote.js b/objects/globals/Quote.js old mode 100644 new mode 100755 diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index 656c8fc..a99808c --- a/package-lock.json +++ b/package-lock.json @@ -137,31 +137,16 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", + "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -172,9 +157,9 @@ } }, "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==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.1.tgz", + "integrity": "sha512-G3Aona26cXv8nWIwID6MP11WSishqnyOPQjYaVJ7CfY2Xgu5sHOXM39nQg6XtyfF9++oLV6l2uFGojBb4zglGA==", "requires": { "array-back": "^2.0.0" } @@ -320,9 +305,12 @@ "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } }, "assert-plus": { "version": "1.0.0", @@ -469,9 +457,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "babel-code-frame": { "version": "6.26.0", @@ -972,10 +960,9 @@ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" } @@ -1009,14 +996,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.x.x" - } - }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -1173,16 +1152,6 @@ "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=", - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", @@ -1270,35 +1239,11 @@ "string-width": "^2.0.0" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "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=", - "optional": true - } - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, "co-with-promise": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz", @@ -1339,10 +1284,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { "delayed-stream": "~1.0.0" } @@ -1382,6 +1332,12 @@ "typical": "^2.6.1" } }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "optional": true + }, "common-path-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz", @@ -1540,24 +1496,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.x.x" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.x.x" - } - } - } - }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -1589,6 +1527,11 @@ "array-find-index": "^1.0.1" } }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1631,7 +1574,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "declare.js": { "version": "0.0.8", @@ -1645,10 +1589,9 @@ "dev": true }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "defaults": { "version": "1.0.3", @@ -1682,9 +1625,9 @@ } }, "dmd": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.12.tgz", - "integrity": "sha512-79w644JdsB2TthYpVl2bDurX7i9Abaegg2E7X46Ajc135aASTMXxrHzJ9mOa5X5nbmnXwlBYiF68K+1baX+BzQ==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz", + "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==", "requires": { "array-back": "^2.0.0", "cache-point": "^0.4.1", @@ -1754,12 +1697,12 @@ "dev": true }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "empower-core": { @@ -1906,9 +1849,9 @@ } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extended": { "version": "0.0.6", @@ -1940,6 +1883,11 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, "fast-csv": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.4.1.tgz", @@ -1952,9 +1900,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-diff": { "version": "1.1.2", @@ -1977,12 +1925,27 @@ } }, "file-set": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.0.tgz", - "integrity": "sha512-cCWXfw+nrYoIoUVmEF7Xsw91lGWuObtSnTEZ7AmdvZou1A/6Xx237HfxdQyC/ayKRvQSMbNOBwg62OjN5JxbXw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz", + "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==", "requires": { "array-back": "^2.0.0", - "glob": "^7.1.2" + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "filename-regex": { @@ -1992,16 +1955,43 @@ "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", - "randomatic": "^1.1.3", + "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + } } }, "find-cache-dir": { @@ -2065,12 +2055,12 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -2085,39 +2075,29 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "aproba": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true @@ -2132,88 +2112,22 @@ "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", + "version": "1.0.0", "bundled": true, "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "brace-expansion": { - "version": "1.1.7", + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "balanced-match": "^0.4.1", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", + "chownr": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true @@ -2223,14 +2137,6 @@ "bundled": true, "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "bundled": true, @@ -2244,35 +2150,11 @@ "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", + "version": "2.6.9", "bundled": true, "dev": true, "optional": true, @@ -2281,16 +2163,11 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.5.1", "bundled": true, "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", "bundled": true, @@ -2298,74 +2175,25 @@ "optional": true }, "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", + "version": "1.0.3", "bundled": true, "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", + "fs-minipass": { + "version": "1.2.5", "bundled": true, "dev": true, "optional": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } + "optional": true }, "gauge": { "version": "2.7.4", @@ -2383,27 +2211,11 @@ "wide-align": "^1.1.0" } }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "glob": { "version": "7.1.2", "bundled": true, "dev": true, + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2413,64 +2225,35 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, "has-unicode": { "version": "2.0.1", "bundled": true, "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", + "iconv-lite": { + "version": "0.4.21", "bundled": true, "dev": true, + "optional": true, "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", + "ignore-walk": { + "version": "3.0.1", "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2482,7 +2265,7 @@ "dev": true }, "ini": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "dev": true, "optional": true @@ -2495,111 +2278,43 @@ "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, "dev": true, "optional": true }, - "jsprim": { - "version": "1.4.0", + "minimatch": { + "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "brace-expansion": "^1.1.7" } }, - "mime-db": { - "version": "1.27.0", + "minimist": { + "version": "0.0.8", "bundled": true, "dev": true }, - "mime-types": { - "version": "2.1.15", + "minipass": { + "version": "2.2.4", "bundled": true, "dev": true, "requires": { - "mime-db": "~1.27.0" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, - "minimatch": { - "version": "3.0.4", + "minizlib": { + "version": "1.1.0", "bundled": true, "dev": true, + "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "minipass": "^2.2.1" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, "mkdirp": { "version": "0.5.1", "bundled": true, @@ -2614,23 +2329,33 @@ "dev": true, "optional": true }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.39", + "version": "0.10.0", "bundled": true, "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", - "hawk": "3.1.3", "mkdirp": "^0.5.1", + "needle": "^2.2.0", "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", "rc": "^1.1.7", - "request": "2.81.0", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" + "tar": "^4" } }, "nopt": { @@ -2643,8 +2368,24 @@ "osenv": "^0.1.4" } }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, "npmlog": { - "version": "4.1.0", + "version": "4.1.2", "bundled": true, "dev": true, "optional": true, @@ -2660,12 +2401,6 @@ "bundled": true, "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", "bundled": true, @@ -2693,7 +2428,7 @@ "optional": true }, "osenv": { - "version": "0.1.4", + "version": "0.1.5", "bundled": true, "dev": true, "optional": true, @@ -2705,38 +2440,22 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, "rc": { - "version": "1.2.1", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "~0.4.0", + "deep-extend": "^0.5.1", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" @@ -2751,112 +2470,63 @@ } }, "readable-stream": { - "version": "2.2.9", + "version": "2.3.6", "bundled": true, "dev": true, + "optional": true, "requires": { - "buffer-shims": "~1.0.0", "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "inherits": "~2.0.3", "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, "rimraf": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "dev": true, + "optional": true, "requires": { "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", + "version": "5.1.1", "bundled": true, "dev": true }, - "semver": { - "version": "5.3.0", + "safer-buffer": { + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, - "set-blocking": { - "version": "2.0.0", + "sax": { + "version": "1.2.4", "bundled": true, "dev": true, "optional": true }, - "signal-exit": { - "version": "3.0.2", + "semver": { + "version": "5.5.0", "bundled": true, "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", + "set-blocking": { + "version": "2.0.0", "bundled": true, "dev": true, - "requires": { - "hoek": "2.x.x" - } + "optional": true }, - "sshpk": { - "version": "1.13.0", + "signal-exit": { + "version": "3.0.2", "bundled": true, "dev": true, - "optional": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "string-width": { "version": "1.0.2", @@ -2869,19 +2539,14 @@ } }, "string_decoder": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "bundled": true, @@ -2897,81 +2562,26 @@ "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", + "version": "4.4.1", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "^5.0.1" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "bundled": true, @@ -2985,6 +2595,11 @@ "version": "1.0.2", "bundled": true, "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true } } }, @@ -3154,28 +2769,20 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "requires": { - "async": "^1.4.0", + "async": "^2.5.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -3185,11 +2792,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^5.1.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, @@ -3240,22 +2847,6 @@ "integrity": "sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac=", "dev": true }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -3317,6 +2908,11 @@ "safe-buffer": "^5.0.1" } }, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -3409,7 +3005,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-builtin-module": { "version": "1.0.0", @@ -3674,8 +3271,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdoc": { "version": "3.5.5", @@ -3764,9 +3360,9 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", @@ -3794,6 +3390,7 @@ "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.5" } @@ -3824,12 +3421,6 @@ "package-json": "^4.0.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -3938,11 +3529,6 @@ "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ=" }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -4003,7 +3589,7 @@ }, "marked": { "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" }, "matcher": { @@ -4015,6 +3601,12 @@ "escape-string-regexp": "^1.0.4" } }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5-hex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz", @@ -4166,16 +3758,16 @@ } }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -4205,9 +3797,9 @@ } }, "mkdirp2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz", - "integrity": "sha1-zI3YJl8fBuLY9bELblL04FC+0hs=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.4.tgz", + "integrity": "sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw==" }, "moment": { "version": "2.22.0", @@ -4240,6 +3832,11 @@ "minimatch": "^3.0.0" } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, "nan": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", @@ -4247,6 +3844,11 @@ "dev": true, "optional": true }, + "ncp": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" + }, "node-schedule": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.0.tgz", @@ -4302,9 +3904,9 @@ "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -4649,6 +4251,11 @@ "find-up": "^2.1.0" } }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" + }, "plur": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", @@ -4699,75 +4306,58 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, + "prompt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", + "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", + "requires": { + "colors": "^1.1.2", + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.3.x", + "winston": "2.1.x" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "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.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "rc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", - "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "~0.4.0", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -4776,6 +4366,14 @@ } } }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -4854,7 +4452,7 @@ "dependencies": { "array-back": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", "requires": { "typical": "^2.6.0" @@ -4891,7 +4489,7 @@ "dependencies": { "array-back": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", "requires": { "typical": "^2.6.0" @@ -4998,7 +4596,8 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -5010,32 +4609,37 @@ } }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "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", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "require-precompiled": { @@ -5054,7 +4658,7 @@ "dependencies": { "underscore": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" } } @@ -5083,13 +4687,17 @@ "signal-exit": "^3.0.2" } }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "align-text": "^0.1.1" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -5097,6 +4705,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -5170,14 +4783,6 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.x.x" - } - }, "socket.io-client": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.0.tgz", @@ -5228,7 +4833,7 @@ "dependencies": { "array-back": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", "requires": { "typical": "^2.6.0" @@ -5253,7 +4858,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-support": { "version": "0.5.4", @@ -5311,9 +4917,9 @@ "dev": true }, "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5322,9 +4928,15 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", @@ -5341,7 +4953,7 @@ "dependencies": { "array-back": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", "requires": { "typical": "^2.6.0" @@ -5383,11 +4995,6 @@ "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -5473,22 +5080,15 @@ "dev": true }, "table-layout": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz", - "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz", + "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==", "requires": { "array-back": "^2.0.0", - "deep-extend": "~0.5.0", + "deep-extend": "~0.6.0", "lodash.padend": "^4.6.1", "typical": "^2.6.1", "wordwrapjs": "^3.0.0" - }, - "dependencies": { - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - } } }, "taffydb": { @@ -5559,11 +5159,19 @@ "dev": true }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "trim-newlines": { @@ -5595,8 +5203,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "typical": { "version": "2.6.1", @@ -5604,22 +5211,23 @@ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "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=", - "optional": true - }, "uid2": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", @@ -5633,7 +5241,7 @@ }, "underscore": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" }, "underscore-contrib": { @@ -5646,7 +5254,7 @@ "dependencies": { "underscore": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" } } @@ -5695,6 +5303,14 @@ "xdg-basedir": "^3.0.0" } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -5709,10 +5325,35 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "utile": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", + "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", + "requires": { + "async": "~0.9.0", + "deep-equal": "~0.2.1", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "1.0.x", + "rimraf": "2.x.x" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" + } + } + }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validate-npm-package-license": { "version": "3.0.3", @@ -5771,11 +5412,36 @@ "string-width": "^2.1.1" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true + "winston": { + "version": "2.1.1", + "resolved": "http://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "colors": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=" + } + } }, "wordwrap": { "version": "0.0.3", @@ -5896,26 +5562,6 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true - } - } - }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json old mode 100644 new mode 100755 index 5e0e1f3..995c303 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "algotrader", - "version": "1.3.1", + "version": "1.4.0", "description": "Algorithmically trade stocks and options using Robinhood, Yahoo Finance, and more.", "main": "index.js", "scripts": { @@ -36,12 +36,12 @@ "cheerio": "^1.0.0-rc.2", "fast-csv": "^2.4.1", "ftp": "^0.3.10", - "jsdoc-to-markdown": "^4.0.1", "lodash": "^4.17.5", "moment": "^2.22.0", "node-schedule": "^1.3.0", "ora": "^2.0.0", - "request": "^2.85.0", + "prompt": "^1.0.0", + "request": "^2.88.0", "socket.io-client": "^2.1.0", "xml-js": "^1.6.2" }, diff --git a/test.js b/test.js old mode 100644 new mode 100755