diff --git a/src/backend/helpers/twitch.ts b/src/backend/helpers/twitch.ts index d7c811f..e991d1a 100644 --- a/src/backend/helpers/twitch.ts +++ b/src/backend/helpers/twitch.ts @@ -1,15 +1,17 @@ import { AccessToken, RefreshingAuthProvider } from "@twurple/auth"; +import { + ApiClient, + HelixCreateCustomRewardData, + UserIdResolvable +} from "@twurple/api"; import { getTokenData, saveTokenData } from "./tokenData"; -import { ApiClient } from "@twurple/api"; import { ClientCredentials } from "../../interfaces/ClientCredentials"; const LOG_PREFIX = "[Twitch] "; let refreshAuthProvider: RefreshingAuthProvider; -export { getAuthProvider, getApiClient, getUsernameFromId }; - function getClientCredentials(): ClientCredentials { if (!process.env.TWITCH_CLIENT_ID || !process.env.TWITCH_CLIENT_SECRET) { console.error( @@ -59,7 +61,7 @@ async function getApiClient(): Promise { async function getUsernameFromId(userId: number): Promise { const apiClient = await getApiClient(); - const user = await apiClient.helix.users.getUserById(userId); + const user = await apiClient.users.getUserById(userId); if (!user) { return null; @@ -67,3 +69,59 @@ async function getUsernameFromId(userId: number): Promise { return user.displayName; } + +async function createReward( + channel: UserIdResolvable, + data: HelixCreateCustomRewardData +) { + const apiClient = await getApiClient(); + + await apiClient.channelPoints.createCustomReward(channel, data); +} + +async function completeRewards( + channel: UserIdResolvable, + rewardId: string, + redemptionIds: Array | string +) { + if (!Array.isArray(redemptionIds)) { + redemptionIds = [redemptionIds]; + } + + const apiClient = await getApiClient(); + + await apiClient.channelPoints.updateRedemptionStatusByIds( + channel, + rewardId, + redemptionIds, + "FULFILLED" + ); +} + +async function cancelRewards( + channel: UserIdResolvable, + rewardId: string, + redemptionIds: Array | string +) { + if (!Array.isArray(redemptionIds)) { + redemptionIds = [redemptionIds]; + } + + const apiClient = await getApiClient(); + + await apiClient.channelPoints.updateRedemptionStatusByIds( + channel, + rewardId, + redemptionIds, + "CANCELED" + ); +} + +export { + getAuthProvider, + getApiClient, + getUsernameFromId, + completeRewards, + cancelRewards, + createReward +};