UNPKG

n8n-nodes-chatwork

Version:

Provides n8n nodes to retrieve data from Chatwork API.

232 lines (231 loc) 11.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Chatwork = void 0; const GenericFunctions_1 = require("../../shared/GenericFunctions"); const properties_1 = require("./properties"); class Chatwork { constructor() { this.description = { displayName: 'Chatwork', name: 'chatwork', subtitle: '={{$parameter["resource"].toTitleCase() + ": " + $parameter["operation"].toTitleCase()}}', icon: 'file:../../assets/chatwork.png', group: ['transform'], version: 1, description: 'Retrieve data from Chatwork API.', defaults: { name: 'Chatwork', color: '#EF3646', }, inputs: ["main"], outputs: ["main"], credentials: [ { name: 'chatworkApi', required: true, }, ], properties: [ properties_1.ResourceProperty, properties_1.MeProperty, properties_1.MyProperty, properties_1.ContactProperty, properties_1.RoomProperty, properties_1.RoomIdProperty, properties_1.MessageProperty, properties_1.NameProperty, properties_1.NameRequiredProperty, properties_1.DescriptionProperty, properties_1.IconPresetProperty, properties_1.MessageIdProperty, properties_1.TaskIdProperty, properties_1.BodyProperty, properties_1.LimitProperty, properties_1.ToIdsProperty, properties_1.AccountIdProperty, properties_1.FileIdProperty, properties_1.FileCreateDownloadUrl, properties_1.MembersAdminIdsProperty, properties_1.MembersMemberIdsProperty, properties_1.MembersReadonlyIdsProperty, properties_1.ActionTypeProperty, ], }; } async execute() { const items = this.getInputData(); const returnItems = []; for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { let method = 'GET'; let endpoint = ''; let body; const resource = this.getNodeParameter('resource', itemIndex); if (resource === properties_1.ResourceOptionsValue.ME) { endpoint += '/me'; } else if (resource === properties_1.ResourceOptionsValue.CONTACTS) { endpoint += '/contacts'; } else if (resource === properties_1.ResourceOptionsValue.MY) { const operation = this.getNodeParameter('operation', itemIndex); endpoint += `/my/${operation}`; } else if (resource === properties_1.ResourceOptionsValue.ROOMS) { endpoint += '/rooms'; const operation = this.getNodeParameter('operation', itemIndex); if (![properties_1.RoomOptionsValue.GET_ALL, properties_1.RoomOptionsValue.CREATE].includes(operation)) { const roomId = this.getNodeParameter(properties_1.RoomIdProperty.name, itemIndex); endpoint += `/${roomId}`; } switch (operation) { case properties_1.RoomOptionsValue.GET_ALL: break; case properties_1.RoomOptionsValue.GET_DETAIL: break; case properties_1.RoomOptionsValue.CREATE: { method = 'POST'; const name = this.getNodeParameter(properties_1.NameRequiredProperty.name, itemIndex); const membersAdminIds = this.getNodeParameter(properties_1.MembersAdminIdsProperty.name, itemIndex); const description = this.getNodeParameter(properties_1.DescriptionProperty.name, itemIndex); const iconPreset = this.getNodeParameter(properties_1.IconPresetProperty.name, itemIndex); const membersMemberIds = this.getNodeParameter(properties_1.MembersMemberIdsProperty.name, itemIndex); const membersReadonlyIds = this.getNodeParameter(properties_1.MembersReadonlyIdsProperty.name, itemIndex); body = { name, members_admin_ids: membersAdminIds, icon_preset: iconPreset, }; if (description) { body.description = description; } if (membersMemberIds) { body.members_member_ids = membersMemberIds; } if (membersReadonlyIds) { body.members_readonly_ids = membersReadonlyIds; } break; } case properties_1.RoomOptionsValue.UPDATE_INFO: { method = 'PUT'; const description = this.getNodeParameter(properties_1.DescriptionProperty.name, itemIndex); const name = this.getNodeParameter(properties_1.NameProperty.name, itemIndex); const iconPreset = this.getNodeParameter(properties_1.IconPresetProperty.name, itemIndex); body = { icon_preset: iconPreset, }; if (description) { body.description = description; } if (name) { body.name = name; } break; } case properties_1.RoomOptionsValue.LEAVE_OR_DELETE: { method = 'DELETE'; const actionType = this.getNodeParameter(properties_1.ActionTypeProperty.name, itemIndex); body = { action_type: actionType }; break; } case properties_1.RoomOptionsValue.GET_MESSAGES: endpoint += '/messages?force=1'; break; case properties_1.RoomOptionsValue.SEND_MESSAGE: { method = 'POST'; endpoint += '/messages'; const message = this.getNodeParameter(properties_1.MessageProperty.name, itemIndex); body = { body: message }; break; } case properties_1.RoomOptionsValue.GET_MESSAGE_DETAIL: { const messageId = this.getNodeParameter(properties_1.MessageIdProperty.name, itemIndex); endpoint += `/messages/${messageId}`; break; } case properties_1.RoomOptionsValue.UPDATE_MESSAGE: { method = 'PUT'; const messageId = this.getNodeParameter(properties_1.MessageIdProperty.name, itemIndex); const message = this.getNodeParameter(properties_1.MessageProperty.name, itemIndex); endpoint += `/messages/${messageId}`; body = { body: message }; break; } case properties_1.RoomOptionsValue.DELETE_MESSAGE: { const messageId = this.getNodeParameter(properties_1.MessageIdProperty.name, itemIndex); method = 'DELETE'; endpoint += `/messages/${messageId}`; break; } case properties_1.RoomOptionsValue.GET_MEMBERS: endpoint += '/members'; break; case properties_1.RoomOptionsValue.CHANGE_ASSOCIATED_MEMBERS: { method = 'PUT'; endpoint += '/members'; const membersAdminIds = this.getNodeParameter(properties_1.MembersAdminIdsProperty.name, itemIndex); const membersMemberIds = this.getNodeParameter(properties_1.MembersMemberIdsProperty.name, itemIndex); const membersReadonlyIds = this.getNodeParameter(properties_1.MembersReadonlyIdsProperty.name, itemIndex); body = { members_admin_ids: membersAdminIds, }; if (membersMemberIds) { body.members_member_ids = membersMemberIds; } if (membersReadonlyIds) { body.members_readonly_ids = membersReadonlyIds; } break; } case properties_1.RoomOptionsValue.GET_TASKS: endpoint += '/tasks'; break; case properties_1.RoomOptionsValue.CREATE_TASK: method = 'POST'; endpoint += '/tasks'; body = { body: this.getNodeParameter(properties_1.BodyProperty.name, itemIndex), limit: Math.round((new Date(this.getNodeParameter(properties_1.LimitProperty.name, itemIndex))).valueOf() / 1000), to_ids: this.getNodeParameter(properties_1.ToIdsProperty.name, itemIndex), }; break; case properties_1.RoomOptionsValue.GET_TASK_DETAIL: { const taskId = this.getNodeParameter(properties_1.TaskIdProperty.name, itemIndex); endpoint += `/tasks/${taskId}`; break; } case properties_1.RoomOptionsValue.GET_FILES: { const accountId = this.getNodeParameter(properties_1.AccountIdProperty.name, itemIndex); endpoint += `/files${accountId ? `?account_id=${accountId}` : ''}`; break; } case properties_1.RoomOptionsValue.GET_FILE_DETAIL: { const fileId = this.getNodeParameter(properties_1.FileIdProperty.name, itemIndex); const fileCreateDownloadUrl = this.getNodeParameter(properties_1.FileCreateDownloadUrl.name, itemIndex); endpoint += `/files/${fileId}${fileCreateDownloadUrl ? '?create_download_url=1' : ''}`; break; } default: throw new Error(`${operation} operation is not supported.`); } } else { throw new Error(`${resource} resource is not supported.`); } const response = await GenericFunctions_1.chatworkApiRequest.call(this, method, endpoint, body); if (Array.isArray(response)) { returnItems.push(...response); } else { returnItems.push({ json: response }); } } if (returnItems.some((i) => i.json !== undefined)) { return [returnItems]; } else { return [this.helpers.returnJsonArray(returnItems)]; } } } exports.Chatwork = Chatwork;