UNPKG

@ai-growth/n8n-nodes-wordpress

Version:

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

178 lines 7.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CtaService = void 0; const ErrorUtils_1 = require("../utils/ErrorUtils"); const SeoService_1 = require("./SeoService"); /** * Serviço para gerenciamento de CTAs do WordPress */ class CtaService { /** * Construtor do serviço * @param client Cliente WordPress * @param seoService Serviço SEO (opcional, será criado se não fornecido) */ constructor(client, seoService) { this.pluginEndpoint = 'ai-growth-seo/v1'; this.client = client; this.seoService = seoService || new SeoService_1.SeoService(client); } /** * Obtém o CTA de um post específico * @param postId ID do post * @param options Opções da consulta * @returns Objeto CTA ou null se não existir */ async getPostCta(postId, options = {}) { const { requirePlugin = false } = options; // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível e é requerido, lança erro if (pluginInfo.status !== 'active' && requirePlugin) { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is required but not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } // Se o plugin não está disponível, retorna null if (pluginInfo.status !== 'active') { return null; } try { // Obter CTA do post const response = await this.client.get(`${this.pluginEndpoint}/post/${postId}/cta`); // Verificar se o CTA existe e é válido if (!response || (!response.text && !response.url)) { return null; } // Formatar e retornar CTA return this.formatCta(response); } catch (error) { // Se o plugin não está disponível mas não é requerido, retorna null if (!requirePlugin) { return null; } // Caso contrário, relança o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to fetch CTA for post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Atualiza o CTA de um post específico * @param postId ID do post * @param cta CTA para atualizar * @returns CTA atualizado */ async updatePostCta(postId, cta) { // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível, lança erro if (pluginInfo.status !== 'active') { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } try { // Atualizar CTA do post const response = await this.client.put(`${this.pluginEndpoint}/post/${postId}/cta`, cta); // Verificar se o CTA foi atualizado corretamente if (!response) { return null; } // Formatar e retornar CTA atualizado return { text: response.text || '', url: response.url || '' }; } catch (error) { // Se a rota de PUT não existe, tentar usar POST (fallback) if (error instanceof ErrorUtils_1.WordPressError && error.type === ErrorUtils_1.WordPressErrorType.SERVER) { try { // Tentar adicionar CTA como fallback return await this.addPostCta(postId, cta); } catch (fallbackError) { // Se o fallback também falhar, lança o erro original throw error; } } // Relançar o erro original if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to update CTA for post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Adiciona um CTA a um post * @param postId ID do post * @param cta CTA para adicionar * @returns CTA adicionado */ async addPostCta(postId, cta) { try { // Adicionar CTA ao post const response = await this.client.post(`${this.pluginEndpoint}/post/${postId}/cta`, cta); // Verificar se o CTA foi adicionado corretamente if (!response) { return null; } // Formatar e retornar CTA adicionado return { text: response.text || '', url: response.url || '' }; } catch (error) { // Relançar o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to add CTA to post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Remove o CTA de um post * @param postId ID do post * @returns true se removido com sucesso */ async removePostCta(postId) { // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível, lança erro if (pluginInfo.status !== 'active') { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } try { // Remover CTA do post await this.client.delete(`${this.pluginEndpoint}/post/${postId}/cta`); // Se não houve erro, considerar como sucesso return true; } catch (error) { // Relançar o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to remove CTA from post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Formata os dados de CTA do plugin * @param cta Dados de CTA da API * @returns CTA formatado */ formatCta(cta) { if (typeof cta === 'object' && cta !== null) { return { text: cta.text || '', url: cta.url || '', }; } return { text: '', url: '', }; } } exports.CtaService = CtaService; //# sourceMappingURL=CtaService.js.map