twitter-openapi-typescript 0.0.43 → 0.0.44

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/src/apis/defaultApi.d.ts.map +1 -1
  2. package/dist/src/apis/defaultApi.js +8 -9
  3. package/dist/src/apis/defaultApi.js.map +1 -1
  4. package/dist/src/apis/postApi.d.ts +2 -2
  5. package/dist/src/apis/postApi.d.ts.map +1 -1
  6. package/dist/src/apis/postApi.js +48 -54
  7. package/dist/src/apis/postApi.js.map +1 -1
  8. package/dist/src/apis/tweetApi.d.ts.map +1 -1
  9. package/dist/src/apis/tweetApi.js +16 -17
  10. package/dist/src/apis/tweetApi.js.map +1 -1
  11. package/dist/src/apis/userApi.d.ts.map +1 -1
  12. package/dist/src/apis/userApi.js +8 -9
  13. package/dist/src/apis/userApi.js.map +1 -1
  14. package/dist/src/apis/userListApi.d.ts.map +1 -1
  15. package/dist/src/apis/userListApi.js +11 -12
  16. package/dist/src/apis/userListApi.js.map +1 -1
  17. package/dist/src/apis/usersApi.d.ts.map +1 -1
  18. package/dist/src/apis/usersApi.js +7 -8
  19. package/dist/src/apis/usersApi.js.map +1 -1
  20. package/dist/src/models/utils.d.ts +1 -1
  21. package/dist/src/models/utils.d.ts.map +1 -1
  22. package/dist/src/utils/api.d.ts +1 -2
  23. package/dist/src/utils/api.d.ts.map +1 -1
  24. package/dist/src/utils/api.js +9 -16
  25. package/dist/src/utils/api.js.map +1 -1
  26. package/package.json +2 -2
  27. package/.prettierrc +0 -8
  28. package/.vscode/extensions.json +0 -8
  29. package/.vscode/settings.json +0 -21
  30. package/cookies.json +0 -170
  31. package/jest.config.js +0 -11
  32. package/src/api.ts +0 -222
  33. package/src/apis/defaultApi.ts +0 -72
  34. package/src/apis/index.ts +0 -10
  35. package/src/apis/initialStateApi.ts +0 -3
  36. package/src/apis/postApi.ts +0 -208
  37. package/src/apis/tweetApi.ts +0 -289
  38. package/src/apis/userApi.ts +0 -72
  39. package/src/apis/userListApi.ts +0 -173
  40. package/src/apis/usersApi.ts +0 -50
  41. package/src/apis/v11GetApi.ts +0 -14
  42. package/src/apis/v11PostApi.ts +0 -75
  43. package/src/apis/v20GetApi.ts +0 -14
  44. package/src/index.ts +0 -4
  45. package/src/models/flag.ts +0 -5
  46. package/src/models/header.ts +0 -14
  47. package/src/models/index.ts +0 -5
  48. package/src/models/response.ts +0 -11
  49. package/src/models/timeline.ts +0 -32
  50. package/src/models/utils.ts +0 -10
  51. package/src/utils/api.ts +0 -230
  52. package/src/utils/index.ts +0 -1
  53. package/test/api/auth.test.ts +0 -15
  54. package/test/api/defaultApi.test.ts +0 -21
  55. package/test/api/guest.test.ts +0 -10
  56. package/test/api/postApi.test.ts +0 -61
  57. package/test/api/tweetApi.test.ts +0 -82
  58. package/test/api/userApi.test.ts +0 -33
  59. package/test/api/userListApi.test.ts +0 -42
  60. package/test/api/usersApi.test.ts +0 -12
  61. package/test/api/v11PostApi.test.ts +0 -13
  62. package/test/init.ts +0 -50
  63. package/test/raw/tweet_api.test.ts +0 -12
  64. package/test/util.ts +0 -29
  65. package/tsconfig.build.json +0 -26
  66. package/tsconfig.json +0 -26
