n8n-nodes-chatwork
Version:
Provides n8n nodes to retrieve data from Chatwork API.
232 lines (231 loc) • 11.8 kB
JavaScript
"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;