twitter-api-v2
Version:
Strongly typed, full-featured, light, versatile yet powerful Twitter API v1.1 and v2 client for Node.js.
166 lines (165 loc) • 6.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TweetV2UserLikedTweetsPaginator = exports.TweetUserMentionTimelineV2Paginator = exports.TweetUserTimelineV2Paginator = exports.TweetSearchAllV2Paginator = exports.TweetSearchRecentV2Paginator = void 0;
const TwitterPaginator_1 = require("./TwitterPaginator");
/** A generic PreviousableTwitterPaginator able to consume TweetV2[]. */
class TweetsV2Paginator extends TwitterPaginator_1.PreviousableTwitterPaginator {
updateIncludes(data) {
if (!data.includes) {
return;
}
if (!this._realData.includes) {
this._realData.includes = {};
}
const includesRealData = this._realData.includes;
for (const [includeKey, includeArray] of Object.entries(data.includes)) {
if (!includesRealData[includeKey]) {
includesRealData[includeKey] = [];
}
includesRealData[includeKey] = [
...includesRealData[includeKey],
...includeArray,
];
}
}
getPageLengthFromRequest(result) {
var _a, _b;
return (_b = (_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
}
isFetchLastOver(result) {
var _a;
return !((_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) || !this.canFetchNextPage(result.data);
}
canFetchNextPage(result) {
return !!result.meta.next_token;
}
getItemArray() {
return this.tweets;
}
/**
* Tweets returned by paginator.
*/
get tweets() {
var _a;
return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];
}
get meta() {
return this._realData.meta;
}
get includes() {
var _a;
return (_a = this._realData.includes) !== null && _a !== void 0 ? _a : {};
}
}
/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines. */
class TweetTimelineV2Paginator extends TweetsV2Paginator {
refreshInstanceFromResult(response, isNextPage) {
var _a;
const result = response.data;
const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];
this._rateLimit = response.rateLimit;
if (!this._realData.data) {
this._realData.data = [];
}
if (isNextPage) {
this._realData.meta.oldest_id = result.meta.oldest_id;
this._realData.meta.result_count += result.meta.result_count;
this._realData.meta.next_token = result.meta.next_token;
this._realData.data.push(...resultData);
}
else {
this._realData.meta.newest_id = result.meta.newest_id;
this._realData.meta.result_count += result.meta.result_count;
this._realData.data.unshift(...resultData);
}
this.updateIncludes(result);
}
getNextQueryParams(maxResults) {
return {
...this.injectQueryParams(maxResults),
until_id: this._realData.meta.oldest_id,
};
}
getPreviousQueryParams(maxResults) {
return {
...this.injectQueryParams(maxResults),
since_id: this._realData.meta.newest_id,
};
}
}
// ----------------
// - Tweet search -
// ----------------
class TweetSearchRecentV2Paginator extends TweetTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'tweets/search/recent';
}
}
exports.TweetSearchRecentV2Paginator = TweetSearchRecentV2Paginator;
class TweetSearchAllV2Paginator extends TweetTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'tweets/search/all';
}
}
exports.TweetSearchAllV2Paginator = TweetSearchAllV2Paginator;
class TweetUserTimelineV2Paginator extends TweetTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/tweets';
}
}
exports.TweetUserTimelineV2Paginator = TweetUserTimelineV2Paginator;
class TweetUserMentionTimelineV2Paginator extends TweetTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/mentions';
}
}
exports.TweetUserMentionTimelineV2Paginator = TweetUserMentionTimelineV2Paginator;
// ---------------------------------------------------------------------------------
// - Tweet lists (consume tweets with pagination tokens instead of since/until id) -
// ---------------------------------------------------------------------------------
/** A generic TwitterPaginator able to consume TweetV2 timelines. */
class TweetListV2Paginator extends TweetsV2Paginator {
refreshInstanceFromResult(response, isNextPage) {
var _a;
const result = response.data;
const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];
this._rateLimit = response.rateLimit;
if (!this._realData.data) {
this._realData.data = [];
}
if (isNextPage) {
this._realData.meta.result_count += result.meta.result_count;
this._realData.meta.next_token = result.meta.next_token;
this._realData.data.push(...resultData);
}
else {
this._realData.meta.result_count += result.meta.result_count;
this._realData.meta.previous_token = result.meta.previous_token;
this._realData.data.unshift(...resultData);
}
this.updateIncludes(result);
}
getNextQueryParams(maxResults) {
return {
...this.injectQueryParams(maxResults),
pagination_token: this._realData.meta.next_token,
};
}
getPreviousQueryParams(maxResults) {
return {
...this.injectQueryParams(maxResults),
pagination_token: this._realData.meta.previous_token,
};
}
}
class TweetV2UserLikedTweetsPaginator extends TweetListV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/liked_tweets';
}
}
exports.TweetV2UserLikedTweetsPaginator = TweetV2UserLikedTweetsPaginator;