mirror of
https://github.com/zoriya/Aeris.git
synced 2026-06-04 19:26:40 +00:00
Handling refresh token
This commit is contained in:
@@ -14,6 +14,28 @@ export class Twitter extends BaseService {
|
||||
this._twitter = new TwitterApi(pipeline.userData["Twitter"].accessToken);
|
||||
}
|
||||
|
||||
private async _refreshIfNeeded(): Promise<void> {
|
||||
if (Date.parse(this._pipeline.userData["Twitter"].expiresAt) >= Date.now() + 100_000)
|
||||
return;
|
||||
const ret = await (new TwitterApi({
|
||||
clientId: process.env["TWITTER_CLIENT_ID"],
|
||||
clientSecret: process.env["TWITTER_SECRET"],
|
||||
})).refreshOAuth2Token(this._pipeline.userData["Twitter"].refreshToken);
|
||||
const data = this._pipeline.userData["Twitter"];
|
||||
this._twitter = ret.client;
|
||||
data.accessToken = ret.accessToken;
|
||||
if (ret.refreshToken)
|
||||
data.refreshToken = ret.refreshToken;
|
||||
data.expiresAt = new Date(Date.now() + ret.expiresIn * 1000).toISOString();
|
||||
fetch(`${process.env["WORKER_API_URL"]}/twitter/${this._pipeline.userId}?WORKER_API_KEY=${process.env["WORKER_API_KEY"]}`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
}
|
||||
|
||||
// private async _createStream(): Promise<TweetStream> {
|
||||
// const stream = await this._.v2.sampleStream();
|
||||
// stream.on(ETwitterStreamEvent.Connected, () => console.log('Stream is started.'));
|
||||
@@ -38,6 +60,7 @@ export class Twitter extends BaseService {
|
||||
|
||||
@reaction(ReactionType.FollowUser, ['user_name'])
|
||||
async followUser(params: any): Promise<PipelineEnv> {
|
||||
await this._refreshIfNeeded();
|
||||
let user = await this._twitter.v2.userByUsername(params['user_name']);
|
||||
const me = (await this._twitter.v2.me()).data.id;
|
||||
this._twitter.v2.follow(me, user.data.id);
|
||||
@@ -51,6 +74,7 @@ export class Twitter extends BaseService {
|
||||
|
||||
@reaction(ReactionType.PostTweet, ['tweet_content'])
|
||||
async postTweet(params: any): Promise<PipelineEnv> {
|
||||
await this._refreshIfNeeded();
|
||||
let tweet = await this._twitter.v2.tweet(params['tweet_content']);
|
||||
return {
|
||||
TWEET_ID: tweet.data.id,
|
||||
@@ -60,6 +84,7 @@ export class Twitter extends BaseService {
|
||||
|
||||
@reaction(ReactionType.ReplyToTweet, ['tweet_id', 'reply_body'])
|
||||
async replyToTweet(params: any): Promise<PipelineEnv> {
|
||||
await this._refreshIfNeeded();
|
||||
let reply = await this._twitter.v2.reply(
|
||||
params['reply_body'],
|
||||
params['tweet_id'],
|
||||
@@ -73,6 +98,7 @@ export class Twitter extends BaseService {
|
||||
|
||||
@reaction(ReactionType.LikeTweet, ['tweet_id'])
|
||||
async likeTweet(params: any): Promise<PipelineEnv> {
|
||||
await this._refreshIfNeeded();
|
||||
const me = (await this._twitter.v2.me()).data.id;
|
||||
await this._twitter.v2.like(me, params['tweet_id']);
|
||||
let tweet = (await this._twitter.v2.tweets([params['tweet_id']])).data[0];
|
||||
@@ -85,6 +111,7 @@ export class Twitter extends BaseService {
|
||||
|
||||
@reaction(ReactionType.Retweet, ['tweet_id'])
|
||||
async retweet(params: any): Promise<PipelineEnv> {
|
||||
await this._refreshIfNeeded();
|
||||
let tweet = await this._twitter.v2.retweet((await this._twitter.v2.me()).data.id, params['tweet_id']);
|
||||
return {
|
||||
TWEET_ID: params['tweet_id']
|
||||
|
||||
Reference in New Issue
Block a user