@skriptfabrik/n8n-nodes-moco
Version:
MOCO community nodes for n8n
429 lines • 26.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Moco = void 0;
const tslib_1 = require("tslib");
const n8n_workflow_1 = require("n8n-workflow");
const GenericFunctions_1 = require("./GenericFunctions");
const UserDescription_1 = require("./UserDescription");
const ActivityDescription_1 = require("./ActivityDescription");
const CompanyDescription_1 = require("./CompanyDescription");
const ProjectDescription_1 = require("./ProjectDescription");
class Moco {
constructor() {
this.description = {
displayName: 'MOCO',
name: 'moco',
icon: 'file:moco.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume MOCO API',
defaults: {
name: 'MOCO',
},
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
credentials: [
{
name: 'mocoApi',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Activity',
value: 'activity',
},
{
name: 'Company',
value: 'company',
},
{
name: 'Project',
value: 'project',
},
{
name: 'User',
value: 'user',
},
],
default: 'user',
},
...ActivityDescription_1.activityOperations,
...ActivityDescription_1.activityFields,
...CompanyDescription_1.companyOperations,
...CompanyDescription_1.companyFields,
...ProjectDescription_1.projectOperations,
...ProjectDescription_1.projectFields,
...UserDescription_1.userOperations,
...UserDescription_1.userFields,
],
};
this.methods = {
loadOptions: {
listCompanies() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const companies = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/companies');
for (const company of companies) {
returnData.push({
name: company.name,
value: company.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listCustomers() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const companies = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/companies', { qs: { type: 'customer' } });
for (const company of companies) {
returnData.push({
name: company.name,
value: company.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listLeads() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const deals = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/deals');
for (const deal of deals) {
returnData.push({
name: deal.name,
value: deal.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listProjects() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const projects = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/projects');
for (const project of projects) {
returnData.push({
name: `${project.customer.name} > ${project.name}`,
value: project.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listProjectTasks() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const projectId = this.getCurrentNodeParameter('projectId') || undefined;
if (projectId === undefined) {
const projects = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/projects');
for (const project of projects) {
for (const projectTask of project.tasks) {
returnData.push({
name: `${project.customer.name} > ${project.name} > ${projectTask.name}`,
value: projectTask.id,
});
}
}
}
else {
const projectTasks = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', `/projects/${projectId}/tasks`);
for (const projectTask of projectTasks) {
returnData.push({
name: projectTask.name,
value: projectTask.id,
});
}
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listTeams() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const units = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/units');
for (const unit of units) {
returnData.push({
name: unit.name,
value: unit.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
listUsers() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const returnData = [];
const users = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/users');
for (const user of users) {
returnData.push({
name: `${user.firstname} ${user.lastname}`,
value: user.id,
});
}
return returnData.sort((a, b) => a.name.localeCompare(b.name));
});
},
},
};
}
execute() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const items = this.getInputData();
const returnData = [];
let responseData = {};
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
for (let item = 0; item < items.length; item++) {
try {
if (resource === 'activity') {
if (operation === 'create') {
const impersonateUserId = this.getNodeParameter('impersonateUserId', item) ||
undefined;
const body = Object.assign({ date: this.getNodeParameter('date', item), project_id: this.getNodeParameter('projectId', item), task_id: this.getNodeParameter('taskId', item), seconds: this.getNodeParameter('seconds', item), description: this.getNodeParameter('description', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['billable', 'tag', 'remoteService', 'remoteId', 'remoteUrl']));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/activities', { impersonateUserId, body }));
}
if (operation === 'delete') {
const activityId = this.getNodeParameter('activityId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/activities/${activityId}`));
}
if (operation === 'get') {
const activityId = this.getNodeParameter('activityId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/activities/${activityId}`));
}
if (operation === 'list') {
const returnAll = this.getNodeParameter('returnAll', item);
const qs = Object.assign(Object.assign({}, (returnAll
? {}
: {
limit: this.getNodeParameter('limit', item) ||
undefined,
ids: this.getNodeParameter('ids', item) ||
undefined,
updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item),
})), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [
'from',
'to',
'userId',
'projectId',
'taskId',
'companyId',
'term',
'sortBy',
]));
responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/activities', { qs }));
}
if (operation === 'update') {
const activityId = this.getNodeParameter('activityId', item);
const body = Object.assign({ date: this.getNodeParameter('date', item), project_id: this.getNodeParameter('projectId', item), task_id: this.getNodeParameter('taskId', item), seconds: this.getNodeParameter('seconds', item), description: this.getNodeParameter('description', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['billable', 'tag', 'remoteService', 'remoteId', 'remoteUrl']));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/activities/${activityId}`, { body }));
}
}
if (resource === 'company') {
if (operation === 'create' || operation === 'update') {
const type = this.getNodeParameter('type', item);
let typeSpecificParameters = {};
const additionalFields = [
'countryCode',
'vatIdentifier',
'alternativeCorrespondenceLanguage',
'website',
'fax',
'phone',
'email',
'billingEmailCc',
'address',
'info',
'customProperties',
'tags',
'footer',
];
if (type === 'customer') {
typeSpecificParameters = {
currency: this.getNodeParameter('currency', item),
identifier: this.getNodeParameter('identifier', item),
};
additionalFields.push('customerTax', 'defaultInvoiceDueDays', 'debitNumber');
}
if (type === 'supplier') {
additionalFields.push('iban', 'supplierTax', 'creditNumber');
}
const additionalFieldsParameters = GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, additionalFields);
// Patch custom properties to be in the correct format
if (additionalFieldsParameters.custom_properties) {
additionalFieldsParameters.custom_properties = additionalFieldsParameters.custom_properties.values.reduce((properties, { key, value }) => {
properties[key] = value;
return properties;
}, {});
}
const body = Object.assign(Object.assign({ name: this.getNodeParameter('name', item), type }, typeSpecificParameters), additionalFieldsParameters);
let companyId = undefined;
if (operation === 'update') {
companyId = this.getNodeParameter('companyId', item);
}
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, operation === 'create' ? 'POST' : 'PUT', operation === 'create' ? '/companies' : `/companies/${companyId}`, {
body,
}));
}
if (operation === 'delete') {
const companyId = this.getNodeParameter('companyId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/companies/${companyId}`));
}
if (operation === 'get') {
const companyId = this.getNodeParameter('companyId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/companies/${companyId}`));
}
if (operation === 'list') {
const returnAll = this.getNodeParameter('returnAll', item);
const qs = Object.assign(Object.assign({}, (returnAll
? {}
: {
limit: this.getNodeParameter('limit', item) ||
undefined,
ids: this.getNodeParameter('ids', item) ||
undefined,
updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item),
})), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['type', 'tags', 'identifier', 'term', 'sortBy']));
responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/companies', { qs }));
}
}
if (resource === 'project') {
if (operation === 'create') {
const body = Object.assign({ name: this.getNodeParameter('name', item), currency: this.getNodeParameter('currency', item), start_date: this.getNodeParameter('startDate', item), finish_date: this.getNodeParameter('finishDate', item), fixed_price: this.getNodeParameter('fixedPrice', item), retainer: this.getNodeParameter('retainer', item), leader_id: this.getNodeParameter('leaderId', item), customer_id: this.getNodeParameter('customerId', item), budget_monthly: this.getNodeParameter('budgetMonthly', item), identifier: this.getNodeParameter('identifier', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [
'coLeaderId',
'dealId',
'billingAddress',
'billingEmailTo',
'billingEmailCc',
'billingNotes',
'settingIncludeTimeReport',
'billingVariant',
'hourlyRate',
'budget',
'budgetExpenses',
'tags',
'customProperties',
'info',
]));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/projects', {
body,
}));
}
if (operation === 'delete') {
const projectId = this.getNodeParameter('projectId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/projects/${projectId}`));
}
if (operation === 'get') {
const projectId = this.getNodeParameter('projectId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/projects/${projectId}`));
}
if (operation === 'list') {
const returnAll = this.getNodeParameter('returnAll', item);
const qs = Object.assign(Object.assign({}, (returnAll
? {}
: {
limit: this.getNodeParameter('limit', item) ||
undefined,
ids: this.getNodeParameter('ids', item) ||
undefined,
updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item),
})), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [
'includeArchived',
'includeCompany',
'leaderId',
'companyId',
'createdFrom',
'createdTo',
'updatedFrom',
'updatedTo',
'tags',
'identifier',
'retainer',
'projectGroupId',
'sortBy',
]));
responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/projects', { qs }));
}
if (operation === 'update') {
const projectId = this.getNodeParameter('projectId', item);
const body = Object.assign({ name: this.getNodeParameter('name', item), currency: this.getNodeParameter('currency', item), start_date: this.getNodeParameter('startDate', item), finish_date: this.getNodeParameter('finishDate', item), fixed_price: this.getNodeParameter('fixedPrice', item), retainer: this.getNodeParameter('retainer', item), leader_id: this.getNodeParameter('leaderId', item), customer_id: this.getNodeParameter('customerId', item), budget_monthly: this.getNodeParameter('budgetMonthly', item), identifier: this.getNodeParameter('identifier', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [
'coLeaderId',
'dealId',
'billingAddress',
'billingEmailTo',
'billingEmailCc',
'billingNotes',
'settingIncludeTimeReport',
'billingVariant',
'hourlyRate',
'budget',
'budgetExpenses',
'tags',
'customProperties',
'info',
]));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/projects/${projectId}`, { body }));
}
}
if (resource === 'user') {
if (operation === 'create') {
const body = Object.assign({ firstname: this.getNodeParameter('firstname', item), lastname: this.getNodeParameter('lastname', item), email: this.getNodeParameter('email', item), password: this.getNodeParameter('password', item), unit_id: this.getNodeParameter('unitId', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['active', 'external']));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/users', {
body,
}));
}
if (operation === 'delete') {
const userId = this.getNodeParameter('userId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/users/${userId}`));
}
if (operation === 'get') {
const userId = this.getNodeParameter('userId', item);
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/users/${userId}`));
}
if (operation === 'list') {
const returnAll = this.getNodeParameter('returnAll', item);
const qs = Object.assign(Object.assign({}, (returnAll
? {}
: {
limit: this.getNodeParameter('limit', item) ||
undefined,
ids: this.getNodeParameter('ids', item) ||
undefined,
updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item),
})), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['includeArchived', 'sortBy']));
responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/users', { qs }));
}
if (operation === 'update') {
const userId = this.getNodeParameter('userId', item);
const body = Object.assign({ firstname: this.getNodeParameter('firstname', item), lastname: this.getNodeParameter('lastname', item), email: this.getNodeParameter('email', item), password: this.getNodeParameter('password', item), unit_id: this.getNodeParameter('unitId', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['active', 'external']));
responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/users/${userId}`, { body }));
}
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item } });
returnData.push(...executionData);
}
catch (error) {
if (this.continueOnFail()) {
returnData.push({
json: { error: error.message },
pairedItem: { item },
});
continue;
}
throw error;
}
}
return [returnData];
});
}
}
exports.Moco = Moco;
//# sourceMappingURL=Moco.node.js.map