@the-convocation/twitter-scraper 0.1.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/_module.d.ts +1 -1
  2. package/dist/_module.d.ts.map +1 -1
  3. package/dist/api.d.ts +19 -3
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +61 -45
  6. package/dist/api.js.map +1 -1
  7. package/dist/auth-user.d.ts +2 -3
  8. package/dist/auth-user.d.ts.map +1 -1
  9. package/dist/auth-user.js +176 -176
  10. package/dist/auth-user.js.map +1 -1
  11. package/dist/auth.d.ts +4 -7
  12. package/dist/auth.d.ts.map +1 -1
  13. package/dist/auth.js +44 -48
  14. package/dist/auth.js.map +1 -1
  15. package/dist/errors.d.ts +3 -4
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js.map +1 -1
  18. package/dist/profile.d.ts.map +1 -1
  19. package/dist/profile.js +56 -67
  20. package/dist/profile.js.map +1 -1
  21. package/dist/requests.d.ts +9 -0
  22. package/dist/requests.d.ts.map +1 -0
  23. package/dist/requests.js +26 -0
  24. package/dist/requests.js.map +1 -0
  25. package/dist/scraper.d.ts +13 -13
  26. package/dist/scraper.d.ts.map +1 -1
  27. package/dist/scraper.js +49 -69
  28. package/dist/scraper.js.map +1 -1
  29. package/dist/search.d.ts +4 -4
  30. package/dist/search.d.ts.map +1 -1
  31. package/dist/search.js +62 -62
  32. package/dist/search.js.map +1 -1
  33. package/dist/timeline-async.d.ts +2 -2
  34. package/dist/timeline-async.d.ts.map +1 -1
  35. package/dist/timeline-async.js +34 -50
  36. package/dist/timeline-async.js.map +1 -1
  37. package/dist/timeline-search.d.ts +20 -0
  38. package/dist/timeline-search.d.ts.map +1 -0
  39. package/dist/timeline-search.js +75 -0
  40. package/dist/timeline-search.js.map +1 -0
  41. package/dist/timeline-tweet-util.d.ts +9 -0
  42. package/dist/timeline-tweet-util.d.ts.map +1 -0
  43. package/dist/timeline-tweet-util.js +102 -0
  44. package/dist/timeline-tweet-util.js.map +1 -0
  45. package/dist/{timeline.d.ts → timeline-v1.d.ts} +36 -9
  46. package/dist/timeline-v1.d.ts.map +1 -0
  47. package/dist/timeline-v1.js +181 -0
  48. package/dist/timeline-v1.js.map +1 -0
  49. package/dist/timeline-v2.d.ts +61 -0
  50. package/dist/timeline-v2.d.ts.map +1 -0
  51. package/dist/timeline-v2.js +194 -0
  52. package/dist/timeline-v2.js.map +1 -0
  53. package/dist/trends.js +31 -42
  54. package/dist/trends.js.map +1 -1
  55. package/dist/tweets.d.ts +12 -6
  56. package/dist/tweets.d.ts.map +1 -1
  57. package/dist/tweets.js +79 -86
  58. package/dist/tweets.js.map +1 -1
  59. package/dist/type-util.d.ts +6 -0
  60. package/dist/type-util.d.ts.map +1 -0
  61. package/dist/type-util.js +14 -0
  62. package/dist/type-util.js.map +1 -0
  63. package/package.json +11 -2
  64. package/dist/timeline.d.ts.map +0 -1
  65. package/dist/timeline.js +0 -280
  66. package/dist/timeline.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseSearchTimelineUsers = exports.parseSearchTimelineTweets = void 0;
