n8n-nodes-base
Version:
Base nodes of n8n
390 lines • 19.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KoBoToolbox = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const FileDescription_1 = require("./FileDescription");
const FormDescription_1 = require("./FormDescription");
const GenericFunctions_1 = require("./GenericFunctions");
const HookDescription_1 = require("./HookDescription");
const SubmissionDescription_1 = require("./SubmissionDescription");
class KoBoToolbox {
description = {
displayName: 'KoBoToolbox',
name: 'koBoToolbox',
icon: 'file:koBoToolbox.svg',
group: ['transform'],
version: 1,
description: 'Work with KoBoToolbox forms and submissions',
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
defaults: {
name: 'KoBoToolbox',
},
usableAsTool: true,
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
credentials: [
{
name: 'koBoToolboxApi',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'File',
value: 'file',
},
{
name: 'Form',
value: 'form',
},
{
name: 'Hook',
value: 'hook',
},
{
name: 'Submission',
value: 'submission',
},
],
default: 'submission',
required: true,
},
...FormDescription_1.formOperations,
...FormDescription_1.formFields,
...HookDescription_1.hookOperations,
...HookDescription_1.hookFields,
...SubmissionDescription_1.submissionOperations,
...SubmissionDescription_1.submissionFields,
...FileDescription_1.fileOperations,
...FileDescription_1.fileFields,
],
};
methods = {
loadOptions: {
loadForms: GenericFunctions_1.loadForms,
},
};
async execute() {
let responseData;
let returnData = [];
const binaryItems = [];
const items = this.getInputData();
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
for (let i = 0; i < items.length; i++) {
if (resource === 'form') {
// *********************************************************************
// Form
// *********************************************************************
if (operation === 'get') {
// ----------------------------------
// Form: get
// ----------------------------------
const formId = this.getNodeParameter('formId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}`,
}),
];
}
if (operation === 'getAll') {
// ----------------------------------
// Form: getAll
// ----------------------------------
const formQueryOptions = this.getNodeParameter('options', i);
const formFilterOptions = this.getNodeParameter('filters', i);
responseData = await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: '/api/v2/assets/',
qs: {
limit: this.getNodeParameter('limit', i, 1000),
...(formFilterOptions.filter && { q: formFilterOptions.filter }),
...(formQueryOptions?.sort?.value?.ordering && {
ordering: (formQueryOptions?.sort?.value?.descending ? '-' : '') +
formQueryOptions?.sort?.value?.ordering,
}),
},
scroll: this.getNodeParameter('returnAll', i),
});
}
if (operation === 'redeploy') {
// ----------------------------------
// Form: redeploy
// ----------------------------------
const formId = this.getNodeParameter('formId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'PATCH',
url: `/api/v2/assets/${formId}/deployment/`,
}),
];
}
}
if (resource === 'submission') {
// *********************************************************************
// Submissions
// *********************************************************************
const formId = this.getNodeParameter('formId', i);
if (operation === 'getAll') {
// ----------------------------------
// Submissions: getAll
// ----------------------------------
const submissionQueryOptions = this.getNodeParameter('options', i);
const filterJson = this.getNodeParameter('filterJson', i, null);
responseData = await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/data/`,
qs: {
limit: this.getNodeParameter('limit', i, 1000),
...(filterJson && { query: filterJson }),
...(submissionQueryOptions.sort && { sort: submissionQueryOptions.sort }),
...(submissionQueryOptions.fields && {
fields: JSON.stringify((0, GenericFunctions_1.parseStringList)(submissionQueryOptions.fields)),
}),
},
scroll: this.getNodeParameter('returnAll', i),
});
if (submissionQueryOptions.reformat) {
responseData = responseData.map((submission) => {
return (0, GenericFunctions_1.formatSubmission)(submission, (0, GenericFunctions_1.parseStringList)(submissionQueryOptions.selectMask), (0, GenericFunctions_1.parseStringList)(submissionQueryOptions.numberMask));
});
}
if (submissionQueryOptions.download) {
// Download related attachments
for (const submission of responseData) {
binaryItems.push(await GenericFunctions_1.downloadAttachments.call(this, submission, submissionQueryOptions));
}
}
}
if (operation === 'get') {
// ----------------------------------
// Submissions: get
// ----------------------------------
const submissionId = this.getNodeParameter('submissionId', i);
const options = this.getNodeParameter('options', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/data/${submissionId}`,
qs: {
...(options.fields && {
fields: JSON.stringify((0, GenericFunctions_1.parseStringList)(options.fields)),
}),
},
}),
];
if (options.reformat) {
responseData = responseData.map((submission) => {
return (0, GenericFunctions_1.formatSubmission)(submission, (0, GenericFunctions_1.parseStringList)(options.selectMask), (0, GenericFunctions_1.parseStringList)(options.numberMask));
});
}
if (options.download) {
// Download related attachments
for (const submission of responseData) {
binaryItems.push(await GenericFunctions_1.downloadAttachments.call(this, submission, options));
}
}
}
if (operation === 'delete') {
// ----------------------------------
// Submissions: delete
// ----------------------------------
const id = this.getNodeParameter('submissionId', i);
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'DELETE',
url: `/api/v2/assets/${formId}/data/${id}`,
});
responseData = [
{
success: true,
},
];
}
if (operation === 'getValidation') {
// ----------------------------------
// Submissions: getValidation
// ----------------------------------
const submissionId = this.getNodeParameter('submissionId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/data/${submissionId}/validation_status/`,
}),
];
}
if (operation === 'setValidation') {
// ----------------------------------
// Submissions: setValidation
// ----------------------------------
const submissionId = this.getNodeParameter('submissionId', i);
const status = this.getNodeParameter('validationStatus', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'PATCH',
url: `/api/v2/assets/${formId}/data/${submissionId}/validation_status/`,
body: {
'validation_status.uid': status,
},
}),
];
}
}
if (resource === 'hook') {
const formId = this.getNodeParameter('formId', i);
// *********************************************************************
// Hook
// *********************************************************************
if (operation === 'getAll') {
// ----------------------------------
// Hook: getAll
// ----------------------------------
responseData = await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/hooks/`,
qs: {
limit: this.getNodeParameter('limit', i, 1000),
},
scroll: this.getNodeParameter('returnAll', i),
});
}
if (operation === 'get') {
// ----------------------------------
// Hook: get
// ----------------------------------
const hookId = this.getNodeParameter('hookId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/hooks/${hookId}`,
}),
];
}
if (operation === 'retryAll') {
// ----------------------------------
// Hook: retryAll
// ----------------------------------
const hookId = this.getNodeParameter('hookId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'PATCH',
url: `/api/v2/assets/${formId}/hooks/${hookId}/retry/`,
}),
];
}
if (operation === 'getLogs') {
// ----------------------------------
// Hook: getLogs
// ----------------------------------
const hookId = this.getNodeParameter('hookId', i);
const startDate = this.getNodeParameter('startDate', i, null);
const endDate = this.getNodeParameter('endDate', i, null);
const status = this.getNodeParameter('status', i, null);
responseData = await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/hooks/${hookId}/logs/`,
qs: {
...(startDate && { start: startDate }),
...(endDate && { end: endDate }),
...(status && { status }),
},
});
}
if (operation === 'retryOne') {
// ----------------------------------
// Hook: retryOne
// ----------------------------------
const hookId = this.getNodeParameter('hookId', i);
const logId = this.getNodeParameter('logId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'PATCH',
url: `/api/v2/assets/${formId}/hooks/${hookId}/logs/${logId}/retry/`,
}),
];
}
}
if (resource === 'file') {
// *********************************************************************
// File
// *********************************************************************
const formId = this.getNodeParameter('formId', i);
if (operation === 'getAll') {
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/files`,
qs: {
file_type: 'form_media',
},
scroll: true,
}),
];
}
if (operation === 'get') {
const fileId = this.getNodeParameter('fileId', i);
const download = this.getNodeParameter('download', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
url: `/api/v2/assets/${formId}/files/${fileId}`,
}),
];
if (responseData?.[0] && download) {
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
const binaryItem = {
json: responseData[0],
binary: {},
};
const response = await GenericFunctions_1.koBoToolboxRawRequest.call(this, {
url: `/api/v2/assets/${formId}/files/${fileId}/content`,
encoding: 'arraybuffer',
});
console.dir(response);
binaryItem.binary[binaryPropertyName] = await this.helpers.prepareBinaryData(response, responseData[0].metadata.filename);
binaryItems.push(binaryItem);
}
}
if (operation === 'delete') {
const fileId = this.getNodeParameter('fileId', i);
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'DELETE',
url: `/api/v2/assets/${formId}/files/${fileId}`,
}),
];
}
if (operation === 'create') {
const fileMode = this.getNodeParameter('fileMode', i);
const body = {
description: 'Uploaded file',
file_type: 'form_media',
};
if ('binary' === fileMode) {
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
const item = items[i].binary;
const binaryData = item[binaryPropertyName];
body.base64Encoded = 'data:' + binaryData.mimeType + ';base64,' + binaryData.data;
body.metadata = {
filename: binaryData.fileName,
};
}
else {
const fileUrl = this.getNodeParameter('fileUrl', i);
body.metadata = {
redirect_url: fileUrl,
};
}
responseData = [
await GenericFunctions_1.koBoToolboxApiRequest.call(this, {
method: 'POST',
url: `/api/v2/assets/${formId}/files/`,
body,
}),
];
}
}
returnData = returnData.concat(responseData);
}
// Map data to n8n data
return binaryItems.length > 0 ? [binaryItems] : [this.helpers.returnJsonArray(returnData)];
}
}
exports.KoBoToolbox = KoBoToolbox;
//# sourceMappingURL=KoBoToolbox.node.js.map