UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

254 lines 12.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TwitterV2 = void 0; const iso_639_1_1 = __importDefault(require("iso-639-1")); const luxon_1 = require("luxon"); const n8n_workflow_1 = require("n8n-workflow"); const DirectMessageDescription_1 = require("./DirectMessageDescription"); const GenericFunctions_1 = require("./GenericFunctions"); const ListDescription_1 = require("./ListDescription"); const TweetDescription_1 = require("./TweetDescription"); const UserDescription_1 = require("./UserDescription"); class TwitterV2 { description; constructor(baseDescription) { this.description = { ...baseDescription, version: 2, description: 'Post, like, and search tweets, send messages, search users, and add users to lists', subtitle: '={{$parameter["operation"] + ":" + $parameter["resource"]}}', defaults: { name: 'X', }, usableAsTool: true, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'twitterOAuth2Api', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Direct Message', value: 'directMessage', description: 'Send a direct message to a user', }, { name: 'List', value: 'list', description: 'Add a user to a list', }, { name: 'Tweet', value: 'tweet', description: 'Create, like, search, or delete a tweet', }, { name: 'User', value: 'user', description: 'Search users by username', }, ], default: 'tweet', }, // DIRECT MESSAGE ...DirectMessageDescription_1.directMessageOperations, ...DirectMessageDescription_1.directMessageFields, // LIST ...ListDescription_1.listOperations, ...ListDescription_1.listFields, // TWEET ...TweetDescription_1.tweetOperations, ...TweetDescription_1.tweetFields, // USER ...UserDescription_1.userOperations, ...UserDescription_1.userFields, ], }; } methods = { loadOptions: { // Get all the available languages to display them to user so that they can // select them easily async getLanguages() { const returnData = []; const languages = iso_639_1_1.default.getAllNames(); for (const language of languages) { const languageName = language; const languageId = iso_639_1_1.default.getCode(language); returnData.push({ name: languageName, value: languageId, }); } return returnData; }, }, }; async execute() { const items = this.getInputData(); const returnData = []; const length = items.length; let responseData; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); for (let i = 0; i < length; i++) { try { if (resource === 'user') { if (operation === 'searchUser') { const me = this.getNodeParameter('me', i, false); if (me) { responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'GET', '/users/me', {}); } else { const userRlc = this.getNodeParameter('user', i, undefined, {}); if (userRlc.mode === 'username') { userRlc.value = userRlc.value.includes('@') ? userRlc.value.replace('@', '') : userRlc.value; responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'GET', `/users/by/username/${userRlc.value}`, {}); } else if (userRlc.mode === 'id') { responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'GET', `/users/${userRlc.value}`, {}); } } } } if (resource === 'tweet') { if (operation === 'search') { const searchText = this.getNodeParameter('searchText', i, '', {}); const returnAll = this.getNodeParameter('returnAll', i); const { sortOrder, startTime, endTime, tweetFieldsObject } = this.getNodeParameter('additionalFields', i, {}); const qs = { query: searchText, }; if (endTime) { const endTimeISO = luxon_1.DateTime.fromISO(endTime).toISO(); qs.end_time = endTimeISO; } if (sortOrder) { qs.sort_order = sortOrder; } if (startTime) { const startTimeISO8601 = luxon_1.DateTime.fromISO(startTime).toISO(); qs.start_time = startTimeISO8601; } if (tweetFieldsObject) { if (tweetFieldsObject.length > 0) { qs['tweet.fields'] = tweetFieldsObject.join(','); } } if (returnAll) { responseData = await GenericFunctions_1.twitterApiRequestAllItems.call(this, 'data', 'GET', '/tweets/search/recent', {}, qs); } else { const limit = this.getNodeParameter('limit', i); qs.max_results = limit; responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'GET', '/tweets/search/recent', {}, qs); } } if (operation === 'create') { const text = this.getNodeParameter('text', i, '', {}); const { location, attachments, inQuoteToStatusId, inReplyToStatusId } = this.getNodeParameter('additionalFields', i, {}); const body = { text, }; if (location) { body.geo = { place_id: location }; } if (attachments) { body.media = { media_ids: [attachments] }; } if (inQuoteToStatusId) { body.quote_tweet_id = (0, GenericFunctions_1.returnId)(inQuoteToStatusId); } if (inReplyToStatusId) { const inReplyToStatusIdValue = { in_reply_to_tweet_id: (0, GenericFunctions_1.returnId)(inReplyToStatusId) }; body.reply = inReplyToStatusIdValue; } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', '/tweets', body); } if (operation === 'delete') { const tweetRLC = this.getNodeParameter('tweetDeleteId', i, '', {}); const tweetId = (0, GenericFunctions_1.returnId)(tweetRLC); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'DELETE', `/tweets/${tweetId}`, {}); } if (operation === 'like') { const tweetRLC = this.getNodeParameter('tweetId', i, '', {}); const tweetId = (0, GenericFunctions_1.returnId)(tweetRLC); const body = { tweet_id: tweetId, }; const user = (await GenericFunctions_1.twitterApiRequest.call(this, 'GET', '/users/me', {})); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/users/${user.id}/likes`, body); } if (operation === 'retweet') { const tweetRLC = this.getNodeParameter('tweetId', i, '', {}); const tweetId = (0, GenericFunctions_1.returnId)(tweetRLC); const body = { tweet_id: tweetId, }; const user = (await GenericFunctions_1.twitterApiRequest.call(this, 'GET', '/users/me', {})); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/users/${user.id}/retweets`, body); } } if (resource === 'list') { if (operation === 'add') { const userRlc = this.getNodeParameter('user', i, '', {}); const userId = userRlc.mode !== 'username' ? (0, GenericFunctions_1.returnId)(userRlc) : await GenericFunctions_1.returnIdFromUsername.call(this, userRlc); const listRlc = this.getNodeParameter('list', i, '', {}); const listId = (0, GenericFunctions_1.returnId)(listRlc); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/lists/${listId}/members`, { user_id: userId, }); } } if (resource === 'directMessage') { if (operation === 'create') { const userRlc = this.getNodeParameter('user', i, '', {}); const user = await GenericFunctions_1.returnIdFromUsername.call(this, userRlc); const text = this.getNodeParameter('text', i, '', {}); const { attachments } = this.getNodeParameter('additionalFields', i, {}, {}); const body = { text, }; if (attachments) { body.attachments = [{ media_id: attachments }]; } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/dm_conversations/with/${user}/messages`, body); } } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { const executionErrorData = { json: { error: error.message, }, }; returnData.push(executionErrorData); continue; } throw error; } } return [returnData]; } } exports.TwitterV2 = TwitterV2; //# sourceMappingURL=TwitterV2.node.js.map