4
+ const profile_1 = require("./profile");
5
+ const timeline_v2_1 = require("./timeline-v2");
6
+ function parseSearchTimelineTweets(timeline) {
7
+ let cursor;
8
+ const tweets = [];
9
+ const instructions = timeline.data?.search_by_raw_query?.search_timeline?.timeline
10
+ ?.instructions ?? [];
11
+ for (const instruction of instructions) {
12
+ if (instruction.type === 'TimelineAddEntries' ||
13
+ instruction.type === 'TimelineReplaceEntry') {
14
+ if (instruction.entry?.content?.cursorType === 'Bottom') {
15
+ cursor = instruction.entry.content.value;
16
+ continue;
17
+ }
18
+ for (const entry of instruction.entries ?? []) {
19
+ const itemContent = entry.content?.itemContent;
20
+ if (itemContent?.tweetDisplayType === 'Tweet') {
21
+ const tweetResultRaw = itemContent.tweet_results?.result;
22
+ const tweetResult = (0, timeline_v2_1.parseLegacyTweet)(tweetResultRaw?.core?.user_results?.result?.legacy, tweetResultRaw?.legacy);
23
+ if (tweetResult.success) {
24
+ if (!tweetResult.tweet.views && tweetResultRaw?.views?.count) {
25
+ const views = parseInt(tweetResultRaw.views.count);
26
+ if (!isNaN(views)) {
27
+ tweetResult.tweet.views = views;
28
+ }
29
+ }
30
+ tweets.push(tweetResult.tweet);
31
+ }
32
+ }
33
+ else if (entry.content?.cursorType === 'Bottom') {
34
+ cursor = entry.content.value;
35
+ }
36
+ }
37
+ }
38
+ }
39
+ return { tweets, next: cursor };
40
+ }
41
+ exports.parseSearchTimelineTweets = parseSearchTimelineTweets;
42
+ function parseSearchTimelineUsers(timeline) {
43
+ let cursor;
44
+ const profiles = [];
45
+ const instructions = timeline.data?.search_by_raw_query?.search_timeline?.timeline
46
+ ?.instructions ?? [];
47
+ for (const instruction of instructions) {
48
+ if (instruction.type === 'TimelineAddEntries' ||
49
+ instruction.type === 'TimelineReplaceEntry') {
50
+ if (instruction.entry?.content?.cursorType === 'Bottom') {
51
+ cursor = instruction.entry.content.value;
52
+ continue;
53
+ }
54
+ for (const entry of instruction.entries ?? []) {
55
+ const itemContent = entry.content?.itemContent;
56
+ if (itemContent?.userDisplayType === 'User') {
57
+ const userResultRaw = itemContent.user_results?.result;
58
+ if (userResultRaw?.legacy) {
59
+ const profile = (0, profile_1.parseProfile)(userResultRaw.legacy);
60
+ if (!profile.userId) {
61
+ profile.userId = itemContent.user_results?.result?.rest_id;
62
+ }
63
+ profiles.push(profile);
64
+ }
65
+ }
66
+ else if (entry.content?.cursorType === 'Bottom') {
67
+ cursor = entry.content.value;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ return { profiles, next: cursor };
73
+ }
74
+ exports.parseSearchTimelineUsers = parseSearchTimelineUsers;
75
+ //# sourceMappingURL=timeline-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-search.js","sourceRoot":"","sources":["../src/timeline-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { LegacyTweetRaw, TimelineMediaExtendedRaw } from './timeline-v1';
2
+ import { Photo, Video } from './tweets';
3
+ export declare function parseMediaGroups(media: TimelineMediaExtendedRaw[]): {
4
+ sensitiveContent?: boolean;
5
+ photos: Photo[];
6
+ videos: Video[];
7
+ };
8
+ export declare function reconstructTweetHtml(tweet: LegacyTweetRaw, photos: Photo[], videos: Video[]): string;
9
+ //# sourceMappingURL=timeline-tweet-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-tweet-util.d.ts","sourceRoot":"","sources":["../src/timeline-tweet-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAOxC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,EAAE,GAAG;IACnE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CA2BA;AA8BD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,KAAK,EAAE,GACd,MAAM,CA6BR"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconstructTweetHtml = exports.parseMediaGroups = void 0;
4
+ const type_util_1 = require("./type-util");
5
+ const reHashtag = /\B(\#\S+\b)/g;
6
+ const reTwitterUrl = /https:(\/\/t\.co\/([A-Za-z0-9]|[A-Za-z]){10})/g;
7
+ const reUsername = /\B(\@\S{1,15}\b)/g;
8
+ function parseMediaGroups(media) {
9
+ const photos = [];
10
+ const videos = [];
11
+ let sensitiveContent = undefined;
12
+ for (const m of media
13
+ .filter((0, type_util_1.isFieldDefined)('id_str'))
14
+ .filter((0, type_util_1.isFieldDefined)('media_url_https'))) {
15
+ if (m.type === 'photo') {
16
+ photos.push({
17
+ id: m.id_str,
18
+ url: m.media_url_https,
19
+ });
20
+ }
21
+ else if (m.type === 'video') {
22
+ videos.push(parseVideo(m));
23
+ }
24
+ const sensitive = m.ext_sensitive_media_warning;
25
+ if (sensitive != null) {
26
+ sensitiveContent =
27
+ sensitive.adult_content ||
28
+ sensitive.graphic_violence ||
29
+ sensitive.other;
30
+ }
31
+ }
32
+ return { sensitiveContent, photos, videos };
33
+ }
34
+ exports.parseMediaGroups = parseMediaGroups;
35
+ function parseVideo(m) {
36
+ const video = {
37
+ id: m.id_str,
38
+ preview: m.media_url_https,
39
+ };
40
+ let maxBitrate = 0;
41
+ const variants = m.video_info?.variants ?? [];
42
+ for (const variant of variants) {
43
+ const bitrate = variant.bitrate;
44
+ if (bitrate != null && bitrate > maxBitrate && variant.url != null) {
45
+ let variantUrl = variant.url;
46
+ const stringStart = 0;
47
+ const tagSuffixIdx = variantUrl.indexOf('?tag=10');
48
+ if (tagSuffixIdx !== -1) {
49
+ variantUrl = variantUrl.substring(stringStart, tagSuffixIdx + 1);
50
+ }
51
+ video.url = variantUrl;
52
+ maxBitrate = bitrate;
53
+ }
54
+ }
55
+ return video;
56
+ }
57
+ function reconstructTweetHtml(tweet, photos, videos) {
58
+ const media = [];
59
+ // HTML parsing with regex :)
60
+ let html = tweet.full_text ?? '';
61
+ html = html.replace(reHashtag, linkHashtagHtml);
62
+ html = html.replace(reUsername, linkUsernameHtml);
63
+ html = html.replace(reTwitterUrl, unwrapTcoUrlHtml(tweet, media));
64
+ for (const { url } of photos) {
65
+ if (media.indexOf(url) !== -1) {
66
+ continue;
67
+ }
68
+ html += `<br><img src="${url}"/>`;
69
+ }
70
+ for (const { preview: url } of videos) {
71
+ if (media.indexOf(url) !== -1) {
72
+ continue;
73
+ }
74
+ html += `<br><img src="${url}"/>`;
75
+ }
76
+ html = html.replace(/\n/g, '<br>');
77
+ return html;
78
+ }
79
+ exports.reconstructTweetHtml = reconstructTweetHtml;
80
+ function linkHashtagHtml(hashtag) {
81
+ return `<a href="https://twitter.com/hashtag/${hashtag.replace('#', '')}">${hashtag}</a>`;
82
+ }
83
+ function linkUsernameHtml(username) {
84
+ return `<a href="https://twitter.com/${username[0].replace('@', '')}">${username[0]}</a>`;
85
+ }
86
+ function unwrapTcoUrlHtml(tweet, foundedMedia) {
87
+ return function (tco) {
88
+ for (const entity of tweet.entities?.urls ?? []) {
89
+ if (tco === entity.url && entity.expanded_url != null) {
90
+ return `<a href="${entity.expanded_url}">${tco}</a>`;
91
+ }
92
+ }
93
+ for (const entity of tweet.extended_entities?.media ?? []) {
94
+ if (tco === entity.url && entity.media_url_https != null) {
95
+ foundedMedia.push(entity.media_url_https);
96
+ return `<br><a href="${tco}"><img src="${entity.media_url_https}"/></a>`;
97
+ }
98
+ }
99
+ return tco;
100
+ };
101
+ }
102
+ //# sourceMappingURL=timeline-tweet-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-tweet-util.js","sourceRoot":"","sources":["../src/timeline-tweet-util.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,32 @@ export interface TimelineMediaExtendedRaw {
37
37
  url?: string;
38
38
  video_info?: VideoInfo;
39
39
  }
40
- export interface TimelineTweetRaw {
40
+ export interface TimelineResultRaw {
41
+ __typename?: string;
42
+ core?: {
43
+ user_results?: {
44
+ result?: {
45
+ is_blue_verified?: boolean;
46
+ legacy?: LegacyUserRaw;
47
+ };
48
+ };
49
+ };
50
+ views?: {
51
+ count?: string;
52
+ };
53
+ note_tweet?: {
54
+ note_tweet_results?: {
55
+ result?: {
56
+ text?: string;
57
+ };
58
+ };
59
+ };
60
+ quoted_status_result?: {
61
+ result?: TimelineResultRaw;
62
+ };
63
+ legacy?: LegacyTweetRaw;
64
+ }
65
+ export interface LegacyTweetRaw {
41
66
  conversation_id_str?: string;
42
67
  created_at?: string;
43
68
  favorite_count?: number;
@@ -51,11 +76,15 @@ export interface TimelineTweetRaw {
51
76
  extended_entities?: {
52
77
  media?: TimelineMediaExtendedRaw[];
53
78
  };
79
+ id_str?: string;
54
80
  in_reply_to_status_id_str?: string;
55
81
  place?: PlaceRaw;
56
82
  reply_count?: number;
57
83
  retweet_count?: number;
58
84
  retweeted_status_id_str?: string;
85
+ retweeted_status_result?: {
86
+ result?: TimelineResultRaw;
87
+ };
59
88
  quoted_status_id_str?: string;
60
89
  time?: string;
61
90
  user_id_str?: string;
@@ -66,7 +95,7 @@ export interface TimelineTweetRaw {
66
95
  }
67
96
  export interface TimelineGlobalObjectsRaw {
68
97
  tweets?: {
69
- [key: string]: TimelineTweetRaw | undefined;
98
+ [key: string]: LegacyTweetRaw | undefined;
70
99
  };
71
100
  users?: {
72
101
  [key: string]: LegacyUserRaw | undefined;
@@ -140,18 +169,17 @@ export interface TimelineDataRawInstruction {
140
169
  export interface TimelineDataRaw {
141
170
  instructions?: TimelineDataRawInstruction[];
142
171
  }
143
- export interface TimelineRaw {
172
+ export interface TimelineV1 {
144
173
  globalObjects?: TimelineGlobalObjectsRaw;
145
174
  timeline?: TimelineDataRaw;
146
175
  }
147
- type ParseTweetResult = {
176
+ export type ParseTweetResult = {
148
177
  success: true;
149
178
  tweet: Tweet;
150
179
  } | {
151
180
  success: false;
152
181
  err: Error;
153
182
  };
154
- export declare function parseTweet(timeline: TimelineRaw, id: string): ParseTweetResult;
155
183
  /**
156
184
  * A paginated tweets API response. The `next` field can be used to fetch the next page of results.
157
185
  */
@@ -159,7 +187,7 @@ export interface QueryTweetsResponse {
159
187
  tweets: Tweet[];
160
188
  next?: string;
161
189
  }
162
- export declare function parseTweets(timeline: TimelineRaw): QueryTweetsResponse;
190
+ export declare function parseTimelineTweetsV1(timeline: TimelineV1): QueryTweetsResponse;
163
191
  /**
164
192
  * A paginated profiles API response. The `next` field can be used to fetch the next page of results.
165
193
  */
@@ -167,6 +195,5 @@ export interface QueryProfilesResponse {
167
195
  profiles: Profile[];
168
196
  next?: string;
169
197
  }
170
- export declare function parseUsers(timeline: TimelineRaw): QueryProfilesResponse;
171
- export {};
172
- //# sourceMappingURL=timeline.d.ts.map
198
+ export declare function parseUsers(timeline: TimelineV1): QueryProfilesResponse;
199
+ //# sourceMappingURL=timeline-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-v1.d.ts","sourceRoot":"","sources":["../src/timeline-v1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseUsers = exports.parseTimelineTweetsV1 = void 0;
4
+ const profile_1 = require("./profile");
5
+ const timeline_tweet_util_1 = require("./timeline-tweet-util");
6
+ const type_util_1 = require("./type-util");
7
+ function parseTimelineTweet(timeline, id) {
8
+ const tweets = timeline.globalObjects?.tweets ?? {};
9
+ const tweet = tweets[id];
10
+ if (tweet?.user_id_str == null) {
11
+ return {
12
+ success: false,
13
+ err: new Error(`Tweet "${id}" was not found in the timeline object.`),
14
+ };
15
+ }
16
+ const users = timeline.globalObjects?.users ?? {};
17
+ const user = users[tweet.user_id_str];
18
+ if (user?.screen_name == null) {
19
+ return {
20
+ success: false,
21
+ err: new Error(`User "${tweet.user_id_str}" has no username data.`),
22
+ };
23
+ }
24
+ const hashtags = tweet.entities?.hashtags ?? [];
25
+ const mentions = tweet.entities?.user_mentions ?? [];
26
+ const media = tweet.extended_entities?.media ?? [];
27
+ const pinnedTweets = new Set(user.pinned_tweet_ids_str ?? []);
28
+ const urls = tweet.entities?.urls ?? [];
29
+ const { photos, videos, sensitiveContent } = (0, timeline_tweet_util_1.parseMediaGroups)(media);
30
+ const tw = {
31
+ conversationId: tweet.conversation_id_str,
32
+ id,
33
+ hashtags: hashtags
34
+ .filter((0, type_util_1.isFieldDefined)('text'))
35
+ .map((hashtag) => hashtag.text),
36
+ likes: tweet.favorite_count,
37
+ mentions: mentions.filter((0, type_util_1.isFieldDefined)('id_str')).map((mention) => ({
38
+ id: mention.id_str,
39
+ username: mention.screen_name,
40
+ name: mention.name,
41
+ })),
42
+ name: user.name,
43
+ permanentUrl: `https://twitter.com/${user.screen_name}/status/${id}`,
44
+ photos,
45
+ replies: tweet.reply_count,
46
+ retweets: tweet.retweet_count,
47
+ text: tweet.full_text,
48
+ thread: [],
49
+ urls: urls
50
+ .filter((0, type_util_1.isFieldDefined)('expanded_url'))
51
+ .map((url) => url.expanded_url),
52
+ userId: tweet.user_id_str,
53
+ username: user.screen_name,
54
+ videos,
55
+ };
56
+ if (tweet.created_at) {
57
+ tw.timeParsed = new Date(Date.parse(tweet.created_at));
58
+ tw.timestamp = Math.floor(tw.timeParsed.valueOf() / 1000);
59
+ }
60
+ if (tweet.place?.id) {
61
+ tw.place = tweet.place;
62
+ }
63
+ if (tweet.quoted_status_id_str) {
64
+ tw.isQuoted = true;
65
+ tw.quotedStatusId = tweet.quoted_status_id_str;
66
+ const quotedStatusResult = parseTimelineTweet(timeline, tweet.quoted_status_id_str);
67
+ if (quotedStatusResult.success) {
68
+ tw.quotedStatus = quotedStatusResult.tweet;
69
+ }
70
+ }
71
+ if (tweet.in_reply_to_status_id_str) {
72
+ tw.isReply = true;
73
+ tw.inReplyToStatusId = tweet.in_reply_to_status_id_str;
74
+ const replyStatusResult = parseTimelineTweet(timeline, tweet.in_reply_to_status_id_str);
75
+ if (replyStatusResult.success) {
76
+ tw.inReplyToStatus = replyStatusResult.tweet;
77
+ }
78
+ }
79
+ if (tweet.retweeted_status_id_str != null) {
80
+ tw.isRetweet = true;
81
+ tw.retweetedStatusId = tweet.retweeted_status_id_str;
82
+ const retweetedStatusResult = parseTimelineTweet(timeline, tweet.retweeted_status_id_str);
83
+ if (retweetedStatusResult.success) {
84
+ tw.retweetedStatus = retweetedStatusResult.tweet;
85
+ }
86
+ }
87
+ const views = parseInt(tweet.ext_views?.count ?? '');
88
+ if (!isNaN(views)) {
89
+ tw.views = views;
90
+ }
91
+ if (pinnedTweets.has(tweet.id_str)) {
92
+ // TODO: Update tests so this can be assigned at the tweet declaration
93
+ tw.isPin = true;
94
+ }
95
+ if (sensitiveContent) {
96
+ // TODO: Update tests so this can be assigned at the tweet declaration
97
+ tw.sensitiveContent = true;
98
+ }
99
+ tw.html = (0, timeline_tweet_util_1.reconstructTweetHtml)(tweet, tw.photos, tw.videos);
100
+ return { success: true, tweet: tw };
101
+ }
102
+ function parseTimelineTweetsV1(timeline) {
103
+ let cursor;
104
+ let pinnedTweet;
105
+ let orderedTweets = [];
106
+ for (const instruction of timeline.timeline?.instructions ?? []) {
107
+ const { pinEntry, addEntries, replaceEntry } = instruction;
108
+ // Handle pin instruction
109
+ const pinnedTweetId = pinEntry?.entry?.content?.item?.content?.tweet?.id;
110
+ if (pinnedTweetId != null) {
111
+ const tweetResult = parseTimelineTweet(timeline, pinnedTweetId);
112
+ if (tweetResult.success) {
113
+ pinnedTweet = tweetResult.tweet;
114
+ }
115
+ }
116
+ // Handle add instructions
117
+ for (const { content } of addEntries?.entries ?? []) {
118
+ const tweetId = content?.item?.content?.tweet?.id;
119
+ if (tweetId != null) {
120
+ const tweetResult = parseTimelineTweet(timeline, tweetId);
121
+ if (tweetResult.success) {
122
+ orderedTweets.push(tweetResult.tweet);
123
+ }
124
+ }
125
+ const operation = content?.operation;
126
+ if (operation?.cursor?.cursorType === 'Bottom') {
127
+ cursor = operation?.cursor?.value;
128
+ }
129
+ }
130
+ // Handle replace instruction
131
+ const operation = replaceEntry?.entry?.content?.operation;
132
+ if (operation?.cursor?.cursorType === 'Bottom') {
133
+ cursor = operation.cursor.value;
134
+ }
135
+ }
136
+ if (pinnedTweet != null && orderedTweets.length > 0) {
137
+ orderedTweets = [pinnedTweet, ...orderedTweets];
138
+ }
139
+ return {
140
+ tweets: orderedTweets,
141
+ next: cursor,
142
+ };
143
+ }
144
+ exports.parseTimelineTweetsV1 = parseTimelineTweetsV1;
145
+ function parseUsers(timeline) {
146
+ const users = new Map();
147
+ const userObjects = timeline.globalObjects?.users ?? {};
148
+ for (const id in userObjects) {
149
+ const legacy = userObjects[id];
150
+ if (legacy == null) {
151
+ continue;
152
+ }
153
+ const user = (0, profile_1.parseProfile)(legacy);
154
+ users.set(id, user);
155
+ }
156
+ let cursor;
157
+ const orderedProfiles = [];
158
+ for (const instruction of timeline.timeline?.instructions ?? []) {
159
+ for (const entry of instruction.addEntries?.entries ?? []) {
160
+ const userId = entry.content?.item?.content?.user?.id;
161
+ const profile = users.get(userId);
162
+ if (profile != null) {
163
+ orderedProfiles.push(profile);
164
+ }
165
+ const operation = entry.content?.operation;
166
+ if (operation?.cursor?.cursorType === 'Bottom') {
167
+ cursor = operation?.cursor?.value;
168
+ }
169
+ }
170
+ const operation = instruction.replaceEntry?.entry?.content?.operation;
171
+ if (operation?.cursor?.cursorType === 'Bottom') {
172
+ cursor = operation.cursor.value;
173
+ }
174
+ }
175
+ return {
176
+ profiles: orderedProfiles,
177
+ next: cursor,
178
+ };
179
+ }
180
+ exports.parseUsers = parseUsers;
181
+ //# sourceMappingURL=timeline-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-v1.js","sourceRoot":"","sources":["../src/timeline-v1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { LegacyUserRaw } from './profile';
2
+ import { LegacyTweetRaw, ParseTweetResult, QueryTweetsResponse, TimelineResultRaw } from './timeline-v1';
3
+ import { Tweet } from './tweets';
4
+ export interface TimelineUserResultRaw {
5
+ rest_id?: string;
6
+ legacy?: LegacyUserRaw;
7
+ }
8
+ export interface TimelineEntryItemContentRaw {
9
+ tweetDisplayType?: string;
10
+ tweet_results?: {
11
+ result?: TimelineResultRaw;
12
+ };
13
+ userDisplayType?: string;
14
+ user_results?: {
15
+ result?: TimelineUserResultRaw;
16
+ };
17
+ }
18
+ export interface TimelineEntryRaw {
19
+ content?: {
20
+ cursorType?: string;
21
+ value?: string;
22
+ items?: {
23
+ item?: {
24
+ itemContent?: TimelineEntryItemContentRaw;
25
+ };
26
+ }[];
27
+ itemContent?: TimelineEntryItemContentRaw;
28
+ };
29
+ }
30
+ export interface TimelineV2 {
31
+ data?: {
32
+ user?: {
33
+ result?: {
34
+ timeline_v2?: {
35
+ timeline?: {
36
+ instructions?: {
37
+ entries?: TimelineEntryRaw[];
38
+ entry?: TimelineEntryRaw;
39
+ type?: string;
40
+ }[];
41
+ };
42
+ };
43
+ };
44
+ };
45
+ };
46
+ }
47
+ export interface ThreadedConversation {
48
+ data?: {
49
+ threaded_conversation_with_injections_v2?: {
50
+ instructions?: {
51
+ entries?: TimelineEntryRaw[];
52
+ entry?: TimelineEntryRaw;
53
+ type?: string;
54
+ }[];
55
+ };
56
+ };
57
+ }
58
+ export declare function parseLegacyTweet(user?: LegacyUserRaw, tweet?: LegacyTweetRaw): ParseTweetResult;
59
+ export declare function parseTimelineTweetsV2(timeline: TimelineV2): QueryTweetsResponse;
60
+ export declare function parseThreadedConversation(conversation: ThreadedConversation): Tweet[];
61
+ //# sourceMappingURL=timeline-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-v2.d.ts","sourceRoot":"","sources":["../src/timeline-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,iBAAiB,CAAC;KAC5B,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,qBAAqB,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE;gBACL,WAAW,CAAC,EAAE,2BAA2B,CAAC;aAC3C,CAAC;SACH,EAAE,CAAC;QACJ,WAAW,CAAC,EAAE,2BAA2B,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE;YACL,MAAM,CAAC,EAAE;gBACP,WAAW,CAAC,EAAE;oBACZ,QAAQ,CAAC,EAAE;wBACT,YAAY,CAAC,EAAE;4BACb,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;4BAC7B,KAAK,CAAC,EAAE,gBAAgB,CAAC;4BACzB,IAAI,CAAC,EAAE,MAAM,CAAC;yBACf,EAAE,CAAC;qBACL,CAAC;iBACH,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE;QACL,wCAAwC,CAAC,EAAE;YACzC,YAAY,CAAC,EAAE;gBACb,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;gBAC7B,KAAK,CAAC,EAAE,gBAAgB,CAAC;gBACzB,IAAI,CAAC,EAAE,MAAM,CAAC;aACf,EAAE,CAAC;SACL,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,CAAC,EAAE,aAAa,EACpB,KAAK,CAAC,EAAE,cAAc,GACrB,gBAAgB,CA8GlB;AAgCD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,UAAU,GACnB,mBAAmB,CA2BrB;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,oBAAoB,GACjC,KAAK,EAAE,CAkET"}