diff --git a/packages/backend/src/apps/twitter/actions/create-tweet/index.ts b/packages/backend/src/apps/twitter/actions/create-tweet/index.ts new file mode 100644 index 00000000..17da5737 --- /dev/null +++ b/packages/backend/src/apps/twitter/actions/create-tweet/index.ts @@ -0,0 +1,48 @@ +import { IActionOutput } from '@automatisch/types'; +import defineAction from '../../../../helpers/define-action'; + +export default defineAction({ + name: 'Create Tweet', + key: 'createTweet', + description: 'Create a tweet.', + substeps: [ + { + key: 'chooseConnection', + name: 'Choose connection', + }, + { + key: 'chooseAction', + name: 'Set up action', + arguments: [ + { + label: 'Tweet body', + key: 'tweet', + type: 'string', + required: true, + description: 'The content of your new tweet.', + variables: true, + }, + ], + }, + { + key: 'testStep', + name: 'Test action', + }, + ], + + async run($) { + const text = $.step.parameters.tweet; + const response = await $.http.post('/2/tweets', { + text, + }); + + const tweet: IActionOutput = { + data: { + raw: response.data, + }, + error: response?.integrationError, + }; + + return tweet; + }, +}); diff --git a/packages/backend/src/apps/twitter/common/add-auth-header.ts b/packages/backend/src/apps/twitter/common/add-auth-header.ts index 86b35f00..e21d637b 100644 --- a/packages/backend/src/apps/twitter/common/add-auth-header.ts +++ b/packages/backend/src/apps/twitter/common/add-auth-header.ts @@ -1,7 +1,13 @@ import { Token } from 'oauth-1.0a'; -import { TBeforeRequest } from '@automatisch/types'; +import { IJSONObject, TBeforeRequest } from '@automatisch/types'; import oauthClient from './oauth-client'; +type RequestDataType = { + url: string; + method: string; + data?: IJSONObject; +}; + const addAuthHeader: TBeforeRequest = ($, requestConfig) => { const { url, method, data } = requestConfig; @@ -10,12 +16,15 @@ const addAuthHeader: TBeforeRequest = ($, requestConfig) => { secret: $.auth.data?.accessSecret as string, }; - const requestData = { + const requestData: RequestDataType = { url: `${requestConfig.baseURL}${url}`, method, - data, }; + if (url === '/oauth/request_token') { + requestData.data = data; + } + const authHeader = oauthClient($).toHeader( oauthClient($).authorize(requestData, token) );