Skip to content

Commit 6cfd48c

Browse files
committed
add post tweet
Signed-off-by: ふぁ <yuki@yuki0311.com>
1 parent 5f1e9fa commit 6cfd48c

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

twitter-openapi-typescript/src/apis/postApi.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import * as i from 'twitter-openapi-typescript-generated';
22
import { DefaultFlag } from '@/types';
3+
import { buildHeader, entriesCursor } from '@/models/api';
4+
import { TwitterApiUtilsResponse } from '@/types/response';
5+
6+
type PostCreateTweetParam = {
7+
tweetText: string;
8+
};
39

410
export class PostApiUtils {
511
api: i.PostApi;
@@ -9,4 +15,42 @@ export class PostApiUtils {
915
this.api = api;
1016
this.flag = flag;
1117
}
18+
19+
mergeDefaultValue<T>(defaultValue: T | undefined, value: T | undefined): T {
20+
if (value == undefined) return defaultValue;
21+
if (defaultValue == undefined) return value;
22+
if (typeof defaultValue === 'object') {
23+
if (Array.isArray(value)) {
24+
return value.map((v) => this.mergeDefaultValue(defaultValue[0], v)) as T;
25+
} else {
26+
const key = [...Object.keys(defaultValue), ...Object.keys(value)];
27+
return key.reduce((v, k) => ({ ...v, [k]: this.mergeDefaultValue(defaultValue[k], value[k]) }), <T>{});
28+
}
29+
}
30+
return value;
31+
}
32+
33+
async postCreateTweet(param: PostCreateTweetParam): Promise<TwitterApiUtilsResponse<i.CreateTweetResponse>> {
34+
const value = this.mergeDefaultValue(i.PostCreateTweetRequestFromJSON(this.flag.CreateTweet), {
35+
variables: {
36+
tweetText: param.tweetText,
37+
darkRequest: undefined,
38+
media: undefined,
39+
semanticAnnotationIds: undefined,
40+
},
41+
features: undefined,
42+
queryId: undefined,
43+
});
44+
const response = await this.api.postCreateTweetRaw({
45+
postCreateTweetRequest: value,
46+
});
47+
const raw = {
48+
response: response.raw,
49+
};
50+
return {
51+
raw: raw,
52+
header: buildHeader(response.raw.headers),
53+
data: await response.value(),
54+
};
55+
}
1256
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { ApiUtilsHeader } from '@/types';
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+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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 text = `Tweets from twitter-openapi-typescript🎉\n${time}`;
8+
const response = await client.getPostApi().postCreateTweet({ tweetText: text });
9+
expect(0).toBe(0);
10+
});

0 commit comments

Comments
 (0)