UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

248 lines 12.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TwitterV1 = void 0; const iso_639_1_1 = __importDefault(require("iso-639-1")); const n8n_workflow_1 = require("n8n-workflow"); const DirectMessageDescription_1 = require("./DirectMessageDescription"); const GenericFunctions_1 = require("./GenericFunctions"); const TweetDescription_1 = require("./TweetDescription"); class TwitterV1 { description; constructor(baseDecription) { this.description = { ...baseDecription, version: 1, description: 'Consume Twitter API', subtitle: '={{$parameter["operation"] + ":" + $parameter["resource"]}}', defaults: { name: 'Twitter', }, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'twitterOAuth1Api', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Direct Message', value: 'directMessage', }, { name: 'Tweet', value: 'tweet', }, ], default: 'tweet', }, // DIRECT MESSAGE ...DirectMessageDescription_1.directMessageOperations, ...DirectMessageDescription_1.directMessageFields, // TWEET ...TweetDescription_1.tweetOperations, ...TweetDescription_1.tweetFields, ], }; } 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 === 'directMessage') { //https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event if (operation === 'create') { const userId = this.getNodeParameter('userId', i); const text = this.getNodeParameter('text', i); const additionalFields = this.getNodeParameter('additionalFields', i); const body = { type: 'message_create', message_create: { target: { recipient_id: userId, }, message_data: { text, attachment: {}, }, }, }; if (additionalFields.attachment) { const attachment = additionalFields.attachment; const attachmentProperties = attachment.split(',').map((propertyName) => { return propertyName.trim(); }); const medias = await GenericFunctions_1.uploadAttachments.call(this, attachmentProperties, i); body.message_create.message_data.attachment = { type: 'media', //@ts-ignore media: { id: medias[0].media_id_string }, }; } else { delete body.message_create.message_data.attachment; } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', '/direct_messages/events/new.json', { event: body }); responseData = responseData.event; } } if (resource === 'tweet') { // https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update if (operation === 'create') { const text = this.getNodeParameter('text', i); const additionalFields = this.getNodeParameter('additionalFields', i); const body = { status: text, }; if (additionalFields.inReplyToStatusId) { body.in_reply_to_status_id = additionalFields.inReplyToStatusId; body.auto_populate_reply_metadata = true; } if (additionalFields.attachments) { const attachments = additionalFields.attachments; const attachmentProperties = attachments.split(',').map((propertyName) => { return propertyName.trim(); }); const medias = await GenericFunctions_1.uploadAttachments.call(this, attachmentProperties, i); body.media_ids = medias .map((media) => media.media_id_string) .join(','); } if (additionalFields.possiblySensitive) { body.possibly_sensitive = additionalFields.possiblySensitive; } if (additionalFields.displayCoordinates) { body.display_coordinates = additionalFields.displayCoordinates; } if (additionalFields.locationFieldsUi) { const locationUi = additionalFields.locationFieldsUi; if (locationUi.locationFieldsValues) { const values = locationUi.locationFieldsValues; body.lat = parseFloat(values.latitude); body.long = parseFloat(values.longitude); } } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', '/statuses/update.json', {}, body); } // https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-destroy-id if (operation === 'delete') { const tweetId = this.getNodeParameter('tweetId', i); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/statuses/destroy/${tweetId}.json`, {}, {}); } // https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets if (operation === 'search') { const q = this.getNodeParameter('searchText', i); const returnAll = this.getNodeParameter('returnAll', i); const additionalFields = this.getNodeParameter('additionalFields', i); const qs = { q, }; if (additionalFields.includeEntities) { qs.include_entities = additionalFields.includeEntities; } if (additionalFields.resultType) { qs.response_type = additionalFields.resultType; } if (additionalFields.until) { qs.until = additionalFields.until; } if (additionalFields.lang) { qs.lang = additionalFields.lang; } if (additionalFields.locationFieldsUi) { const locationUi = additionalFields.locationFieldsUi; if (locationUi.locationFieldsValues) { const values = locationUi.locationFieldsValues; qs.geocode = `${values.latitude},${values.longitude},${values.distance}${values.radius}`; } } qs.tweet_mode = additionalFields.tweetMode || 'compat'; if (returnAll) { responseData = await GenericFunctions_1.twitterApiRequestAllItems.call(this, 'statuses', 'GET', '/search/tweets.json', {}, qs); } else { qs.count = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'GET', '/search/tweets.json', {}, qs); responseData = responseData.statuses; } } //https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-favorites-create if (operation === 'like') { const tweetId = this.getNodeParameter('tweetId', i); const additionalFields = this.getNodeParameter('additionalFields', i); const qs = { id: tweetId, }; if (additionalFields.includeEntities) { qs.include_entities = additionalFields.includeEntities; } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', '/favorites/create.json', {}, qs); } //https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-retweet-id if (operation === 'retweet') { const tweetId = this.getNodeParameter('tweetId', i); const additionalFields = this.getNodeParameter('additionalFields', i); const qs = { id: tweetId, }; if (additionalFields.trimUser) { qs.trim_user = additionalFields.trimUser; } responseData = await GenericFunctions_1.twitterApiRequest.call(this, 'POST', `/statuses/retweet/${tweetId}.json`, {}, qs); } } 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.TwitterV1 = TwitterV1; //# sourceMappingURL=TwitterV1.node.js.map