@ai-growth/n8n-nodes-wordpress
Version:
n8n node for WordPress integration with AI GROWTH - SEO WP plugin
178 lines • 7.01 kB
JavaScript
;
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