diff --git a/src/connections/BattleNet/index.ts b/src/connections/BattleNet/index.ts index e9e03c8ba..7c5435e93 100644 --- a/src/connections/BattleNet/index.ts +++ b/src/connections/BattleNet/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { BattleNetSettings } from "./BattleNetSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface BattleNetConnectionUser { sub: string; @@ -47,16 +41,9 @@ export default class BattleNetConnection extends Connection { settings: BattleNetSettings = new BattleNetSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -75,10 +62,7 @@ export default class BattleNetConnection extends Connection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -118,9 +102,7 @@ export default class BattleNetConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Discord/index.ts b/src/connections/Discord/index.ts index e1c981764..6f87cd2ab 100644 --- a/src/connections/Discord/index.ts +++ b/src/connections/Discord/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { DiscordSettings } from "./DiscordSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface UserResponse { id: string; @@ -43,16 +37,9 @@ export default class DiscordConnection extends Connection { settings: DiscordSettings = new DiscordSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -74,10 +61,7 @@ export default class DiscordConnection extends Connection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -117,9 +101,7 @@ export default class DiscordConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/EpicGames/index.ts b/src/connections/EpicGames/index.ts index 3755f0dc9..fdc2aa79f 100644 --- a/src/connections/EpicGames/index.ts +++ b/src/connections/EpicGames/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { EpicGamesSettings } from "./EpicGamesSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; export interface UserResponse { accountId: string; @@ -33,8 +27,7 @@ export interface UserResponse { preferredLanguage: string; } -export interface EpicTokenResponse - extends ConnectedAccountCommonOAuthTokenResponse { +export interface EpicTokenResponse extends ConnectedAccountCommonOAuthTokenResponse { expires_at: string; refresh_expires_in: number; refresh_expires_at: string; @@ -47,22 +40,14 @@ export default class EpicGamesConnection extends Connection { public readonly id = "epicgames"; public readonly authorizeUrl = "https://www.epicgames.com/id/authorize"; public readonly tokenUrl = "https://api.epicgames.dev/epic/oauth/v1/token"; - public readonly userInfoUrl = - "https://api.epicgames.dev/epic/id/v1/accounts"; + public readonly userInfoUrl = "https://api.epicgames.dev/epic/id/v1/accounts"; public readonly scopes = ["basic profile"]; settings: EpicGamesSettings = new EpicGamesSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -81,10 +66,7 @@ export default class EpicGamesConnection extends Connection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -92,9 +74,7 @@ export default class EpicGamesConnection extends Connection { return wretch(url.toString()) .headers({ Accept: "application/json", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId}:${this.settings.clientSecret}`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId}:${this.settings.clientSecret}`).toString("base64")}`, "Content-Type": "application/x-www-form-urlencoded", }) .body( @@ -112,9 +92,7 @@ export default class EpicGamesConnection extends Connection { } async getUser(token: string): Promise { - const { sub } = JSON.parse( - Buffer.from(token.split(".")[1], "base64").toString("utf8"), - ); + const { sub } = JSON.parse(Buffer.from(token.split(".")[1], "base64").toString("utf8")); const url = new URL(this.userInfoUrl); url.searchParams.append("accountId", sub); @@ -130,9 +108,7 @@ export default class EpicGamesConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Facebook/index.ts b/src/connections/Facebook/index.ts index 804b02ab2..50552d838 100644 --- a/src/connections/Facebook/index.ts +++ b/src/connections/Facebook/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { FacebookSettings } from "./FacebookSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; export interface FacebookErrorResponse { error: { @@ -43,25 +37,16 @@ interface UserResponse { export default class FacebookConnection extends Connection { public readonly id = "facebook"; - public readonly authorizeUrl = - "https://www.facebook.com/v14.0/dialog/oauth"; - public readonly tokenUrl = - "https://graph.facebook.com/v14.0/oauth/access_token"; + public readonly authorizeUrl = "https://www.facebook.com/v14.0/dialog/oauth"; + public readonly tokenUrl = "https://graph.facebook.com/v14.0/oauth/access_token"; public readonly userInfoUrl = "https://graph.facebook.com/v14.0/me"; public readonly scopes = ["public_profile"]; settings: FacebookSettings = new FacebookSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -80,19 +65,13 @@ export default class FacebookConnection extends Connection { getTokenUrl(code: string): string { const url = new URL(this.tokenUrl); url.searchParams.append("client_id", this.settings.clientId as string); - url.searchParams.append( - "client_secret", - this.settings.clientSecret as string, - ); + url.searchParams.append("client_secret", this.settings.clientSecret as string); url.searchParams.append("code", code); url.searchParams.append("redirect_uri", this.getRedirectUri()); return url.toString(); } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(code); @@ -124,9 +103,7 @@ export default class FacebookConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/GitHub/index.ts b/src/connections/GitHub/index.ts index bfda7d43d..d29bdc327 100644 --- a/src/connections/GitHub/index.ts +++ b/src/connections/GitHub/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { GitHubSettings } from "./GitHubSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface UserResponse { login: string; @@ -42,16 +36,9 @@ export default class GitHubConnection extends Connection { settings: GitHubSettings = new GitHubSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -68,18 +55,12 @@ export default class GitHubConnection extends Connection { getTokenUrl(code: string): string { const url = new URL(this.tokenUrl); url.searchParams.append("client_id", this.settings.clientId as string); - url.searchParams.append( - "client_secret", - this.settings.clientSecret as string, - ); + url.searchParams.append("client_secret", this.settings.clientSecret as string); url.searchParams.append("code", code); return url.toString(); } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(code); @@ -111,9 +92,7 @@ export default class GitHubConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Reddit/index.ts b/src/connections/Reddit/index.ts index 192fa70ad..5f8dfbbb5 100644 --- a/src/connections/Reddit/index.ts +++ b/src/connections/Reddit/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { RedditSettings } from "./RedditSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; export interface UserResponse { verified: boolean; @@ -54,16 +48,9 @@ export default class RedditConnection extends Connection { settings: RedditSettings = new RedditSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -82,10 +69,7 @@ export default class RedditConnection extends Connection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -93,9 +77,7 @@ export default class RedditConnection extends Connection { return wretch(url.toString()) .headers({ Accept: "application/json", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId}:${this.settings.clientSecret}`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId}:${this.settings.clientSecret}`).toString("base64")}`, "Content-Type": "application/x-www-form-urlencoded", }) .body( @@ -127,9 +109,7 @@ export default class RedditConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Spotify/index.ts b/src/connections/Spotify/index.ts index 2ba864089..42722fdb3 100644 --- a/src/connections/Spotify/index.ts +++ b/src/connections/Spotify/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - ConnectionLoader, - DiscordApiErrors, - RefreshableConnection, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, ConnectionLoader, DiscordApiErrors, RefreshableConnection } from "@spacebar/util"; import wretch from "wretch"; import { SpotifySettings } from "./SpotifySettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; export interface UserResponse { display_name: string; @@ -49,12 +43,7 @@ export default class SpotifyConnection extends RefreshableConnection { public readonly authorizeUrl = "https://accounts.spotify.com/authorize"; public readonly tokenUrl = "https://accounts.spotify.com/api/token"; public readonly userInfoUrl = "https://api.spotify.com/v1/me"; - public readonly scopes = [ - "user-read-private", - "user-read-playback-state", - "user-modify-playback-state", - "user-read-currently-playing", - ]; + public readonly scopes = ["user-read-private", "user-read-playback-state", "user-modify-playback-state", "user-read-currently-playing"]; settings: SpotifySettings = new SpotifySettings(); init(): void { @@ -64,16 +53,9 @@ export default class SpotifyConnection extends RefreshableConnection { */ this.refreshEnabled = false; - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -92,10 +74,7 @@ export default class SpotifyConnection extends RefreshableConnection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -104,11 +83,7 @@ export default class SpotifyConnection extends RefreshableConnection { .headers({ Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId as string}:${ - this.settings.clientSecret as string - }`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId as string}:${this.settings.clientSecret as string}`).toString("base64")}`, }) .body( new URLSearchParams({ @@ -125,11 +100,8 @@ export default class SpotifyConnection extends RefreshableConnection { }); } - async refreshToken( - connectedAccount: ConnectedAccount, - ): Promise { - if (!connectedAccount.token_data?.refresh_token) - throw new Error("No refresh token available."); + async refreshToken(connectedAccount: ConnectedAccount): Promise { + if (!connectedAccount.token_data?.refresh_token) throw new Error("No refresh token available."); const refresh_token = connectedAccount.token_data.refresh_token; const url = this.getTokenUrl(); @@ -137,11 +109,7 @@ export default class SpotifyConnection extends RefreshableConnection { .headers({ Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId as string}:${ - this.settings.clientSecret as string - }`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId as string}:${this.settings.clientSecret as string}`).toString("base64")}`, }) .body( new URLSearchParams({ @@ -177,9 +145,7 @@ export default class SpotifyConnection extends RefreshableConnection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Twitch/index.ts b/src/connections/Twitch/index.ts index 5e9f2a8be..a33cc8d45 100644 --- a/src/connections/Twitch/index.ts +++ b/src/connections/Twitch/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - ConnectionLoader, - DiscordApiErrors, - RefreshableConnection, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, ConnectionLoader, DiscordApiErrors, RefreshableConnection } from "@spacebar/util"; import wretch from "wretch"; import { TwitchSettings } from "./TwitchSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface TwitchConnectionUserResponse { data: { @@ -47,24 +41,13 @@ export default class TwitchConnection extends RefreshableConnection { public readonly authorizeUrl = "https://id.twitch.tv/oauth2/authorize"; public readonly tokenUrl = "https://id.twitch.tv/oauth2/token"; public readonly userInfoUrl = "https://api.twitch.tv/helix/users"; - public readonly scopes = [ - "channel_subscriptions", - "channel_check_subscription", - "channel:read:subscriptions", - ]; + public readonly scopes = ["channel_subscriptions", "channel_check_subscription", "channel:read:subscriptions"]; settings: TwitchSettings = new TwitchSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -83,10 +66,7 @@ export default class TwitchConnection extends RefreshableConnection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -113,11 +93,8 @@ export default class TwitchConnection extends RefreshableConnection { }); } - async refreshToken( - connectedAccount: ConnectedAccount, - ): Promise { - if (!connectedAccount.token_data?.refresh_token) - throw new Error("No refresh token available."); + async refreshToken(connectedAccount: ConnectedAccount): Promise { + if (!connectedAccount.token_data?.refresh_token) throw new Error("No refresh token available."); const refresh_token = connectedAccount.token_data.refresh_token; const url = this.getTokenUrl(); @@ -164,9 +141,7 @@ export default class TwitchConnection extends RefreshableConnection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Twitter/index.ts b/src/connections/Twitter/index.ts index fadc97e55..9bcda51bf 100644 --- a/src/connections/Twitter/index.ts +++ b/src/connections/Twitter/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - ConnectionLoader, - DiscordApiErrors, - RefreshableConnection, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, ConnectionLoader, DiscordApiErrors, RefreshableConnection } from "@spacebar/util"; import wretch from "wretch"; import { TwitterSettings } from "./TwitterSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface TwitterUserResponse { data: { @@ -49,22 +43,14 @@ export default class TwitterConnection extends RefreshableConnection { public readonly id = "twitter"; public readonly authorizeUrl = "https://twitter.com/i/oauth2/authorize"; public readonly tokenUrl = "https://api.twitter.com/2/oauth2/token"; - public readonly userInfoUrl = - "https://api.twitter.com/2/users/me?user.fields=created_at%2Cdescription%2Cid%2Cname%2Cusername%2Cverified%2Clocation%2Curl"; + public readonly userInfoUrl = "https://api.twitter.com/2/users/me?user.fields=created_at%2Cdescription%2Cid%2Cname%2Cusername%2Cverified%2Clocation%2Curl"; public readonly scopes = ["users.read", "tweet.read"]; settings: TwitterSettings = new TwitterSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -85,10 +71,7 @@ export default class TwitterConnection extends RefreshableConnection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -97,11 +80,7 @@ export default class TwitterConnection extends RefreshableConnection { .headers({ Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId as string}:${ - this.settings.clientSecret as string - }`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId as string}:${this.settings.clientSecret as string}`).toString("base64")}`, }) .body( new URLSearchParams({ @@ -120,11 +99,8 @@ export default class TwitterConnection extends RefreshableConnection { }); } - async refreshToken( - connectedAccount: ConnectedAccount, - ): Promise { - if (!connectedAccount.token_data?.refresh_token) - throw new Error("No refresh token available."); + async refreshToken(connectedAccount: ConnectedAccount): Promise { + if (!connectedAccount.token_data?.refresh_token) throw new Error("No refresh token available."); const refresh_token = connectedAccount.token_data.refresh_token; const url = this.getTokenUrl(); @@ -133,11 +109,7 @@ export default class TwitterConnection extends RefreshableConnection { .headers({ Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId as string}:${ - this.settings.clientSecret as string - }`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId as string}:${this.settings.clientSecret as string}`).toString("base64")}`, }) .body( new URLSearchParams({ @@ -170,9 +142,7 @@ export default class TwitterConnection extends RefreshableConnection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); diff --git a/src/connections/Xbox/index.ts b/src/connections/Xbox/index.ts index 5fc18716a..37423f9ae 100644 --- a/src/connections/Xbox/index.ts +++ b/src/connections/Xbox/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { XboxSettings } from "./XboxSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface XboxUserResponse { IssueInstant: string; @@ -51,27 +45,17 @@ interface XboxUserResponse { export default class XboxConnection extends Connection { public readonly id = "xbox"; - public readonly authorizeUrl = - "https://login.live.com/oauth20_authorize.srf"; + public readonly authorizeUrl = "https://login.live.com/oauth20_authorize.srf"; public readonly tokenUrl = "https://login.live.com/oauth20_token.srf"; - public readonly userInfoUrl = - "https://xsts.auth.xboxlive.com/xsts/authorize"; - public readonly userAuthUrl = - "https://user.auth.xboxlive.com/user/authenticate"; + public readonly userInfoUrl = "https://xsts.auth.xboxlive.com/xsts/authorize"; + public readonly userAuthUrl = "https://user.auth.xboxlive.com/user/authenticate"; public readonly scopes = ["Xboxlive.signin", "Xboxlive.offline_access"]; settings: XboxSettings = new XboxSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -117,10 +101,7 @@ export default class XboxConnection extends Connection { }); } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -129,11 +110,7 @@ export default class XboxConnection extends Connection { .headers({ Accept: "application/json", "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Basic ${Buffer.from( - `${this.settings.clientId as string}:${ - this.settings.clientSecret as string - }`, - ).toString("base64")}`, + Authorization: `Basic ${Buffer.from(`${this.settings.clientId as string}:${this.settings.clientSecret as string}`).toString("base64")}`, }) .body( new URLSearchParams({ @@ -179,9 +156,7 @@ export default class XboxConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided"); @@ -190,10 +165,7 @@ export default class XboxConnection extends Connection { const userToken = await this.getUserToken(tokenData.access_token); const userInfo = await this.getUser(userToken); - const exists = await this.hasConnection( - userId, - userInfo.DisplayClaims.xui[0].xid, - ); + const exists = await this.hasConnection(userId, userInfo.DisplayClaims.xui[0].xid); if (exists) return null; diff --git a/src/connections/Youtube/index.ts b/src/connections/Youtube/index.ts index 4a84baf68..7c5dafe1b 100644 --- a/src/connections/Youtube/index.ts +++ b/src/connections/Youtube/index.ts @@ -16,16 +16,10 @@ along with this program. If not, see . */ -import { - ConnectedAccount, - ConnectedAccountCommonOAuthTokenResponse, - Connection, - ConnectionLoader, - DiscordApiErrors, -} from "@spacebar/util"; +import { ConnectedAccount, ConnectedAccountCommonOAuthTokenResponse, Connection, ConnectionLoader, DiscordApiErrors } from "@spacebar/util"; import wretch from "wretch"; import { YoutubeSettings } from "./YoutubeSettings"; -import { ConnectionCallbackSchema } from "@spacebar/schemas" +import { ConnectionCallbackSchema } from "@spacebar/schemas"; interface YouTubeConnectionChannelListResult { items: { @@ -51,27 +45,16 @@ interface YouTubeConnectionChannelListResult { export default class YoutubeConnection extends Connection { public readonly id = "youtube"; - public readonly authorizeUrl = - "https://accounts.google.com/o/oauth2/v2/auth"; + public readonly authorizeUrl = "https://accounts.google.com/o/oauth2/v2/auth"; public readonly tokenUrl = "https://oauth2.googleapis.com/token"; - public readonly userInfoUrl = - "https://www.googleapis.com/youtube/v3/channels?mine=true&part=snippet"; - public readonly scopes = [ - "https://www.googleapis.com/auth/youtube.readonly", - ]; + public readonly userInfoUrl = "https://www.googleapis.com/youtube/v3/channels?mine=true&part=snippet"; + public readonly scopes = ["https://www.googleapis.com/auth/youtube.readonly"]; settings: YoutubeSettings = new YoutubeSettings(); init(): void { - this.settings = ConnectionLoader.getConnectionConfig( - this.id, - this.settings, - ); + this.settings = ConnectionLoader.getConnectionConfig(this.id, this.settings); - if ( - this.settings.enabled && - (!this.settings.clientId || !this.settings.clientSecret) - ) - throw new Error(`Invalid settings for connection ${this.id}`); + if (this.settings.enabled && (!this.settings.clientId || !this.settings.clientSecret)) throw new Error(`Invalid settings for connection ${this.id}`); } getAuthorizationUrl(userId: string): string { @@ -90,10 +73,7 @@ export default class YoutubeConnection extends Connection { return this.tokenUrl; } - async exchangeCode( - state: string, - code: string, - ): Promise { + async exchangeCode(state: string, code: string): Promise { this.validateState(state); const url = this.getTokenUrl(); @@ -134,9 +114,7 @@ export default class YoutubeConnection extends Connection { }); } - async handleCallback( - params: ConnectionCallbackSchema, - ): Promise { + async handleCallback(params: ConnectionCallbackSchema): Promise { const { state, code } = params; if (!code) throw new Error("No code provided");