UNPKG

node-pokemon

Version:
85 lines (72 loc) 2.45 kB
import Provider from './Provider'; import PokemonGo from '../PokemonGo'; import request = require('request'); export default class PokemonClubProvider extends Provider { public static loginUrl: string = "https://sso.pokemon.com/sso/login?service=https%3A%2F%2Fsso.pokemon.com%2Fsso%2Foauth2.0%2FcallbackAuthorize"; public static loginOauth: string = "https://sso.pokemon.com/sso/oauth2.0/accessToken"; public login(username: string, password: string, self: PokemonGo, callback: (err, token: string) => void): void { let options = { url: PokemonClubProvider.loginUrl, headers: { 'User-Agent': 'niantic' } }; request.get(options, function(err, response, body) { if(err) return callback(err, null); if(body.trim().indexOf('<') === 0) return callback(new Error('Invalide response from PTC server'), null); let data; try { data = JSON.parse(body); } catch(err) { return callback(err, null); } let options = { url: PokemonClubProvider.loginUrl, form: { 'lt': data.lt, 'execution': data.execution, '_eventId': 'submit', 'username': username, 'password': password }, headers: { 'User-Agent': 'niantic' } }; request.post(options, function(err, response, body) { if(err) return callback(err, null); if(body) { let parsedBody = JSON.parse(body); if(parsedBody.errors && parsedBody.errors.length !== 0) return callback(new Error('Error logging in: ' + parsedBody.errors[0]), null); } let ticket = response.headers['location'].split('ticket=')[1]; let options = { url: PokemonClubProvider.loginOauth, form: { 'client_id': 'mobile-app_pokemon-go', 'redirect_uri': 'https://www.nianticlabs.com/pokemongo/error', 'client_secret': 'w8ScCUXJQc6kXKw8FiOhd8Fixzht18Dq3PEVkUCP5ZPxtgyWsbTvWHFLm2wNY0JR', 'grant_type': 'refresh_token', 'code': ticket } }; request.post(options, function(err, response, body) { if(err) return callback(err, null); let token = body.split('token=')[1]; if(!token) return callback(new Error('Login failed #1'), null); token = token.split('&')[0]; if(!token) return callback(new Error('Login failed #2'), null); self.setToken(token); callback(null, token); }); }); }); } }