UNPKG

@twurple/api

Version:

Interact with Twitch's API.

120 lines (119 loc) 4.82 kB
import { __decorate } from "tslib"; import { createBroadcasterQuery, HttpStatusCodeError } from '@twurple/api-call'; import { extractUserId, rtfm } from '@twurple/common'; import { createChannelUsersCheckQuery } from "../../interfaces/endpoints/generic.external.mjs"; import { createSubscriptionCheckQuery, } from "../../interfaces/endpoints/subscription.external.mjs"; import { createPaginatedResultWithTotal } from "../../utils/pagination/HelixPaginatedResult.mjs"; import { createPaginationQuery } from "../../utils/pagination/HelixPagination.mjs"; import { BaseApi } from "../BaseApi.mjs"; import { HelixPaginatedSubscriptionsRequest } from "./HelixPaginatedSubscriptionsRequest.mjs"; import { HelixSubscription } from "./HelixSubscription.mjs"; import { HelixUserSubscription } from "./HelixUserSubscription.mjs"; /** * The Helix API methods that deal with subscriptions. * * Can be accessed using `client.subscriptions` on an {@link ApiClient} instance. * * ## Example * ```ts * const api = new ApiClient({ authProvider }); * const subscription = await api.subscriptions.getSubscriptionForUser('61369223', '125328655'); * ``` * * @meta category helix * @meta categorizedTitle Subscriptions */ let HelixSubscriptionApi = class HelixSubscriptionApi extends BaseApi { /** * Gets a list of all subscriptions to a given broadcaster. * * @param broadcaster The broadcaster to list subscriptions to. * @param pagination * * @expandParams */ async getSubscriptions(broadcaster, pagination) { const result = await this._client.callApi({ url: 'subscriptions', scopes: ['channel:read:subscriptions'], type: 'helix', userId: extractUserId(broadcaster), query: { ...createBroadcasterQuery(broadcaster), ...createPaginationQuery(pagination), }, }); return { ...createPaginatedResultWithTotal(result, HelixSubscription, this._client), points: result.points, }; } /** * Creates a paginator for all subscriptions to a given broadcaster. * * @param broadcaster The broadcaster to list subscriptions to. */ getSubscriptionsPaginated(broadcaster) { return new HelixPaginatedSubscriptionsRequest(broadcaster, this._client); } /** * Gets the subset of the given user list that is subscribed to the given broadcaster. * * @param broadcaster The broadcaster to find subscriptions to. * @param users The users that should be checked for subscriptions. */ async getSubscriptionsForUsers(broadcaster, users) { const result = await this._client.callApi({ type: 'helix', url: 'subscriptions', userId: extractUserId(broadcaster), scopes: ['channel:read:subscriptions'], query: createChannelUsersCheckQuery(broadcaster, users), }); return result.data.map(data => new HelixSubscription(data, this._client)); } /** * Gets the subscription data for a given user to a given broadcaster. * * This checks with the authorization of a broadcaster. * If you only have the authorization of a user, check {@link HelixSubscriptionApi#checkUserSubscription}}. * * @param broadcaster The broadcaster to check. * @param user The user to check. */ async getSubscriptionForUser(broadcaster, user) { const list = await this.getSubscriptionsForUsers(broadcaster, [user]); return list.length ? list[0] : null; } /** * Checks if a given user is subscribed to a given broadcaster. Returns null if not subscribed. * * This checks with the authorization of a user. * If you only have the authorization of a broadcaster, check {@link HelixSubscriptionApi#getSubscriptionForUser}}. * * @param user The user to check. * @param broadcaster The broadcaster to check the user's subscription for. */ async checkUserSubscription(user, broadcaster) { try { const result = await this._client.callApi({ type: 'helix', url: 'subscriptions/user', userId: extractUserId(user), scopes: ['user:read:subscriptions'], query: createSubscriptionCheckQuery(broadcaster, user), }); return new HelixUserSubscription(result.data[0], this._client); } catch (e) { if (e instanceof HttpStatusCodeError && e.statusCode === 404) { return null; } throw e; } } }; HelixSubscriptionApi = __decorate([ rtfm('api', 'HelixSubscriptionApi') ], HelixSubscriptionApi); export { HelixSubscriptionApi };