UNPKG

@ai-growth/wordpress

Version:

n8n node for WordPress integration with AI GROWTH - SEO WP plugin

349 lines (348 loc) 15.6 kB
"use strict"; 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;