Handling refresh token

This commit is contained in:
Zoe Roux
2022-03-06 00:27:19 +01:00
parent 3479a69bd1
commit c35d82646d
+27
View File
@@ -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']