@ai-growth/n8n-nodes-wordpress
Version:
n8n node for WordPress integration with AI GROWTH - SEO WP plugin
178 lines • 9.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AIGrowthWordPress = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const NodeFields_1 = require("./NodeFields");
const NodeService_1 = require("./NodeService");
const WordPressValidator_1 = require("./WordPressValidator");
class AIGrowthWordPress {
constructor() {
this.description = {
displayName: 'AI GROWTH WordPress',
name: 'aiGrowthWordPress',
icon: 'file:wordpress.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Create, read, update and delete WordPress content with AI GROWTH - SEO WP plugin support',
defaults: {
name: 'AI GROWTH WordPress',
color: '#21759b',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'wordpressApi',
required: true,
testedBy: 'wordpressApiTest',
},
],
properties: (0, NodeFields_1.getAllNodeFields)(),
};
this.methods = {
credentialTest: {
wordpressApiTest: async function (credential) {
console.log('[AI GROWTH WordPress Node] Testing API credentials...');
const credentials = credential.data;
const { url, username, password } = credentials;
console.log(`[AI GROWTH WordPress Node] Credentials test - URL: ${url}, API Version: v2, Username: ${username}`);
if (!url) {
console.error('[AI GROWTH WordPress Node] Error: Website URL is required');
return {
status: 'Error',
message: 'Website URL is required',
};
}
const baseUrl = url.toString().replace(/\/$/, '');
console.log(`[AI GROWTH WordPress Node] Normalized URL: ${baseUrl}`);
try {
console.log(`[AI GROWTH WordPress Node] Making test request to ${baseUrl}/wp-json/wp/v2`);
const options = {
method: 'GET',
url: `${baseUrl}/wp-json/wp/v2`,
headers: {
Authorization: `Basic ${Buffer.from(`${username || ''}:${password || ''}`).toString('base64')}`,
},
json: true,
};
console.log(`[AI GROWTH WordPress Node] Request options: ${JSON.stringify({
method: options.method,
url: options.url,
headers: {
Authorization: options.headers.Authorization ? 'Basic ***** (credentials redacted)' : 'None'
},
}, null, 2)}`);
try {
const response = await this.helpers.request(options);
console.log(`[AI GROWTH WordPress Node] Response received: ${JSON.stringify(response, null, 2)}`);
if (!response) {
console.error('[AI GROWTH WordPress Node] Error: Invalid response from WordPress API - response is empty');
return {
status: 'Error',
message: 'Invalid response from WordPress API',
};
}
// Verificar se a resposta contém os campos esperados
if (response.name && response.description) {
console.log(`[AI GROWTH WordPress Node] Successfully connected to ${response.name}`);
return {
status: 'OK',
message: `Successfully connected to ${response.name}`,
};
}
console.log(`[AI GROWTH WordPress Node] Connection successful but unexpected response format: ${JSON.stringify(response, null, 2)}`);
return {
status: 'OK',
message: 'Connection successful!',
};
}
catch (requestError) {
console.error(`[AI GROWTH WordPress Node] Request error: ${requestError.message || 'Unknown error'}`);
if (requestError.response) {
console.error(`[AI GROWTH WordPress Node] Response status: ${requestError.response.status}`);
console.error(`[AI GROWTH WordPress Node] Response data: ${JSON.stringify(requestError.response.data, null, 2)}`);
}
throw requestError;
}
}
catch (error) {
console.error(`[AI GROWTH WordPress Node] Credentials test error:`, error);
let errorMessage = 'Could not connect to WordPress API';
if (error.statusCode === 401) {
console.error(`[AI GROWTH WordPress Node] Authentication failed (401)`);
errorMessage = 'Authentication failed. Please check your credentials.';
}
else if (error.message) {
console.error(`[AI GROWTH WordPress Node] Connection error: ${error.message}`);
errorMessage = `Connection error: ${error.message}`;
}
const errorDetails = error.response ?
{ status: error.response.status, data: error.response.data } :
{ error: String(error) };
console.error(`[AI GROWTH WordPress Node] Error details: ${JSON.stringify(errorDetails, null, 2)}`);
return {
status: 'Error',
message: errorMessage,
};
}
},
},
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
try {
const credentials = await this.getCredentials('wordpressApi');
const nodeService = new NodeService_1.NodeService(this, credentials);
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
for (let i = 0; i < items.length; i++) {
try {
const params = WordPressValidator_1.WordPressValidator.getParams(this, i, resource, operation);
const result = await nodeService.executeOperation(params, resource, operation);
// Formatar saída com base no tipo de operação
if (operation === 'getAll') {
const formattedResults = nodeService.formatMultipleOutput(result);
returnData.push(...formattedResults);
}
else if (operation === 'delete') {
const formattedResult = nodeService.formatBooleanOutput(result, typeof params === 'object' && 'id' in params ? params.id : undefined);
returnData.push(...formattedResult);
}
else {
const formattedResult = nodeService.formatSingleOutput(result);
returnData.push(...formattedResult);
}
}
catch (error) {
// Capturar erros para item individual
if (this.continueOnFail()) {
// Adicionar erro à saída
returnData.push({
json: {
error: error instanceof Error ? error.message : String(error),
item: i,
},
});
continue;
}
throw error;
}
}
return [returnData];
}
catch (error) {
// Erro geral ao executar o nó
if (this.continueOnFail()) {
return [items];
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), error instanceof Error ? error : new Error(String(error)));
}
}
}
exports.AIGrowthWordPress = AIGrowthWordPress;
// Export default
exports.default = AIGrowthWordPress;
//# sourceMappingURL=AIGrowthWordPress.js.map