diff --git a/static_src/SugoiAuthProvider2.ts b/static_src/SugoiAuthProvider2.ts index e78625e..10846e3 100644 --- a/static_src/SugoiAuthProvider2.ts +++ b/static_src/SugoiAuthProvider2.ts @@ -2,12 +2,17 @@ import type { AccessTokenMaybeWithUserId, AccessTokenWithUserId, AuthProvider } import type { UserIdResolvable } from "@twurple/api" import * as TwitchAuth from "./TwitchAuth"; -async function getTwurpleProxy(token: TwitchAuth.TwitchToken): Promise { +async function ensureUserId(token: TwitchAuth.TwitchToken): Promise { if (!token.user_id) { - const refresh_token=token.refresh_token + const refresh_token = token.refresh_token token = await TwitchAuth.validateToken(token.access_token) - token.refresh_token=refresh_token + token.refresh_token = refresh_token } + return token +} + +async function getTwurpleProxy(token: TwitchAuth.TwitchToken): Promise { + token=await ensureUserId(token) return new Proxy(token, { get(target, name, receiver) { return target[name.toString().replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`) as keyof TwitchAuth.TwitchToken] @@ -21,7 +26,8 @@ export class SugoiAuthProvider implements AuthProvider { constructor(clientId:string,proxyOrigin?:string) { this.clientId = clientId; if (proxyOrigin) TwitchAuth.setProxyOrigin(proxyOrigin); - this.#token=TwitchAuth.getUserTokenPassive(clientId).catch() + this.#token = TwitchAuth.getUserTokenPassive(clientId) + if(!this.#token) this.#token=ensureUserId(this.#token) } #authorize(scopes: string[]) { const promise = TwitchAuth.requestAuthCode(this.clientId, ...scopes) @@ -61,8 +67,8 @@ export class SugoiAuthProvider implements AuthProvider { const token=await this.#token if (!token) throw new Error("unauthorized") if (!token.refresh_token) throw new Error("missing refresh token") - this.#token = await TwitchAuth.refreshToken(this.clientId, token.refresh_token) - return getTwurpleProxy(this.#token) + this.#token = await TwitchAuth.refreshToken(this.clientId, token.refresh_token).then(ensureUserId) + return getTwurpleProxy(this.#token!) } }