2 Commits
Author SHA1 Message Date
sugoidogo c2c952e96a fix types
/ build (push) Successful in 2m35s
2025-12-16 01:17:06 -08:00
sugoidogo bed578e80d add origin parameter to webstorage
/ build (push) Successful in 2m33s
2025-12-16 00:51:47 -08:00
2 changed files with 22 additions and 6 deletions
+20 -5
View File
@@ -1,5 +1,20 @@
import * as TwitchAuth from "./TwitchAuth.ts"; import * as TwitchAuth from "./TwitchAuth.ts";
import { AccessTokenMaybeWithUserId, AuthProvider, AccessToken, AccessTokenWithUserId } from "@twurple/auth"; import { AccessTokenMaybeWithUserId, AuthProvider, AccessTokenWithUserId } from "@twurple/auth";
/**
* A type that represents a user and contains a user ID.
*/
interface UserIdResolvableType {
/**
* The ID of the user.
*/
id: string;
}
/**
* A user ID or a user or channel object.
*/
type UserIdResolvable = string | number | UserIdResolvableType;
type Token = TwitchAuth.TwitchToken & AccessTokenMaybeWithUserId type Token = TwitchAuth.TwitchToken & AccessTokenMaybeWithUserId
@@ -59,7 +74,7 @@ export default class SugoiAuthProvider implements AuthProvider {
this.#token = null this.#token = null
} }
async getAccessTokenForUser(user: string | number, ...scopeSets: string[][]) { async getAccessTokenForUser(user: UserIdResolvable, ...scopeSets: string[][]) {
if ((!scopeSets[0]) && (this.#token)) { if ((!scopeSets[0]) && (this.#token)) {
return this.#token as AccessTokenWithUserId return this.#token as AccessTokenWithUserId
} }
@@ -72,18 +87,18 @@ export default class SugoiAuthProvider implements AuthProvider {
return this.#token as AccessTokenWithUserId return this.#token as AccessTokenWithUserId
} }
async getAnyAccessToken(user: string | number) { async getAnyAccessToken(user: UserIdResolvable) {
return this.#token || TwitchAuth.getAppToken(this.clientId).then(getTwurpleProxy) return this.#token || TwitchAuth.getAppToken(this.clientId).then(getTwurpleProxy)
} }
getCurrentScopesForUser(user: string | number) { getCurrentScopesForUser(user: UserIdResolvable) {
if (!this.#token || this.#token instanceof Promise) { if (!this.#token || this.#token instanceof Promise) {
return [] return []
} }
return this.#token.scope return this.#token.scope
} }
async refreshAccessTokenForUser(user: string | number) { async refreshAccessTokenForUser(user: UserIdResolvable) {
this.#token = await TwitchAuth.refreshToken(this.clientId, this.#token.refresh_token).then(this.#setToken) this.#token = await TwitchAuth.refreshToken(this.clientId, this.#token.refresh_token).then(this.#setToken)
return this.#token as AccessTokenWithUserId return this.#token as AccessTokenWithUserId
} }
+2 -1
View File
@@ -20,12 +20,13 @@ export default class WebStorage {
* @param {import('@twurple/auth').AuthProvider} auth_provider used to add the authentication header to requests for web storage * @param {import('@twurple/auth').AuthProvider} auth_provider used to add the authentication header to requests for web storage
* @param {fetch} fetch defaults to `globalThis.fetch`, allows you to further customize fetch behavior via chaining, for example with `fetch-retry` * @param {fetch} fetch defaults to `globalThis.fetch`, allows you to further customize fetch behavior via chaining, for example with `fetch-retry`
*/ */
constructor(auth_provider: import('@twurple/auth').AuthProvider, fetch: typeof globalThis.fetch = (resource,options)=>{return globalThis.fetch(resource,options)}) { constructor(auth_provider: import('@twurple/auth').AuthProvider, fetch: typeof globalThis.fetch = globalThis.fetch, origin?: string) {
this.#fetch = fetch this.#fetch = fetch
this.#auth_provider = auth_provider this.#auth_provider = auth_provider
auth_provider.getAccessTokenForUser(undefined) auth_provider.getAccessTokenForUser(undefined)
.then(token => caches.open(token.userId + '/' + auth_provider.clientId)) .then(token => caches.open(token.userId + '/' + auth_provider.clientId))
.then(cache => this.#cache = cache) .then(cache => this.#cache = cache)
if (origin) this.#origin = origin
} }
/** /**