@twurple/api
Version:
Interact with Twitch's API.
123 lines (122 loc) • 5.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HelixSubscriptionApi = void 0;
const tslib_1 = require("tslib");
const api_call_1 = require("@twurple/api-call");
const common_1 = require("@twurple/common");
const generic_external_1 = require("../../interfaces/endpoints/generic.external");
const subscription_external_1 = require("../../interfaces/endpoints/subscription.external");
const HelixPaginatedResult_1 = require("../../utils/pagination/HelixPaginatedResult");
const HelixPagination_1 = require("../../utils/pagination/HelixPagination");
const BaseApi_1 = require("../BaseApi");
const HelixPaginatedSubscriptionsRequest_1 = require("./HelixPaginatedSubscriptionsRequest");
const HelixSubscription_1 = require("./HelixSubscription");
const HelixUserSubscription_1 = require("./HelixUserSubscription");
/**
* 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_1.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: (0, common_1.extractUserId)(broadcaster),
query: {
...(0, api_call_1.createBroadcasterQuery)(broadcaster),
...(0, HelixPagination_1.createPaginationQuery)(pagination),
},
});
return {
...(0, HelixPaginatedResult_1.createPaginatedResultWithTotal)(result, HelixSubscription_1.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_1.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: (0, common_1.extractUserId)(broadcaster),
scopes: ['channel:read:subscriptions'],
query: (0, generic_external_1.createChannelUsersCheckQuery)(broadcaster, users),
});
return result.data.map(data => new HelixSubscription_1.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: (0, common_1.extractUserId)(user),
scopes: ['user:read:subscriptions'],
query: (0, subscription_external_1.createSubscriptionCheckQuery)(broadcaster, user),
});
return new HelixUserSubscription_1.HelixUserSubscription(result.data[0], this._client);
}
catch (e) {
if (e instanceof api_call_1.HttpStatusCodeError && e.statusCode === 404) {
return null;
}
throw e;
}
}
};
exports.HelixSubscriptionApi = HelixSubscriptionApi;
exports.HelixSubscriptionApi = HelixSubscriptionApi = tslib_1.__decorate([
(0, common_1.rtfm)('api', 'HelixSubscriptionApi')
], HelixSubscriptionApi);