async signin() {
		if ( this.server ) {
			throw new Error( "An OAuth response server is already running" );
		}
		const state = randomBytes( 16 ).toString( "hex" );

		return new Promise( ( resolve, reject ) => {
			const server = new HttpServer( serverport, 1000 );
			set( this, "server", server );

			server.onRequest( "GET", "/redirect", ( req, res ) => {
				res.end( OAuthResponseRedirect );
				return true;
			});

			server.onRequest( "GET", "/token", async ( req, res ) => {
				// validate token and scope and keep the request open
				await this._validateOAuthResponse( req.url.query, state )
					.then( () => {
						res.end( "OK" );
						process.nextTick( resolve );
					}, err => {
						res.statusCode = 500;
						res.end( String( err ) );
						process.nextTick( () => reject( err ) );
					});

				return true;
			});

			// open auth url in web browser
			try {
				const url = this.buildOAuthUrl( state );
				this.nwjs.openBrowser( url );
			} catch ( err ) {
				reject( err );
			}
		})
			// shut down server and focus the application window when done
			.finally( () => {
				this.abortSignin();
				this.nwjs.focus( true );
			});
	}
Open OAuth url in browser
@returns {Promise}