@@ -1,14 +0,0 @@
1
- export type ApiUtilsHeader = {
2
- raw: Headers;
3
- connectionHash: string;
4
- contentTypeOptions: string;
5
- frameOptions: string;
6
- rateLimitLimit: number;
7
- rateLimitRemaining: number;
8
- rateLimitReset: number;
9
- responseTime: number;
10
- tfePreserveBody: boolean;
11
- transactionId: string;
12
- twitterResponseTags: string;
13
- xssProtection: number;
14
- };
@@ -1,5 +0,0 @@
1
- export * from './flag';
2
- export * from './header';
3
- export * from './response';
4
- export * from './timeline';
5
- export * from './utils';
@@ -1,11 +0,0 @@
1
- import { ApiUtilsHeader } from '@/models';
2
-
3
- export type TwitterApiUtilsResponse<T> = {
4
- raw: TwitterApiUtilsRaw;
5
- header: ApiUtilsHeader;
6
- data: T;
7
- };
8
-
9
- export type TwitterApiUtilsRaw = {
10
- response: Response;
11
- };
@@ -1,32 +0,0 @@
1
- import * as i from 'twitter-openapi-typescript-generated';
2
-
3
- export type CursorApiUtilsResponse = {
4
- bottom?: i.TimelineTimelineCursor;
5
- top?: i.TimelineTimelineCursor;
6
- };
7
-
8
- export type ApiUtilsRaw = {
9
- instruction: i.InstructionUnion[];
10
- entry: i.TimelineAddEntry[];
11
- };
12
-
13
- export type TweetApiUtilsData = {
14
- raw: i.ItemResult;
15
- tweet: i.Tweet;
16
- user: i.User;
17
- replies: TweetApiUtilsData[];
18
- quoted?: TweetApiUtilsData;
19
- retweeted?: TweetApiUtilsData;
20
- promotedMetadata?: Record<string, unknown>;
21
- };
22
-
23
- export type UserApiUtilsData = {
24
- raw: i.UserResults;
25
- user: i.User | undefined;
26
- };
27
-
28
- export type TimelineApiUtilsResponse<T> = {
29
- raw: ApiUtilsRaw;
30
- cursor: CursorApiUtilsResponse;
31
- data: T[];
32
- };
@@ -1,10 +0,0 @@
1
- import * as i from 'twitter-openapi-typescript-generated';
2
- export type initOverrides = RequestInit;
3
- export type ApiFunction<T> = (requestParameters: any, initOverrides?: initOverrides) => Promise<i.ApiResponse<T>>;
4
-
5
- export type RequestParam<T1, T2> = {
6
- apiFn: ApiFunction<i.Errors | T2>;
7
- convertFn: (arg0: T2) => T1;
8
- key: string;
9
- param: { [key: string]: any };
10
- };
package/src/utils/api.ts DELETED
@@ -1,230 +0,0 @@
1
- import { ApiUtilsHeader, CursorApiUtilsResponse, TweetApiUtilsData, UserApiUtilsData } from '@/models';
2
- import * as i from 'twitter-openapi-typescript-generated';
3
-
4
- export const nonNullable = <T>(x: T | undefined): T => {
5
- if (x == undefined) {
6
- throw Error('No data');
7
- }
8
- return x;
9
- };
10
-
11
- export const getKwargs = (flag: { [key: string]: any }, additional: { [key: string]: any }): any => {
12
- const kwargs: { [key: string]: any } = { pathQueryId: flag.queryId };
13
- if (flag.variables != undefined) {
14
- kwargs.variables = JSON.stringify({ ...flag.variables, ...additional });
15
- }
16
- if (flag.features != undefined) {
17
- kwargs.features = JSON.stringify(flag.features);
18
- }
19
- if (flag.fieldToggles != undefined) {
20
- kwargs.fieldToggles = JSON.stringify(flag.fieldToggles);
21
- }
22
- return kwargs;
23
- };
24
-
25
- export const errorCheck = <T>(data: i.Errors | T): T => {
26
- const res: any = data;
27
- if (res.data != undefined) {
28
- return res;
29
- } else if (res.error != undefined) {
30
- throw Error(res.errors[0].message);
31
- }
32
- throw Error();
33
- };
34
-
35
- export const instructionToEntry = (item: i.InstructionUnion[]): i.TimelineAddEntry[] => {
36
- return item.flatMap((e) => {
37
- if (e.type == i.InstructionType.TimelineAddEntries) {
38
- return (e as i.TimelineAddEntries).entries;
39
- } else if (e.type == i.InstructionType.TimelineAddToModule) {
40
- return [];
41
- } else if (e.type == i.InstructionType.TimelineReplaceEntry) {
42
- return [(e as i.TimelineReplaceEntry).entry];
43
- }
44
- return [];
45
- });
46
- };
47
-
48
- export const instructionConverter = (item: i.InstructionUnion[]): TweetApiUtilsData[] => {
49
- return item
50
- .flatMap((e) => {
51
- if (e.type == i.InstructionType.TimelineAddEntries) {
52
- return [];
53
- } else if (e.type == i.InstructionType.TimelineAddToModule) {
54
- const item = (e as i.TimelineAddToModule).moduleItems ?? [];
55
- return moduleConverter(item);
56
- } else if (e.type == i.InstructionType.TimelineReplaceEntry) {
57
- return [];
58
- }
59
- return [];
60
- })
61
- .filter((e): e is NonNullable<typeof e> => e != undefined)
62
- .flat();
63
- };
64
-
65
- export const tweetEntriesConverter = (item: i.TimelineAddEntry[]): TweetApiUtilsData[] => {
66
- return item
67
- .map((e) => {
68
- if (e.content.entryType == i.ContentEntryType.TimelineTimelineItem) {
69
- const item = (e.content as i.TimelineTimelineItem).itemContent;
70
- const timeline = item.itemType == i.ContentItemType.TimelineTweet ? (item as i.TimelineTweet) : undefined;
71
- if (timeline == undefined) return undefined;
72
- return [
73
- buildTweetApiUtils({
74
- result: timeline.tweetResults,
75
- promotedMetadata: timeline.promotedMetadata,
76
- }),
77
- ];
78
- } else if (e.content.entryType == i.ContentEntryType.TimelineTimelineModule) {
79
- const item = (e.content as i.TimelineTimelineModule).items ?? [];
80
- return moduleConverter(item);
81
- }
82
- })
83
- .filter((e): e is NonNullable<typeof e> => e != undefined)
84
- .map((e) => e.filter((e): e is NonNullable<typeof e> => e != undefined))
85
- .flat();
86
- };
87
-
88
- export const moduleConverter = (item: i.ModuleItem[]): TweetApiUtilsData[] => {
89
- const timelineList = item
90
- .filter((e) => e.item.itemContent.itemType == i.ContentItemType.TimelineTweet)
91
- .map((e) => e.item.itemContent as i.TimelineTweet);
92
- if (timelineList.length == 0) return [];
93
-
94
- if (timelineList[0].tweetDisplayType == i.TimelineTweetTweetDisplayTypeEnum.MediaGrid) {
95
- return timelineList
96
- .map((e) =>
97
- buildTweetApiUtils({
98
- result: e.tweetResults,
99
- promotedMetadata: e.promotedMetadata,
100
- }),
101
- )
102
- .filter((e): e is NonNullable<typeof e> => e != undefined);
103
- } else {
104
- const timeline = timelineList[0];
105
- return [
106
- buildTweetApiUtils({
107
- result: timeline.tweetResults,
108
- promotedMetadata: timeline.promotedMetadata,
109
- reply: timelineList.slice(1),
110
- }),
111
- ].filter((e): e is NonNullable<typeof e> => e != undefined);
112
- }
113
- };
114
-
115
- type buildTweetApiUtilsArgs = {
116
- result: i.ItemResult;
117
- promotedMetadata?: any;
118
- reply?: i.TimelineTweet[];
119
- };
120
- export const buildTweetApiUtils = (args: buildTweetApiUtilsArgs): TweetApiUtilsData | undefined => {
121
- const tweet = tweetResultsConverter(args.result);
122
- if (tweet == undefined) return undefined;
123
- const result = tweet.core?.userResults.result;
124
- const user = result && userOrNullConverter(result);
125
- if (user == undefined) return undefined;
126
- const quoted = tweet.quotedStatusResult;
127
- const retweeted = tweet.legacy?.retweetedStatusResult;
128
-
129
- const reply =
130
- args.reply
131
- ?.map((e) => buildTweetApiUtils({ result: e.tweetResults, promotedMetadata: e.promotedMetadata }))
132
- .filter((e): e is NonNullable<typeof e> => e != undefined) ?? [];
133
- return {
134
- raw: args.result,
135
- promotedMetadata: args.promotedMetadata,
136
- tweet: tweet,
137
- user: user,
138
- replies: reply,
139
- retweeted: retweeted == undefined ? undefined : buildTweetApiUtils({ result: retweeted }),
140
- quoted: quoted == undefined ? undefined : buildTweetApiUtils({ result: quoted }),
141
- };
142
- };
143
-
144
- export const tweetResultsConverter = (tweetResults: i.ItemResult): i.Tweet | undefined => {
145
- if (tweetResults.result == undefined) return undefined;
146
- switch (tweetResults.result.typename) {
147
- case i.TypeName.Tweet:
148
- return tweetResults.result as i.Tweet;
149
- case i.TypeName.TweetWithVisibilityResults:
150
- return (tweetResults.result as i.TweetWithVisibilityResults).tweet;
151
- case i.TypeName.TweetTombstone:
152
- return undefined;
153
- }
154
- };
155
-
156
- export const userOrNullConverter = (userResults: i.UserUnion): i.User | undefined => {
157
- if (userResults.typename == i.TypeName.User) {
158
- return userResults as i.User;
159
- }
160
- };
161
-
162
- export const userEntriesConverter = (item: i.TimelineAddEntry[]): i.UserResults[] => {
163
- return item
164
- .map((e) => {
165
- if (e.content.typename == i.TypeName.TimelineTimelineItem) {
166
- const item = (e.content as i.TimelineTimelineItem).itemContent;
167
- if (item.itemType == i.ContentItemType.TimelineUser) {
168
- return (item as i.TimelineUser).userResults;
169
- }
170
- }
171
- })
172
- .filter((e): e is NonNullable<typeof e> => e != undefined);
173
- };
174
-
175
- const a = (a: string) => {
176
- return a;
177
- };
178
-
179
- export const userResultConverter = (user: i.UserResults[]): UserApiUtilsData[] => {
180
- return user
181
- .map((e) => {
182
- const user = e.result && userOrNullConverter(e.result);
183
- if (user == undefined) return undefined;
184
- return {
185
- raw: e,
186
- user: user,
187
- };
188
- })
189
- .filter((e): e is NonNullable<typeof e> => e != undefined);
190
- };
191
-
192
- export const entriesCursor = (item: i.TimelineAddEntry[]): CursorApiUtilsResponse => {
193
- const cursorList = item
194
- .map((e) => {
195
- if (e.content.entryType == i.ContentEntryType.TimelineTimelineCursor) {
196
- return e.content as i.TimelineTimelineCursor;
197
- } else if (e.content.entryType == i.ContentEntryType.TimelineTimelineItem) {
198
- const item = e.content as i.TimelineTimelineItem;
199
- if (item.itemContent.itemType == i.ContentItemType.TimelineTimelineCursor) {
200
- return item.itemContent as i.TimelineTimelineCursor;
201
- }
202
- }
203
- })
204
- .filter((e): e is NonNullable<typeof e> => e != undefined);
205
- return buildCursor(cursorList);
206
- };
207
-
208
- export const buildCursor = (cursorList: i.TimelineTimelineCursor[]): CursorApiUtilsResponse => {
209
- return {
210
- top: cursorList.find((e) => e.cursorType == i.CursorType.Top),
211
- bottom: cursorList.find((e) => e.cursorType == i.CursorType.Bottom),
212
- };
213
- };
214
-
215
- export const buildHeader = (headers: Headers): ApiUtilsHeader => {
216
- return {
217
- raw: headers,
218
- connectionHash: headers.get('x-connection-hash')!,
219
- contentTypeOptions: headers.get('x-content-type-options')!,
220
- frameOptions: headers.get('x-frame-options')!,
221
- rateLimitLimit: Number(headers.get('x-rate-limit-limit') ?? 0),
222
- rateLimitRemaining: Number(headers.get('x-rate-limit-remaining') ?? 0),
223
- rateLimitReset: Number(headers.get('x-rate-limit-reset') ?? 0),
224
- responseTime: Number(headers.get('x-response-time')),
225
- tfePreserveBody: headers.get('x-tfe-preserve-body') == 'true',
226
- transactionId: headers.get('x-transaction-id')!,
227
- twitterResponseTags: headers.get('x-twitter-response-tags')!,
228
- xssProtection: Number(headers.get('x-xss-protection')),
229
- };
230
- };
@@ -1 +0,0 @@
1
- export * from './api';
@@ -1,15 +0,0 @@
1
- import { getClient } from '@test/init';
2
- import { DefaultApi } from 'twitter-openapi-typescript-generated';
3
-
4
- test('test auth', async () => {
5
- const client = await getClient();
6
- const that = client.getDefaultApi();
7
- const fn = DefaultApi.prototype['request'].bind(that.api);
8
-
9
- DefaultApi.prototype['request'] = (...args) => {
10
- console.log('request', args);
11
- return fn(...args);
12
- };
13
- const response = await that.getProfileSpotlightsQuery({ screenName: 'elonmusk' });
14
- console.log(response);
15
- });
@@ -1,21 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
- import { printTweet } from '@test/util';
3
-
4
- test('getProfileSpotlightsQuery', async () => {
5
- logger.log('getProfileSpotlightsQuery');
6
- const client = await getClient();
7
- const response = await client.getDefaultApi().getProfileSpotlightsQuery({ screenName: 'elonmusk' });
8
- const legacy = response.data.result.legacy;
9
- logger.log(legacy.screenName ?? 'undefined');
10
- logger.log(`followedBy: ${legacy.followedBy} following: ${legacy.following}`);
11
- logger.log('┄'.repeat(50));
12
- expect(response.raw.response.ok).toBe(true);
13
- });
14
-
15
- test('getTweetResultByRestId', async () => {
16
- logger.log('getTweetResultByRestId');
17
- const client = await getClient();
18
- const response = await client.getDefaultApi().getTweetResultByRestId({ tweetId: '1349129669258448897' });
19
- printTweet(response.data!);
20
- expect(response.raw.response.ok).toBe(true);
21
- });
@@ -1,10 +0,0 @@
1
- import { getGuestClient, logger } from '@test/init';
2
- import { printTweet } from '@test/util';
3
-
4
- test('getGuestTweetResultByRestId', async () => {
5
- logger.log('getGuestTweetResultByRestId');
6
- const client = await getGuestClient();
7
- const response = await client.getDefaultApi().getTweetResultByRestId({ tweetId: '1349129669258448897' });
8
- printTweet(response.data!);
9
- expect(response.raw.response.ok).toBe(true);
10
- });
@@ -1,61 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
-
3
- test('postCreateTweet', async () => {
4
- logger.log('postCreateTweet');
5
- const client = await getClient();
6
- const time = new Date().toISOString();
7
- const response = await client.getPostApi().postCreateTweet({ tweetText: `Test[${time}]` });
8
- expect(response.raw.response.ok).toBe(true);
9
- });
10
-
11
- test('postCreateReplyTweet', async () => {
12
- logger.log('postCreateTweet');
13
- const client = await getClient();
14
- const time = new Date().toISOString();
15
- const response = await client.getPostApi().postCreateTweet({
16
- tweetText: `Test[${time}]`,
17
- inReplyToTweetId: '1788174612037320809',
18
- });
19
- expect(response.raw.response.ok).toBe(true);
20
- });
21
-
22
- test('postDeleteTweet', async () => {
23
- logger.log('postDeleteTweet');
24
- const client = await getClient();
25
- const time = new Date().toISOString();
26
- const response = await client.getPostApi().postCreateTweet({ tweetText: `Test[${time}]` });
27
- expect(response.raw.response.ok).toBe(true);
28
- const tweetId = response.data.data.createTweet.tweetResults.result.restId;
29
- logger.log(tweetId);
30
-
31
- const response2 = await client.getPostApi().postDeleteTweet({ tweetId: tweetId });
32
- expect(response2.raw.response.ok).toBe(true);
33
- });
34
-
35
- test('postCreateRetweet', async () => {
36
- logger.log('postCreateRetweet');
37
- const client = await getClient();
38
- const response = await client.getPostApi().postCreateRetweet({ tweetId: '1349129669258448897' });
39
- expect(response.raw.response.ok).toBe(true);
40
- });
41
-
42
- test('postDeleteRetweet', async () => {
43
- logger.log('postDeleteRetweet');
44
- const client = await getClient();
45
- const response = await client.getPostApi().postDeleteRetweet({ sourceTweetId: '1349129669258448897' });
46
- expect(response.raw.response.ok).toBe(true);
47
- });
48
-
49
- test('postFavoriteTweet', async () => {
50
- logger.log('postFavoriteTweet');
51
- const client = await getClient();
52
- const response = await client.getPostApi().postFavoriteTweet({ tweetId: '1349129669258448897' });
53
- expect(response.raw.response.ok).toBe(true);
54
- });
55
-
56
- test('postUnfavoriteTweet', async () => {
57
- logger.log('postUnfavoriteTweet');
58
- const client = await getClient();
59
- const response = await client.getPostApi().postUnfavoriteTweet({ tweetId: '1349129669258448897' });
60
- expect(response.raw.response.ok).toBe(true);
61
- });
@@ -1,82 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
- import { printTweet } from '@test/util';
3
-
4
- test('getTweetDetail', async () => {
5
- logger.log('getTweetDetail');
6
- const client = await getClient();
7
- const response = await client.getTweetApi().getTweetDetail({ focalTweetId: '1349129669258448897' });
8
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
9
- expect(response.raw.response.ok).toBe(true);
10
- });
11
-
12
- test('getSearchTimeline', async () => {
13
- logger.log('getSearchTimeline');
14
- const client = await getClient();
15
- const response = await client.getTweetApi().getSearchTimeline({ rawQuery: 'elonmusk' });
16
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
17
- expect(response.raw.response.ok).toBe(true);
18
- });
19
-
20
- test('getHomeTimeline', async () => {
21
- logger.log('getHomeTimeline');
22
- const client = await getClient();
23
- const response = await client.getTweetApi().getHomeTimeline();
24
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
25
- expect(response.raw.response.ok).toBe(true);
26
- });
27
-
28
- test('getHomeLatestTimeline', async () => {
29
- logger.log('getHomeLatestTimeline');
30
- const client = await getClient();
31
- const response = await client.getTweetApi().getHomeLatestTimeline();
32
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
33
- expect(response.raw.response.ok).toBe(true);
34
- });
35
-
36
- test('getListLatestTweetsTimeline', async () => {
37
- logger.log('getListLatestTweetsTimeline');
38
- const client = await getClient();
39
- const response = await client.getTweetApi().getListLatestTweetsTimeline({ listId: '1141162794290520064' });
40
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
41
- expect(response.raw.response.ok).toBe(true);
42
- });
43
-
44
- test('getUserTweets', async () => {
45
- logger.log('getUserTweets');
46
- const client = await getClient();
47
- const response = await client.getTweetApi().getUserTweets({ userId: '44196397' });
48
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
49
- expect(response.raw.response.ok).toBe(true);
50
- });
51
-
52
- test('getUserTweetsAndReplies', async () => {
53
- logger.log('getUserTweetsAndReplies');
54
- const client = await getClient();
55
- const response = await client.getTweetApi().getUserTweetsAndReplies({ userId: '44196397' });
56
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
57
- expect(response.raw.response.ok).toBe(true);
58
- });
59
-
60
- test('getUserMedia', async () => {
61
- logger.log('getUserMedia');
62
- const client = await getClient();
63
- const response = await client.getTweetApi().getUserMedia({ userId: '44196397' });
64
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
65
- expect(response.raw.response.ok).toBe(true);
66
- });
67
-
68
- test('getLikes', async () => {
69
- logger.log('getLikes');
70
- const client = await getClient();
71
- const response = await client.getTweetApi().getLikes({ userId: '1787148517779406848' }); //@ptcpz3
72
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
73
- expect(response.raw.response.ok).toBe(true);
74
- });
75
-
76
- test('getBookmarks', async () => {
77
- logger.log('getBookmarks');
78
- const client = await getClient();
79
- const response = await client.getTweetApi().getBookmarks();
80
- response.data.data.filter((e) => !e.promotedMetadata).forEach((e) => printTweet(e));
81
- expect(response.raw.response.ok).toBe(true);
82
- });
@@ -1,33 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
- import { printUser } from '@test/util';
3
-
4
- test('getUserByScreenName', async () => {
5
- logger.log('getUserByScreenName');
6
- const client = await getClient();
7
- const response = await client.getUserApi().getUserByScreenName({ screenName: 'elonmusk' });
8
- printUser(response.data);
9
- expect(response.raw.response.ok).toBe(true);
10
- });
11
-
12
- test('getUserByScreenNameNotFound', async () => {
13
- logger.log('getUserByScreenName');
14
- const client = await getClient();
15
- const response = client.getUserApi().getUserByScreenName({ screenName: 'Wendoleecs' });
16
- expect(response).rejects.toThrow(Error);
17
- });
18
-
19
- test('getUserByScreenNameFreezed', async () => {
20
- logger.log('getUserByScreenName');
21
- const client = await getClient();
22
- const response = await client.getUserApi().getUserByScreenName({ screenName: 'anal' });
23
- printUser(response.data);
24
- expect(response.raw.response.ok).toBe(true);
25
- });
26
-
27
- test('getUserByRestId', async () => {
28
- logger.log('getUserByRestId');
29
- const client = await getClient();
30
- const response = await client.getUserApi().getUserByRestId({ userId: '44196397' });
31
- printUser(response.data);
32
- expect(response.raw.response.ok).toBe(true);
33
- });
@@ -1,42 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
- import { printUser } from '@test/util';
3
-
4
- test('getFollowers', async () => {
5
- logger.log('getFollowers');
6
- const client = await getClient();
7
- const response = await client.getUserListApi().getFollowers({ userId: '44196397' });
8
- response.data.data.forEach((e) => printUser(e));
9
- expect(response.raw.response.ok).toBe(true);
10
- });
11
-
12
- test('getFollowing', async () => {
13
- logger.log('getFollowing');
14
- const client = await getClient();
15
- const response = await client.getUserListApi().getFollowing({ userId: '44196397' });
16
- response.data.data.forEach((e) => printUser(e));
17
- expect(response.raw.response.ok).toBe(true);
18
- });
19
-
20
- test('getFollowersYouKnow', async () => {
21
- logger.log('getFollowersYouKnow');
22
- const client = await getClient();
23
- const response = await client.getUserListApi().getFollowersYouKnow({ userId: '44196397' });
24
- response.data.data.forEach((e) => printUser(e));
25
- expect(response.raw.response.ok).toBe(true);
26
- });
27
-
28
- test('getFavoriters', async () => {
29
- logger.log('getFavoriters');
30
- const client = await getClient();
31
- const response = await client.getUserListApi().getFavoriters({ tweetId: '1811571695544860784' });
32
- response.data.data.forEach((e) => printUser(e));
33
- expect(response.raw.response.ok).toBe(true);
34
- });
35
-
36
- test('getRetweeters', async () => {
37
- logger.log('getRetweeters');
38
- const client = await getClient();
39
- const response = await client.getUserListApi().getRetweeters({ tweetId: '1349129669258448897' });
40
- response.data.data.forEach((e) => printUser(e));
41
- expect(response.raw.response.ok).toBe(true);
42
- });
@@ -1,12 +0,0 @@
1
- import { getClient, logger } from '@test/init';
2
- import { printLegacyUser } from '@test/util';
3
-
4
- test('getUserByRestId', async () => {
5
- logger.log('getUserByRestId');
6
- const client = await getClient();
7
- const response = await client.getUsersApi().getUsersByRestIds({ userIds: ['44196397'] });
8
- response.data.forEach((e) => {
9
- e.user && printLegacyUser(e.user.legacy);
10
- });
11
- expect(response.raw.response.ok).toBe(true);
12
- });
@@ -1,13 +0,0 @@
1
- import { getClient } from '@test/init';
2
-
3
- test('postCreateFriendships', async () => {
4
- const client = await getClient();
5
- const response = await client.getV11PostApi().postCreateFriendships({ userId: '44196397' });
6
- expect(response.raw.response.ok).toBe(true);
7
- });
8
-
9
- test('postDestroyFriendships', async () => {
10
- const client = await getClient();
11
- const response = await client.getV11PostApi().postDestroyFriendships({ userId: '44196397' });
12
- expect(response.raw.response.ok).toBe(true);
13
- });
package/test/init.ts DELETED
@@ -1,50 +0,0 @@
1
- import { TwitterOpenApi } from '@/api';
2
- import { promises as fs } from 'fs';
3
- import * as log4js from 'log4js';
4
-
5
- export const logger = log4js
6
- .configure({
7
- appenders: {
8
- system: {
9
- type: 'file',
10
- filename: 'logs/test.log',
11
- layout: {
12
- type: 'pattern',
13
- pattern: '[%d{hh:mm:ss}] [%p] %m',
14
- },
15
- },
16
- },
17
- categories: {
18
- default: { appenders: ['system'], level: 'all' },
19
- },
20
- })
21
- .getLogger('Test');
22
-
23
- export type Cookie = {
24
- name: string;
25
- domain: string;
26
- value: string;
27
- };
28
-
29
- export const getClient = async () => {
30
- const api = new TwitterOpenApi();
31
- api.setAdditionalApiHeaders({
32
- 'sec-ch-ua-platform': '"Windows"',
33
- });
34
- api.setAdditionalApiHeaders({
35
- 'sec-ch-ua-platform': '"Windows"',
36
- });
37
- const data = await fs.readFile('cookies.json', 'utf-8');
38
- const parsed = JSON.parse(data);
39
- const cookies = parsed as Cookie[];
40
- const json = Object.fromEntries(
41
- cookies.filter((e) => ['.twitter.com', '.x.com'].includes(e.domain)).map((e) => [e.name, e.value]),
42
- );
43
- const client = await api.getClientFromCookies(json);
44
- return client;
45
- };
46
- export const getGuestClient = async () => {
47
- const api = new TwitterOpenApi();
48
- const client = await api.getGuestClient();
49
- return client;
50
- };
@@ -1,12 +0,0 @@
1
- import { getClient } from '@test/init';
2
-
3
- test('getHomeTimelineRaw', async () => {
4
- const client = await getClient();
5
- const response = await client.getTweetApi().api.getHomeTimelineRaw({
6
- pathQueryId: client.flag.HomeTimeline.queryId,
7
- variables: JSON.stringify(client.flag.HomeTimeline.variables),
8
- features: JSON.stringify(client.flag.HomeTimeline.features),
9
- });
10
- const value = await response.value();
11
- expect(response.raw.ok).toBe(true);
12
- });