async signIn() {
    const result = await signInWithPopup(this._auth, this._provider);
    const credential = GithubAuthProvider.credentialFromResult(result);
    if (!credential || !credential.accessToken) throw new Error('unexpected credential');

    const accessToken = credential.accessToken;
    this._accessToken = accessToken;
    // A limitation of firebase auth is that it doesn't return an oauth token
    // after a page refresh: `onAuthStateChanged` returns a firebase user, which has no knowledge
    // of GitHub's oauth token. Since GitHub's tokens never expire, stash the access token in IDB.
    await idbKeyval.set('accessToken', accessToken);
    return accessToken;
  }
Signs in the user to GitHub using the Firebase API.
@return {Promise<string>} accessToken