UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

272 lines 13.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Strapi = void 0; const n8n_workflow_1 = require("n8n-workflow"); const EntryDescription_1 = require("./EntryDescription"); const GenericFunctions_1 = require("./GenericFunctions"); const utilities_1 = require("../../utils/utilities"); class Strapi { description = { displayName: 'Strapi', name: 'strapi', icon: 'file:strapi.svg', group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume Strapi API', defaults: { name: 'Strapi', }, usableAsTool: true, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'strapiApi', required: true, testedBy: 'strapiApiTest', displayOptions: { show: { authentication: ['password'], }, }, }, { name: 'strapiTokenApi', required: true, displayOptions: { show: { authentication: ['token'], }, }, }, ], properties: [ { displayName: 'Authentication', name: 'authentication', type: 'options', options: [ { name: 'Username & Password', value: 'password', }, { name: 'API Token', value: 'token', }, ], default: 'password', }, { displayName: 'Resource', name: 'resource', noDataExpression: true, type: 'options', options: [ { name: 'Entry', value: 'entry', }, ], default: 'entry', }, ...EntryDescription_1.entryOperations, ...EntryDescription_1.entryFields, ], }; methods = { credentialTest: { async strapiApiTest(credential) { const credentials = credential.data; let options = {}; const url = (0, utilities_1.removeTrailingSlash)(credentials.url); options = { headers: { 'content-type': 'application/json', }, method: 'POST', body: { identifier: credentials.email, password: credentials.password, }, uri: credentials.apiVersion === 'v4' ? `${url}/api/auth/local` : `${url}/auth/local`, json: true, }; try { await this.helpers.request(options); return { status: 'OK', message: 'Authentication successful', }; } catch (error) { return { status: 'Error', message: `Auth settings are not valid: ${error}`, }; } }, }, }; async execute() { const items = this.getInputData(); const returnData = []; const length = items.length; const qs = {}; const headers = {}; let responseData; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); const authenticationMethod = this.getNodeParameter('authentication', 0); let apiVersion; if (authenticationMethod === 'password') { const { jwt } = await GenericFunctions_1.getToken.call(this); apiVersion = (await this.getCredentials('strapiApi')).apiVersion; headers.Authorization = `Bearer ${jwt}`; } else { apiVersion = (await this.getCredentials('strapiTokenApi')).apiVersion; } for (let i = 0; i < length; i++) { try { if (resource === 'entry') { if (operation === 'create') { const body = {}; const contentType = this.getNodeParameter('contentType', i); const columns = this.getNodeParameter('columns', i); const columnList = columns.split(',').map((column) => column.trim()); for (const key of Object.keys(items[i].json)) { if (columnList.includes(key)) { apiVersion === 'v4' ? (body.data = items[i].json) : (body[key] = items[i].json[key]); } } responseData = await GenericFunctions_1.strapiApiRequest.call(this, 'POST', `/${contentType}`, body, qs, undefined, headers); const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } if (operation === 'delete') { const contentType = this.getNodeParameter('contentType', i); const entryId = this.getNodeParameter('entryId', i); responseData = await GenericFunctions_1.strapiApiRequest.call(this, 'DELETE', `/${contentType}/${entryId}`, {}, qs, undefined, headers); const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', i); const contentType = this.getNodeParameter('contentType', i); const options = this.getNodeParameter('options', i); if (apiVersion === 'v4') { // Sort Option if (options.sort && options.sort.length !== 0) { const sortFields = options.sort; qs.sort = sortFields.join(','); } // Filter Option if (options.where) { const query = (0, GenericFunctions_1.validateJSON)(options.where); if (query !== undefined) { qs.filters = query; } else { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Query must be a valid JSON', { itemIndex: i, }); } } // Publication Option if (options.publicationState) { qs.publicationState = options.publicationState; } // Limit Option if (returnAll) { responseData = await GenericFunctions_1.strapiApiRequestAllItems.call(this, 'GET', `/${contentType}`, {}, qs, headers, apiVersion); } else { qs['pagination[pageSize]'] = this.getNodeParameter('limit', i); ({ data: responseData } = await GenericFunctions_1.strapiApiRequest.call(this, 'GET', `/${contentType}`, {}, qs, undefined, headers)); } } else { // Sort Option if (options.sort && options.sort.length !== 0) { const sortFields = options.sort; qs._sort = sortFields.join(','); } // Filter Option if (options.where) { const query = (0, GenericFunctions_1.validateJSON)(options.where); if (query !== undefined) { qs._where = query; } else { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Query must be a valid JSON', { itemIndex: i, }); } } // Publication Option if (options.publicationState) { qs._publicationState = options.publicationState; } // Limit Option if (returnAll) { responseData = await GenericFunctions_1.strapiApiRequestAllItems.call(this, 'GET', `/${contentType}`, {}, qs, headers, apiVersion); } else { qs._limit = this.getNodeParameter('limit', i); responseData = await GenericFunctions_1.strapiApiRequest.call(this, 'GET', `/${contentType}`, {}, qs, undefined, headers); } } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } if (operation === 'get') { const contentType = this.getNodeParameter('contentType', i); const entryId = this.getNodeParameter('entryId', i); responseData = await GenericFunctions_1.strapiApiRequest.call(this, 'GET', `/${contentType}/${entryId}`, {}, qs, undefined, headers); if (apiVersion === 'v4') { responseData = responseData.data; } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } if (operation === 'update') { const body = {}; const contentType = this.getNodeParameter('contentType', i); const columns = this.getNodeParameter('columns', i); const updateKey = this.getNodeParameter('updateKey', i); const columnList = columns.split(',').map((column) => column.trim()); const entryId = items[i].json[updateKey]; for (const key of Object.keys(items[i].json)) { if (columnList.includes(key)) { apiVersion === 'v4' ? (body.data = items[i].json) : (body[key] = items[i].json[key]); } } responseData = await GenericFunctions_1.strapiApiRequest.call(this, 'PUT', `/${contentType}/${entryId}`, body, qs, undefined, headers); if (apiVersion === 'v4') { responseData = responseData.data; } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } } } catch (error) { if (this.continueOnFail()) { const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } }); returnData.push(...executionErrorData); continue; } throw error; } } return [returnData]; } } exports.Strapi = Strapi; //# sourceMappingURL=Strapi.node.js.map