Merge branch 'main' into feature/spotify-provider

This commit is contained in:
Dan6erbond 2022-01-12 16:49:45 +01:00 committed by GitHub
commit 1563751583
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 3 deletions

50
src/providers/github.ts Normal file
View File

@ -0,0 +1,50 @@
import { OAuth2Provider, OAuth2ProviderConfig } from "./oauth2";
export interface GitHubProfile {
id: number;
login: string;
avatar_url: string;
url: string;
name: string;
// complete with more info
}
export interface GitHubTokens {
access_token: string;
token_type: string;
expires_in: number;
}
type GitHubOAuth2ProviderConfig = OAuth2ProviderConfig<GitHubProfile, GitHubTokens>;
const defaultConfig: Partial<GitHubOAuth2ProviderConfig> = {
id: "github",
scope: "user",
accessTokenUrl: "https://github.com/login/oauth/access_token",
authorizationUrl: "https://github.com/login/oauth/authorize",
profileUrl: "https://api.github.com/user",
headers: {
Accept: "application/json",
},
};
export class GitHubOAuth2Provider extends OAuth2Provider<
GitHubProfile,
GitHubTokens,
GitHubOAuth2ProviderConfig
> {
constructor(config: GitHubOAuth2ProviderConfig) {
super({
...defaultConfig,
...config,
});
}
async getUserProfile(tokens: GitHubTokens): Promise<GitHubProfile> {
const tokenType = "token"; // 🤷‍♂️ token type returned is "bearer" but GitHub uses "token" keyword
const res = await fetch(this.config.profileUrl!, {
headers: { Authorization: `${tokenType} ${tokens.access_token}` },
});
return await res.json();
}
}

View File

@ -1,9 +1,8 @@
export { Provider } from "./base";
export { TwitchOAuth2Provider } from "./twitch";
export type { TwitchProfile, TwitchTokens } from "./twitch";
export { GitHubOAuth2Provider } from "./github";
export type { GitHubProfile, GitHubTokens } from "./github";
export { GoogleOAuth2Provider } from "./google";
export type { GoogleProfile, GoogleTokens } from "./google";
export { TwitterAuthProvider } from "./twitter";
export { FacebookOAuth2Provider } from "./facebook";
export type { FacebookProfile, FacebookTokens } from "./facebook";
export { OAuth2BaseProvider } from "./oauth2.base";
@ -13,3 +12,6 @@ export { RedditOAuth2Provider } from "./reddit";
export type { RedditProfile, RedditTokens } from "./reddit";
export { SpotifyOAuth2Provider } from "./spotify";
export type { SpotifyProfile, SpotifyTokens } from "./spotify";
export { TwitchOAuth2Provider } from "./twitch";
export type { TwitchProfile, TwitchTokens } from "./twitch";
export { TwitterAuthProvider } from "./twitter";