twitter-api-v2-patch
Version:
Strongly typed, full-featured, light, versatile yet powerful Twitter API v1.1 and v2 client for Node.js.
206 lines (205 loc) • 7.79 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TweetV2ListTweetsPaginator = exports.TweetV2UserLikedTweetsPaginator = exports.TweetBookmarksTimelineV2Paginator = exports.TweetUserMentionTimelineV2Paginator = exports.TweetUserTimelineV2Paginator = exports.TweetHomeTimelineV2Paginator = exports.QuotedTweetsTimelineV2Paginator = exports.TweetSearchAllV2Paginator = exports.TweetSearchRecentV2Paginator = void 0;
const v2_paginator_1 = require("./v2.paginator");
/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with since_id, until_id and next_token (when available). */
class TweetTimelineV2Paginator extends v2_paginator_1.TwitterV2Paginator {
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) {
this.assertUsable();
const params = { ...this.injectQueryParams(maxResults) };
if (this._realData.meta.next_token) {
params.next_token = this._realData.meta.next_token;
}
else {
if (params.start_time) {
// until_id and start_time are forbidden together for some reason, so convert start_time to a since_id.
params.since_id = this.dateStringToSnowflakeId(params.start_time);
delete params.start_time;
}
if (params.end_time) {
// until_id overrides end_time, so delete it
delete params.end_time;
}
params.until_id = this._realData.meta.oldest_id;
}
return params;
}
getPreviousQueryParams(maxResults) {
this.assertUsable();
return {
...this.injectQueryParams(maxResults),
since_id: this._realData.meta.newest_id,
};
}
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;
}
dateStringToSnowflakeId(dateStr) {
const TWITTER_START_EPOCH = BigInt('1288834974657');
const date = new Date(dateStr);
if (isNaN(date.valueOf())) {
throw new Error('Unable to convert start_time/end_time to a valid date. A ISO 8601 DateTime is excepted, please check your input.');
}
const dateTimestamp = BigInt(date.valueOf());
return ((dateTimestamp - TWITTER_START_EPOCH) << BigInt('22')).toString();
}
/**
* Tweets returned by paginator.
*/
get tweets() {
var _a;
return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];
}
get meta() {
return super.meta;
}
}
/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with pagination_tokens. */
class TweetPaginableTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {
refreshInstanceFromResult(response, isNextPage) {
super.refreshInstanceFromResult(response, isNextPage);
const result = response.data;
if (isNextPage) {
this._realData.meta.oldest_id = result.meta.oldest_id;
}
else {
this._realData.meta.newest_id = result.meta.newest_id;
}
}
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 super.meta;
}
}
// ----------------
// - 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 QuotedTweetsTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'tweets/:id/quote_tweets';
}
}
exports.QuotedTweetsTimelineV2Paginator = QuotedTweetsTimelineV2Paginator;
// -----------------
// - Home timeline -
// -----------------
class TweetHomeTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/timelines/reverse_chronological';
}
}
exports.TweetHomeTimelineV2Paginator = TweetHomeTimelineV2Paginator;
class TweetUserTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/tweets';
}
}
exports.TweetUserTimelineV2Paginator = TweetUserTimelineV2Paginator;
class TweetUserMentionTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/mentions';
}
}
exports.TweetUserMentionTimelineV2Paginator = TweetUserMentionTimelineV2Paginator;
// -------------
// - Bookmarks -
// -------------
class TweetBookmarksTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/bookmarks';
}
}
exports.TweetBookmarksTimelineV2Paginator = TweetBookmarksTimelineV2Paginator;
// ---------------------------------------------------------------------------------
// - Tweet lists (consume tweets with pagination tokens instead of since/until id) -
// ---------------------------------------------------------------------------------
/** A generic TwitterPaginator able to consume TweetV2 timelines. */
class TweetListV2Paginator extends v2_paginator_1.TimelineV2Paginator {
/**
* Tweets returned by paginator.
*/
get tweets() {
var _a;
return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];
}
get meta() {
return super.meta;
}
getItemArray() {
return this.tweets;
}
}
class TweetV2UserLikedTweetsPaginator extends TweetListV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'users/:id/liked_tweets';
}
}
exports.TweetV2UserLikedTweetsPaginator = TweetV2UserLikedTweetsPaginator;
class TweetV2ListTweetsPaginator extends TweetListV2Paginator {
constructor() {
super(...arguments);
this._endpoint = 'lists/:id/tweets';
}
}
exports.TweetV2ListTweetsPaginator = TweetV2ListTweetsPaginator;