diff --git a/packages/backend/src/apps/twitter/actions.ts b/packages/backend/src/apps/twitter/actions.ts index 35e9bef2..2b3aa93d 100644 --- a/packages/backend/src/apps/twitter/actions.ts +++ b/packages/backend/src/apps/twitter/actions.ts @@ -1,10 +1,12 @@ +import TwitterClient from './client'; import CreateTweet from './actions/create-tweet'; -import { IJSONObject } from '@automatisch/types'; export default class Actions { + client: TwitterClient; createTweet: CreateTweet; - constructor(connectionData: IJSONObject, parameters: IJSONObject) { - this.createTweet = new CreateTweet(connectionData, parameters); + constructor(client: TwitterClient) { + this.client = client; + this.createTweet = new CreateTweet(client); } } diff --git a/packages/backend/src/apps/twitter/actions/create-tweet.ts b/packages/backend/src/apps/twitter/actions/create-tweet.ts index 2e7eff40..76a1560d 100644 --- a/packages/backend/src/apps/twitter/actions/create-tweet.ts +++ b/packages/backend/src/apps/twitter/actions/create-tweet.ts @@ -1,23 +1,17 @@ -import TwitterApi, { TwitterApiTokens } from 'twitter-api-v2'; -import { IJSONObject } from '@automatisch/types'; +import TwitterClient from '../client'; export default class CreateTweet { - client: TwitterApi; - parameters: IJSONObject; + client: TwitterClient; - constructor(connectionData: IJSONObject, parameters: IJSONObject) { - this.client = new TwitterApi({ - appKey: connectionData.consumerKey, - appSecret: connectionData.consumerSecret, - accessToken: connectionData.accessToken, - accessSecret: connectionData.accessSecret, - } as TwitterApiTokens); - - this.parameters = parameters; + constructor(client: TwitterClient) { + this.client = client; } async run() { - const tweet = await this.client.v1.tweet(this.parameters.tweet as string); - return tweet; + const response = await this.client.createTweet.run( + this.client.parameters.tweet as string + ); + + return response.data.data; } } diff --git a/packages/backend/src/apps/twitter/client/endpoints/create-tweet.ts b/packages/backend/src/apps/twitter/client/endpoints/create-tweet.ts new file mode 100644 index 00000000..130732ee --- /dev/null +++ b/packages/backend/src/apps/twitter/client/endpoints/create-tweet.ts @@ -0,0 +1,38 @@ +import TwitterClient from '../index'; + +export default class CreateTweet { + client: TwitterClient; + + constructor(client: TwitterClient) { + this.client = client; + } + + async run(text: string) { + try { + const token = { + key: this.client.connectionData.accessToken as string, + secret: this.client.connectionData.accessSecret as string, + }; + + const requestData = { + url: `${TwitterClient.baseUrl}/2/tweets`, + method: 'POST', + }; + + const authHeader = this.client.oauthClient.toHeader( + this.client.oauthClient.authorize(requestData, token) + ); + + const response = await this.client.httpClient.post( + `/2/tweets`, + { text }, + { headers: { ...authHeader } } + ); + + return response; + } catch (error) { + const errorMessage = error.response.data.detail; + throw new Error(`Error occured while creating a tweet: ${errorMessage}`); + } + } +} diff --git a/packages/backend/src/apps/twitter/client/index.ts b/packages/backend/src/apps/twitter/client/index.ts index d06d9c95..2a384d7a 100644 --- a/packages/backend/src/apps/twitter/client/index.ts +++ b/packages/backend/src/apps/twitter/client/index.ts @@ -7,6 +7,7 @@ import VerifyAccessToken from './endpoints/verify-access-token'; import GetCurrentUser from './endpoints/get-current-user'; import GetUserByUsername from './endpoints/get-user-by-username'; import GetUserTweets from './endpoints/get-user-tweets'; +import CreateTweet from './endpoints/create-tweet'; export default class TwitterClient { appData: IApp; @@ -20,6 +21,7 @@ export default class TwitterClient { getCurrentUser: GetCurrentUser; getUserByUsername: GetUserByUsername; getUserTweets: GetUserTweets; + createTweet: CreateTweet; static baseUrl = 'https://api.twitter.com'; @@ -55,5 +57,6 @@ export default class TwitterClient { this.getCurrentUser = new GetCurrentUser(this); this.getUserByUsername = new GetUserByUsername(this); this.getUserTweets = new GetUserTweets(this); + this.createTweet = new CreateTweet(this); } } diff --git a/packages/backend/src/apps/twitter/index.ts b/packages/backend/src/apps/twitter/index.ts index 2c0fc8a8..e2f1d5c8 100644 --- a/packages/backend/src/apps/twitter/index.ts +++ b/packages/backend/src/apps/twitter/index.ts @@ -25,6 +25,6 @@ export default class Twitter implements IService { this.authenticationClient = new Authentication(this.client); this.triggers = new Triggers(this.client); - // this.actions = new Actions(connectionData, parameters); + this.actions = new Actions(this.client); } }