@ai-growth/wordpress
Version:
n8n node for WordPress integration with AI GROWTH - SEO WP plugin
349 lines (348 loc) • 15.6 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WordPressValidator = void 0;
var n8n_workflow_1 = require("n8n-workflow");
/**
* Validador e formatador de parâmetros para o nó WordPress
*/
var WordPressValidator = /** @class */ (function () {
function WordPressValidator() {
}
/**
* Valida uma URL
* @param url URL para validar
* @returns true se for válida, false caso contrário
*/
WordPressValidator.isValidUrl = function (url) {
try {
new URL(url);
return true;
}
catch (error) {
return false;
}
};
/**
* Valida um slug
* @param slug Slug para validar
* @returns true se for válido, false caso contrário
*/
WordPressValidator.isValidSlug = function (slug) {
// Slug deve conter apenas letras minúsculas, números, hífens e underscores
var slugRegex = /^[a-z0-9-_]+$/;
return slugRegex.test(slug);
};
/**
* Valida e formata os parâmetros para criar um post/página
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @param resource Tipo de recurso (post ou page)
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getCreateParams = function (execFunctions, i, resource) {
var _a, _b, _c;
// Obter parâmetros básicos
var title = execFunctions.getNodeParameter('title', i);
var content = execFunctions.getNodeParameter('content', i);
var status = execFunctions.getNodeParameter('status', i);
// Verificar campos obrigatórios com mensagens detalhadas
if (!title) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Title is required for ".concat(resource === 'post' ? 'a post' : 'a page'), { itemIndex: i });
}
if (!content) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Content is required for ".concat(resource === 'post' ? 'a post' : 'a page'), { itemIndex: i });
}
// Parâmetros básicos
var params = {
title: title,
content: content,
status: status,
};
// Adicionar e validar campos opcionais se fornecidos
var excerpt = execFunctions.getNodeParameter('excerpt', i, '');
if (excerpt) {
params.excerpt = excerpt;
}
var slug = execFunctions.getNodeParameter('slug', i, '');
if (slug) {
// Validar formato do slug
if (!this.isValidSlug(slug)) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), 'Slug can only contain lowercase letters, numbers, hyphens and underscores', { itemIndex: i });
}
params.slug = slug;
}
var featuredMedia = execFunctions.getNodeParameter('featured_media', i, 0);
if (featuredMedia > 0) {
params.featured_media = featuredMedia;
}
// Adicionar categorias e tags apenas para posts
if (resource === 'post') {
var categories = execFunctions.getNodeParameter('categories', i, '');
if (categories) {
try {
params.categories = categories.split(',').map(function (id) {
var parsedId = parseInt(id.trim(), 10);
if (isNaN(parsedId) || parsedId <= 0) {
throw new Error("Invalid category ID: ".concat(id.trim()));
}
return parsedId;
});
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Categories must be comma-separated list of valid IDs: ".concat(error instanceof Error ? error.message : ''), { itemIndex: i });
}
}
var tags = execFunctions.getNodeParameter('tags', i, '');
if (tags) {
try {
params.tags = tags.split(',').map(function (id) {
var parsedId = parseInt(id.trim(), 10);
if (isNaN(parsedId) || parsedId <= 0) {
throw new Error("Invalid tag ID: ".concat(id.trim()));
}
return parsedId;
});
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Tags must be comma-separated list of valid IDs: ".concat(error instanceof Error ? error.message : ''), { itemIndex: i });
}
}
}
// Verificar opções de SEO
var seoOptions = execFunctions.getNodeParameter('seoOptions', i, {});
// Processar metadados SEO
if ((_a = seoOptions.metadataValues) === null || _a === void 0 ? void 0 : _a.updateSeoMetadata) {
params.updateSeoMetadata = true;
var metaTitle = seoOptions.metadataValues.meta_title;
if (metaTitle) {
// Verificar comprimento do meta title (recomendado: 50-60 caracteres)
if (metaTitle.length > 70) {
execFunctions.logger.warn("Meta title is too long (".concat(metaTitle.length, " chars). Recommended: 50-60 chars"));
}
params.meta_title = metaTitle;
}
var metaDescription = seoOptions.metadataValues.meta_description;
if (metaDescription) {
// Verificar comprimento da meta description (recomendado: 150-160 caracteres)
if (metaDescription.length > 160) {
execFunctions.logger.warn("Meta description is too long (".concat(metaDescription.length, " chars). Recommended: 150-160 chars"));
}
params.meta_description = metaDescription;
}
var metaKeywords = seoOptions.metadataValues.meta_keywords;
if (metaKeywords) {
params.meta_keywords = metaKeywords;
}
}
// Processar FAQs
if ((_b = seoOptions.faqValues) === null || _b === void 0 ? void 0 : _b.updateFaqs) {
params.updateFaqs = true;
var faqCollection = seoOptions.faqValues.faq;
if (faqCollection && faqCollection.faqValues) {
// Validar FAQs
var faqs = faqCollection.faqValues.map(function (item, index) {
if (!item.question || !item.question.trim()) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "FAQ #".concat(index + 1, " is missing a question"), { itemIndex: i });
}
if (!item.answer || !item.answer.trim()) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "FAQ #".concat(index + 1, " is missing an answer"), { itemIndex: i });
}
return {
question: item.question.trim(),
answer: item.answer.trim(),
};
});
params.faq = faqs;
}
}
// Processar CTA
if ((_c = seoOptions.ctaValues) === null || _c === void 0 ? void 0 : _c.updateCta) {
params.updateCta = true;
var ctaText = seoOptions.ctaValues.text;
var ctaUrl = seoOptions.ctaValues.url;
if (ctaText || ctaUrl) {
// Validar URL do CTA
if (ctaUrl && !this.isValidUrl(ctaUrl)) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "CTA URL is not valid: ".concat(ctaUrl), { itemIndex: i });
}
params.cta = {
text: ctaText || '',
url: ctaUrl || '',
};
}
}
return params;
};
/**
* Valida e formata os parâmetros para atualizar um post/página
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @param resource Tipo de recurso (post ou page)
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getUpdateParams = function (execFunctions, i, resource) {
// Obter ID do post/página
var id = execFunctions.getNodeParameter('id', i);
// Verificar ID
if (!id || id <= 0) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Invalid ".concat(resource, " ID: ").concat(id), { itemIndex: i });
}
// Obter e validar outros parâmetros de criação
var createParams = this.getCreateParams(execFunctions, i, resource);
// Retornar parâmetros para atualização
return __assign({ id: id }, createParams);
};
/**
* Valida e formata os parâmetros para obter um post/página
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getGetParams = function (execFunctions, i) {
var _a, _b, _c;
// Obter ID do post/página
var id = execFunctions.getNodeParameter('id', i);
// Verificar ID
if (!id || id <= 0) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Invalid ID: ".concat(id), { itemIndex: i });
}
// Parâmetros básicos
var params = { id: id };
// Verificar opções de SEO
var seoOptions = execFunctions.getNodeParameter('seoOptions', i, {});
// Processar metadados SEO
if ((_a = seoOptions.metadataValues) === null || _a === void 0 ? void 0 : _a.includeSeoMetadata) {
params.includeSeoMetadata = true;
}
// Processar FAQs
if ((_b = seoOptions.faqValues) === null || _b === void 0 ? void 0 : _b.includeFaqs) {
params.includeFaqs = true;
}
// Processar CTA
if ((_c = seoOptions.ctaValues) === null || _c === void 0 ? void 0 : _c.includeCta) {
params.includeCta = true;
}
return params;
};
/**
* Valida e formata os parâmetros para obter múltiplos posts/páginas
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @param resource Tipo de recurso (post ou page)
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getGetAllParams = function (execFunctions, i, resource) {
var _a, _b, _c;
// Verificar se deve retornar todos os resultados
var returnAll = execFunctions.getNodeParameter('returnAll', i);
// Parâmetros básicos
var params = {};
// Adicionar limite se não estiver retornando todos
if (!returnAll) {
var limit = execFunctions.getNodeParameter('limit', i, 10);
params.limit = limit;
}
// Adicionar página
params.page = 1;
// Adicionar termo de busca
var search = execFunctions.getNodeParameter('search', i, '');
if (search) {
params.search = search;
}
// Adicionar status
var status = execFunctions.getNodeParameter('status', i, 'publish');
if (status) {
params.status = status;
}
// Adicionar categorias e tags apenas para posts
if (resource === 'post') {
var categories = execFunctions.getNodeParameter('categories', i, '');
if (categories) {
params.categories = categories.split(',').map(function (id) { return parseInt(id.trim(), 10); });
}
var tags = execFunctions.getNodeParameter('tags', i, '');
if (tags) {
params.tags = tags.split(',').map(function (id) { return parseInt(id.trim(), 10); });
}
}
// Verificar opções de SEO
var seoOptions = execFunctions.getNodeParameter('seoOptions', i, {});
// Processar metadados SEO
if ((_a = seoOptions.metadataValues) === null || _a === void 0 ? void 0 : _a.includeSeoMetadata) {
params.includeSeoMetadata = true;
}
// Processar FAQs
if ((_b = seoOptions.faqValues) === null || _b === void 0 ? void 0 : _b.includeFaqs) {
params.includeFaqs = true;
}
// Processar CTA
if ((_c = seoOptions.ctaValues) === null || _c === void 0 ? void 0 : _c.includeCta) {
params.includeCta = true;
}
return params;
};
/**
* Valida e formata os parâmetros para excluir um post/página
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getDeleteParams = function (execFunctions, i) {
// Obter ID do post/página
var id = execFunctions.getNodeParameter('id', i);
// Verificar ID
if (!id || id <= 0) {
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Invalid ID: ".concat(id, ". Please provide a valid ID greater than 0."), { itemIndex: i });
}
// Parâmetros básicos
var params = { id: id };
// Verificar se deve forçar exclusão permanente
var force = execFunctions.getNodeParameter('force', i, false);
params.force = force;
// Adicionar aviso sobre exclusão permanente
if (force) {
execFunctions.logger.warn("ID ".concat(id, " will be permanently deleted. This action cannot be undone."));
}
else {
execFunctions.logger.info("ID ".concat(id, " will be moved to trash. You can restore it later from the WordPress admin."));
}
return params;
};
/**
* Valida e formata os parâmetros para qualquer operação
* @param execFunctions Funções de execução do n8n
* @param i Índice do item atual
* @param resource Tipo de recurso (post ou page)
* @param operation Operação a ser realizada
* @returns Parâmetros validados e formatados
*/
WordPressValidator.getParams = function (execFunctions, i, resource, operation) {
switch (operation) {
case 'create':
return this.getCreateParams(execFunctions, i, resource);
case 'update':
return this.getUpdateParams(execFunctions, i, resource);
case 'get':
return this.getGetParams(execFunctions, i);
case 'getAll':
return this.getGetAllParams(execFunctions, i, resource);
case 'delete':
return this.getDeleteParams(execFunctions, i);
default:
throw new n8n_workflow_1.NodeOperationError(execFunctions.getNode(), "Unsupported operation: ".concat(operation), { itemIndex: i });
}
};
return WordPressValidator;
}());
exports.WordPressValidator = WordPressValidator;