diff --git a/README.md b/README.md
index f7cae8c..8a99a94 100644
--- a/README.md
+++ b/README.md
@@ -8,12 +8,12 @@
**PokéNurse** is a desktop application for Windows and Mac that allows you to manage your pokémon from Pokémon Go without the need for a mobile device. You can now favorite, transfer, and evolve from the comfort of your own home!
-## Downloads for v1.9.0
+## Downloads for v2.0.0
You may view all the releases [here](https://github.com/vinnymac/PokeNurse/releases)
-* [macOS](https://github.com/vinnymac/PokeNurse/releases/download/v1.9.0/PokeNurse.dmg)
-* [Windows](https://github.com/vinnymac/PokeNurse/releases/download/v1.9.0/PokeNurse.exe)
-* [Linux 32 bit](https://github.com/vinnymac/PokeNurse/releases/download/v1.9.0/PokeNurse-ia32.deb)
-* [Linux 64 bit](https://github.com/vinnymac/PokeNurse/releases/download/v1.9.0/PokeNurse-x64.deb)
+* [macOS](https://github.com/vinnymac/PokeNurse/releases/download/v2.0.0/PokeNurse.dmg)
+* [Windows](https://github.com/vinnymac/PokeNurse/releases/download/v2.0.0/PokeNurse.exe)
+* [Linux 32 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.0.0/PokeNurse-ia32.deb)
+* [Linux 64 bit](https://github.com/vinnymac/PokeNurse/releases/download/v2.0.0/PokeNurse-x64.deb)
## Examples
![Login Window](app/loginExample.png)
diff --git a/app/actions/authenticate.js b/app/actions/authenticate.js
index 04b8e2b..70610ec 100644
--- a/app/actions/authenticate.js
+++ b/app/actions/authenticate.js
@@ -9,11 +9,10 @@ import {
import * as fs from 'async-file'
-import client from '../client'
+import { setClient } from '../client'
import {
- getTrainerInfo,
- getTrainerPokemon
+ getTrainerInfoAndPokemon,
} from './trainer'
const saveAccountCredentialsFailed = createAction('SAVE_ACCOUNT_CREDENTIALS_FAILED')
@@ -29,9 +28,7 @@ const userLoginFailed = createAction('USER_LOGIN_FAILED')
const accountPath = path.join(remote.app.getPath('appData'), '/pokenurse/account.json')
export default {
- client,
-
- login({ method, username, password }) {
+ login({ method, username, password, hashingKey }) {
return async (dispatch) => {
dispatch(userLoginStarted())
@@ -45,15 +42,25 @@ export default {
try {
const token = await login.login(username, password)
- client.setAuthInfo(method, token)
+ const options = {
+ hashingKey,
+ authType: method,
+ authToken: token,
+ useHashingServer: !!hashingKey,
+ }
+
+ // Use API version 0.51 (minimum version for hashing server)
+ if (hashingKey) options.version = 5100
+
+ const client = new pogobuf.Client(options)
+
client.init()
+ setClient(client)
+
// TODO display a loading spinner
// then fetch all necessary things
- await Promise.all([
- dispatch(getTrainerInfo()),
- dispatch(getTrainerPokemon())
- ])
+ await dispatch(getTrainerInfoAndPokemon())
dispatch(userLoginSuccess())
} catch (error) {
diff --git a/app/actions/trainer.js b/app/actions/trainer.js
index 628e744..c9048bb 100644
--- a/app/actions/trainer.js
+++ b/app/actions/trainer.js
@@ -10,7 +10,7 @@ import {
ipcRenderer,
} from 'electron'
-import client from '../client'
+import { getClient } from '../client'
// TODO Must move these helpers to app folder
import utils from '../utils'
@@ -53,7 +53,7 @@ function generateEmptySpecies(candies, pokemonSettings) {
})
}
-// TODO Can we find these constants in POGOBuf or item templates?
+// TODO Can we find these constants in POGOProtos or item templates?
const MILLISECONDS_FACTOR = 1000
const MOVE2_CHARGE_DELAY_MS = 500
const STAB_MULTIPLIER = 1.25 // 25% damage boost
@@ -256,18 +256,22 @@ const transferPokemonFailed = createAction('TRANSFER_POKEMON_FAILED')
const evolvePokemonSuccess = createAction('EVOLVE_POKEMON_SUCCESS')
const evolvePokemonFailed = createAction('EVOLVE_POKEMON_FAILED')
+function handleGetPlayerResponse(dispatch, response) {
+ if (!response.success) {
+ throw new Error('Failed in retrieving player info. Please restart.')
+ }
+
+ dispatch(getTrainerInfoSuccess({
+ trainerData: response.player_data
+ }))
+}
+
function getTrainerInfo() {
return async (dispatch) => {
try {
- const response = await client.getPlayer()
+ const response = await getClient().getPlayer()
- if (!response.success) {
- dispatch(getTrainerInfoFailed('Failed in retrieving player info. Please restart.'))
- return
- }
- dispatch(getTrainerInfoSuccess({
- trainerData: response.player_data
- }))
+ handleGetPlayerResponse(dispatch, response)
} catch (error) {
dispatch(getTrainerInfoFailed(error))
}
@@ -315,9 +319,32 @@ function parseItemTemplates(templates) {
let splitItemTemplates = null
+function handleGetItemTemplatesResponse(dispatch, itemTemplates) {
+ if (!itemTemplates) return
+
+ // TODO do not do this everytime we fetch the trainer pokemon, separate first fetch + refresh
+ itemTemplates.success = itemTemplates.result === 1
+
+ if (!itemTemplates.success) {
+ throw new Error('Failed to retrieve item templates')
+ }
+
+ splitItemTemplates = parseItemTemplates(itemTemplates)
+}
+
+function handleGetInventoryResponse(dispatch, inventory) {
+ if (!inventory.success) {
+ throw new Error('Failed to retrieve Trainers Pokemon')
+ }
+
+ const payload = parseInventory(inventory)
+
+ dispatch(getTrainerPokemonSuccess(payload))
+}
+
async function getInventoryAndItemTemplates(dispatch, inventoryOnly) {
try {
- const batch = client.batchStart()
+ const batch = getClient().batchStart()
batch.getInventory(0)
if (!inventoryOnly) batch.downloadItemTemplates()
@@ -332,47 +359,47 @@ async function getInventoryAndItemTemplates(dispatch, inventoryOnly) {
[inventory, itemTemplates] = response
}
- if (!inventory.success) {
- dispatch(getTrainerPokemonFailed('Failed to retrieve Trainers Pokemon'))
- return
- }
-
- if (!inventoryOnly) {
- // TODO do not do this everytime we fetch the trainer pokemon, separate first fetch + refresh
- itemTemplates.success = itemTemplates.result === 1
-
- if (!itemTemplates.success) {
- dispatch(getTrainerPokemonFailed('Failed to retrieve item templates'))
- return
- }
-
- splitItemTemplates = parseItemTemplates(itemTemplates)
- }
-
- const payload = parseInventory(inventory)
-
- dispatch(getTrainerPokemonSuccess(payload))
+ handleGetItemTemplatesResponse(dispatch, itemTemplates)
+ handleGetInventoryResponse(dispatch, inventory)
} catch (error) {
dispatch(getTrainerPokemonFailed(error))
}
}
+function getTrainerInfoAndPokemon() {
+ return async (dispatch) => {
+ const response = await getClient()
+ .batchStart()
+ .getInventory(0)
+ .downloadItemTemplates()
+ .getPlayer()
+ .batchCall()
+
+ const [inventory, itemTemplates, player] = response
+
+ handleGetItemTemplatesResponse(dispatch, itemTemplates)
+ handleGetInventoryResponse(dispatch, inventory)
+ handleGetPlayerResponse(dispatch, player)
+ }
+}
+
function refreshPokemon() {
- return (dispatch) => getInventoryAndItemTemplates(dispatch, true)
+ return async (dispatch) => getInventoryAndItemTemplates(dispatch, true)
}
+// TODO might be unnecessary now
function getTrainerPokemon() {
- return (dispatch) => getInventoryAndItemTemplates(dispatch)
+ return async (dispatch) => getInventoryAndItemTemplates(dispatch)
}
function powerUpPokemon(pokemon) {
return async (dispatch) => {
try {
- await client.upgradePokemon(pokemon.id)
+ await getClient().upgradePokemon(pokemon.id)
// TODO parse the response instead of retrieving all the new pokemon
// Requires replacing the main parsing with more functional code
- await dispatch(getTrainerPokemon())
+ await dispatch(refreshPokemon())
dispatch(powerUpPokemonSuccess(pokemon))
} catch (error) {
dispatch(powerUpPokemonFailed(error))
@@ -388,7 +415,7 @@ function toggleFavoritePokemon(pokemon) {
favorite: !pokemon.favorite ? -1 : -0
})
- await client.setFavoritePokemon(pokemon.id, !!updatedPokemon.favorite)
+ await getClient().setFavoritePokemon(pokemon.id, !!updatedPokemon.favorite)
dispatch(toggleFavoritePokemonSuccess(updatedPokemon))
} catch (error) {
dispatch(toggleFavoritePokemonFailed(error))
@@ -401,7 +428,7 @@ function renamePokemon(pokemon, nickname, callback) {
return async (dispatch) => {
try {
- await client.nicknamePokemon(updatedPokemon.id, updatedPokemon.nickname)
+ await getClient().nicknamePokemon(updatedPokemon.id, updatedPokemon.nickname)
dispatch(renamePokemonSuccess(updatedPokemon))
@@ -429,7 +456,7 @@ function transferPokemon(pokemon, delay) {
return async (dispatch) => {
try {
await sleep(delay)
- await client.releasePokemon(pokemon.id)
+ await getClient().releasePokemon(pokemon.id)
dispatch(transferPokemonSuccess(pokemon))
} catch (error) {
dispatch(transferPokemonFailed(error))
@@ -442,7 +469,7 @@ function evolvePokemon(pokemon, delay) {
return async (dispatch) => {
try {
await sleep(delay)
- await client.evolvePokemon(pokemon.id)
+ await getClient().evolvePokemon(pokemon.id)
dispatch(evolvePokemonSuccess(pokemon))
} catch (error) {
dispatch(evolvePokemonFailed(error))
@@ -454,7 +481,7 @@ function evolvePokemon(pokemon, delay) {
const updateMonster = createAction('UPDATE_MONSTER')
function batchStart(selectedPokemon, method) {
- let batch = client.batchStart()
+ let batch = getClient().batchStart()
selectedPokemon.forEach((p) => {
batch = batch[method](p.id)
@@ -468,7 +495,7 @@ function resetStatusAndGetPokemon(errorMessage) {
try {
dispatch(resetStatus())
await sleep(100) // Pogobuf may need a tick after a large batch
- await dispatch(getTrainerPokemon())
+ await dispatch(refreshPokemon())
if (errorMessage) ipcRenderer.send('error-message', errorMessage)
} catch (e) {
errorMessage = errorMessage ? `${errorMessage}\n\n${e}` : `Failed to fetch pokemon:\n\n${e}`
@@ -513,6 +540,7 @@ export default {
sortWithDefaults: createAction('SORT_WITH_DEFAULTS'),
getTrainerInfo,
getTrainerPokemon,
+ getTrainerInfoAndPokemon,
powerUpPokemon,
toggleFavoritePokemon,
renamePokemon,
diff --git a/app/client.js b/app/client.js
index 7742893..cf45068 100644
--- a/app/client.js
+++ b/app/client.js
@@ -1,3 +1,11 @@
-import pogobuf from 'pogobuf'
+let client = null
-export default new pogobuf.Client()
+export default {
+ getClient() {
+ return client
+ },
+
+ setClient(c) {
+ client = c
+ }
+}
diff --git a/app/package.json b/app/package.json
index 3458b8c..57e9954 100644
--- a/app/package.json
+++ b/app/package.json
@@ -1,7 +1,7 @@
{
"name": "PokeNurse",
"productName": "PokeNurse",
- "version": "1.9.0",
+ "version": "2.0.0",
"description": "A tool for Pokémon Go to aid in transferring and evolving Pokémon",
"main": "./main.js",
"author": {
@@ -13,7 +13,7 @@
"dependencies": {
"async-file": "^2.0.2",
"electron-localshortcut": "^1.0.0",
- "node-pogo-protos": "2.4.0",
- "pogobuf": "1.8.0"
+ "node-pogo-protos": "2.4.2",
+ "pogobuf": "1.9.0"
}
}
diff --git a/app/screens/Login/components/LoginFormContainer.js b/app/screens/Login/components/LoginFormContainer.js
index 7f482de..2e01864 100644
--- a/app/screens/Login/components/LoginFormContainer.js
+++ b/app/screens/Login/components/LoginFormContainer.js
@@ -2,10 +2,18 @@ import React, {
PropTypes
} from 'react'
import { ipcRenderer } from 'electron'
+import { findDOMNode } from 'react-dom'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import {
- ProgressBar
+ ProgressBar,
+ InputGroup,
+ FormControl,
+ FormGroup,
+ OverlayTrigger,
+ Tooltip,
+ ButtonGroup,
+ Button,
} from 'react-bootstrap'
import {
@@ -19,6 +27,11 @@ const AUTH_METHODS = {
google: 'google'
}
+const hashKeyTooltip = (
+ Hash Keys for 0.51+ support, instead of the potentially unsafe 0.45 API.
+ Note that Hash Keys currently have varying costs based on your Requests per Minute.
+)
+
const LoginForm = React.createClass({
displayName: 'LoginForm',
@@ -56,70 +69,86 @@ const LoginForm = React.createClass({
return (
)
},
radioLabelClick(authMethod) {
- this[authMethod].click()
+ const authButtonNode = findDOMNode(this[authMethod])
+ authButtonNode.click()
},
handleChangeAuth(e) {
@@ -159,18 +190,29 @@ const LoginForm = React.createClass({
const method = this.state.authMethod
- if (this.username.value === '' || this.password.value === '') {
- ipcRenderer.send('error-message', 'Missing username and/or password')
+ const username = findDOMNode(this.username).value
+ const password = findDOMNode(this.password).value
+ const hashingKey = findDOMNode(this.hashKey).value
+ const rememberMe = findDOMNode(this.rememberMe).checked
+
+ if (!username) {
+ ipcRenderer.send('error-message', 'A username is required to login.')
+ return
+ }
+
+ if (!password) {
+ ipcRenderer.send('error-message', 'A password is required to login.')
return
}
const credentials = {
method,
- username: this.username.value,
- password: this.password.value
+ username,
+ password,
+ hashingKey,
}
- if (this.rememberMe.checked) {
+ if (rememberMe) {
this.props.saveAccountCredentials(credentials)
} else {
this.props.checkAndDeleteCredentials()
diff --git a/app/yarn.lock b/app/yarn.lock
index 5e5e342..88ca4c4 100644
--- a/app/yarn.lock
+++ b/app/yarn.lock
@@ -55,13 +55,13 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
-bluebird-retry@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.8.0.tgz#2d05d01b4ad1d9e99e9a89a0b158737175863ff7"
+bluebird-retry@^0.10.1:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.10.1.tgz#cdf76b01d4a6dd4fec4e2c84360a8a09007f67da"
-bluebird@^3.4.1:
- version "3.4.6"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f"
+bluebird@^3.4.7:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
boom@2.x.x:
version "2.10.1"
@@ -376,18 +376,18 @@ minimatch@^3.0.2, "minimatch@2 || 3":
dependencies:
brace-expansion "^1.0.0"
-node-pogo-protos@^2.0.0, node-pogo-protos@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/node-pogo-protos/-/node-pogo-protos-2.4.0.tgz#37af78e4eeeeff1b9c8185b1d8afa14a0b0a8407"
+node-pogo-protos@^2.4.0, node-pogo-protos@2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/node-pogo-protos/-/node-pogo-protos-2.4.2.tgz#eac822e0fcbc89bbd052249350109b3b499ebfa2"
dependencies:
protobufjs "^5.0.1"
-"node-pogo-signature@git+https://github.com/starkevin/node-pogo-signature.git":
- version "3.0.0"
- resolved "git+https://github.com/starkevin/node-pogo-signature.git#b0dc68d3524c80ebadecef5ad8945cec88103271"
+node-pogo-signature@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/node-pogo-signature/-/node-pogo-signature-4.0.0.tgz#2b4b2b1d7784d94d8717e54567d42cb834f86dba"
dependencies:
long "^3.2.0"
- pcrypt laverdet/pcrypt
+ pcrypt starkevin/pcrypt
protobufjs "^5.0.1"
number-is-nan@^1.0.0:
@@ -418,9 +418,9 @@ path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-pcrypt@laverdet/pcrypt:
+"pcrypt@github:starkevin/pcrypt":
version "1.0.0"
- resolved "https://codeload.github.com/laverdet/pcrypt/tar.gz/3339506cb2ee58d23ad96f4391c6e33e62c71243"
+ resolved "https://codeload.github.com/starkevin/pcrypt/tar.gz/867562d3a55f41cf2cc542d1e492d5b094c820de"
pinkie-promise@^2.0.0:
version "2.0.1"
@@ -432,18 +432,18 @@ pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-pogobuf@1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/pogobuf/-/pogobuf-1.8.0.tgz#5f0e17c4f9a41690a50b235cfc96fd7764e34eab"
+pogobuf@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/pogobuf/-/pogobuf-1.9.0.tgz#62f9750e1dc0dba6941a858bcc2cf16176628065"
dependencies:
- bluebird "^3.4.1"
- bluebird-retry "^0.8.0"
+ bluebird "^3.4.7"
+ bluebird-retry "^0.10.1"
gpsoauthnode "0.0.5"
long "^3.2.0"
- node-pogo-protos "^2.0.0"
- node-pogo-signature "git+https://github.com/starkevin/node-pogo-signature.git"
- request "^2.74.0"
- s2-geometry "^1.2.7"
+ node-pogo-protos "^2.4.0"
+ node-pogo-signature "^4.0.0"
+ request "^2.79.0"
+ s2-geometry "^1.2.9"
protobufjs@^5.0.1:
version "5.0.1"
@@ -462,7 +462,7 @@ qs@~6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
-request@^2.73.0, request@^2.74.0:
+request@^2.73.0, request@^2.79.0:
version "2.79.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
dependencies:
@@ -493,7 +493,7 @@ rimraf@^2.5.2:
dependencies:
glob "^7.0.5"
-s2-geometry@^1.2.7:
+s2-geometry@^1.2.9:
version "1.2.9"
resolved "https://registry.yarnpkg.com/s2-geometry/-/s2-geometry-1.2.9.tgz#20c2eadc621322c0f5ebc5098fa614525031f1e4"
dependencies:
diff --git a/package.json b/package.json
index 6ff9bcd..00c880f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "PokeNurse",
- "version": "1.9.0",
+ "version": "2.0.0",
"description": "A tool for Pokémon Go to aid in transferring and evolving Pokémon",
"main": "main.js",
"scripts": {
@@ -93,7 +93,7 @@
"babel-preset-stage-0": "^6.5.0",
"babel-register": "6.18.0",
"babili-webpack-plugin": "^0.0.7",
- "cross-env": "3.1.3",
+ "cross-env": "3.1.4",
"css-loader": "0.26.1",
"del": "^2.2.2",
"devtron": "^1.3.0",
@@ -111,10 +111,10 @@
"express": "^4.14.0",
"extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.9.0",
- "html-webpack-plugin": "2.25.0",
+ "html-webpack-plugin": "2.26.0",
"jquery": "^2.2.4",
"json-loader": "^0.5.4",
- "lodash": "4.17.3",
+ "lodash": "4.17.4",
"minimist": "^1.2.0",
"moment": "2.17.1",
"postcss": "5.2.8",
@@ -128,8 +128,8 @@
"webpack": "1.14.0",
"webpack-dashboard": "0.2.0",
"webpack-dev-middleware": "1.9.0",
- "webpack-hot-middleware": "2.14.0",
- "webpack-merge": "2.0.0",
+ "webpack-hot-middleware": "2.15.0",
+ "webpack-merge": "2.2.0",
"webpack-validator": "2.3.0"
},
"dependencies": {
@@ -138,8 +138,8 @@
"electron-debug": "^1.1.0",
"electron-localshortcut": "^1.0.0",
"font-awesome": "^4.7.0",
- "node-pogo-protos": "2.4.0",
- "pogobuf": "1.8.0",
+ "node-pogo-protos": "2.4.2",
+ "pogobuf": "1.9.0",
"react": "^15.4.1",
"react-dom": "^15.4.1",
"react-redux": "5.0.1",
diff --git a/yarn.lock b/yarn.lock
index 8eae95c..ecf3179 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1419,18 +1419,22 @@ bluebird-lst-c@^1.0.4, bluebird-lst-c@^1.0.5:
dependencies:
bluebird "^3.4.6"
-bluebird-retry@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.8.0.tgz#2d05d01b4ad1d9e99e9a89a0b158737175863ff7"
+bluebird-retry@^0.10.1:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.10.1.tgz#cdf76b01d4a6dd4fec4e2c84360a8a09007f67da"
bluebird@^2.9.30:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
-bluebird@^3.4.1, bluebird@^3.4.6:
+bluebird@^3.4.6:
version "3.4.6"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f"
+bluebird@^3.4.7:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
@@ -2005,12 +2009,18 @@ create-hmac@^1.1.0, create-hmac@^1.1.2:
create-hash "^1.1.0"
inherits "^2.0.1"
-cross-env@^3.1.1, cross-env@3.1.3:
+cross-env@^3.1.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.1.3.tgz#58cd8231808f50089708b091f7dd37275a8e8154"
dependencies:
cross-spawn "^3.0.1"
+cross-env@3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.1.4.tgz#56e8bca96f17908a6eb1bc2012ca126f92842130"
+ dependencies:
+ cross-spawn "^3.0.1"
+
cross-spawn@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
@@ -4230,9 +4240,9 @@ lodash@4.11.1:
version "4.11.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.11.1.tgz#a32106eb8e2ec8e82c241611414773c9df15f8bc"
-lodash@4.17.3:
- version "4.17.3"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7"
+lodash@4.17.4:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
log-symbols@^1.0.2:
version "1.0.2"
@@ -4597,24 +4607,18 @@ node-libs-browser@^1.0.0:
util "^0.10.3"
vm-browserify "0.0.4"
-node-pogo-protos@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/node-pogo-protos/-/node-pogo-protos-2.2.0.tgz#715f35f2aa084d04d2eaa2a40b7ea984b6ef30cd"
- dependencies:
- protobufjs "^5.0.1"
-
-node-pogo-protos@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/node-pogo-protos/-/node-pogo-protos-2.4.0.tgz#37af78e4eeeeff1b9c8185b1d8afa14a0b0a8407"
+node-pogo-protos@^2.4.0, node-pogo-protos@2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/node-pogo-protos/-/node-pogo-protos-2.4.2.tgz#eac822e0fcbc89bbd052249350109b3b499ebfa2"
dependencies:
protobufjs "^5.0.1"
-"node-pogo-signature@git+https://github.com/starkevin/node-pogo-signature.git":
- version "3.0.0"
- resolved "git+https://github.com/starkevin/node-pogo-signature.git#b0dc68d3524c80ebadecef5ad8945cec88103271"
+node-pogo-signature@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/node-pogo-signature/-/node-pogo-signature-4.0.0.tgz#2b4b2b1d7784d94d8717e54567d42cb834f86dba"
dependencies:
long "^3.2.0"
- pcrypt laverdet/pcrypt
+ pcrypt starkevin/pcrypt
protobufjs "^5.0.1"
node-pre-gyp@^0.6.29:
@@ -4956,9 +4960,9 @@ pbkdf2@^3.0.3:
dependencies:
create-hmac "^1.1.2"
-pcrypt@laverdet/pcrypt:
+"pcrypt@github:starkevin/pcrypt":
version "1.0.0"
- resolved "https://codeload.github.com/laverdet/pcrypt/tar.gz/161f98fbea3e0ae1fe6e3b5a47e6ab029afdd9be"
+ resolved "https://codeload.github.com/starkevin/pcrypt/tar.gz/867562d3a55f41cf2cc542d1e492d5b094c820de"
pend@~1.2.0:
version "1.2.0"
@@ -5021,18 +5025,18 @@ pluralize@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
-pogobuf@1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/pogobuf/-/pogobuf-1.8.0.tgz#5f0e17c4f9a41690a50b235cfc96fd7764e34eab"
+pogobuf@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/pogobuf/-/pogobuf-1.9.0.tgz#62f9750e1dc0dba6941a858bcc2cf16176628065"
dependencies:
- bluebird "^3.4.1"
- bluebird-retry "^0.8.0"
+ bluebird "^3.4.7"
+ bluebird-retry "^0.10.1"
gpsoauthnode "0.0.5"
long "^3.2.0"
- node-pogo-protos "^2.0.0"
- node-pogo-signature "git+https://github.com/starkevin/node-pogo-signature.git"
- request "^2.74.0"
- s2-geometry "^1.2.7"
+ node-pogo-protos "^2.4.0"
+ node-pogo-signature "^4.0.0"
+ request "^2.79.0"
+ s2-geometry "^1.2.9"
postcss, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.5:
version "5.2.6"
@@ -5802,7 +5806,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-request@^2.45.0, request@^2.72.0, request@^2.73.0, request@^2.74.0, request@^2.75.0:
+request@^2.45.0, request@^2.72.0, request@^2.73.0, request@^2.75.0, request@^2.79.0:
version "2.79.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
dependencies:
@@ -5927,7 +5931,7 @@ rx-lite@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
-s2-geometry@^1.2.7:
+s2-geometry@^1.2.9:
version "1.2.9"
resolved "https://registry.yarnpkg.com/s2-geometry/-/s2-geometry-1.2.9.tgz#20c2eadc621322c0f5ebc5098fa614525031f1e4"
dependencies:
@@ -6724,18 +6728,18 @@ webpack-dev-middleware@1.9.0:
path-is-absolute "^1.0.0"
range-parser "^1.0.3"
-webpack-hot-middleware@2.14.0:
- version "2.14.0"
- resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.14.0.tgz#64bb8cf056ba84c699d148840ae77e54179abb6d"
+webpack-hot-middleware@2.15.0:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.15.0.tgz#71995af7c0025f109df482f86f1e10379526d026"
dependencies:
ansi-html "0.0.6"
html-entities "^1.2.0"
querystring "^0.2.0"
strip-ansi "^3.0.0"
-webpack-merge@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-2.0.0.tgz#fd328707d26f6f9852be2767557cef51d942c1dc"
+webpack-merge@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-2.2.0.tgz#8e26ee10d440be647f533ad3a93e1670fe5c5506"
dependencies:
lodash.clonedeep "^4.5.0"
lodash.differencewith "^4.5.0"