/** * ActiveCampaign Campaign Tools */ import { ActiveCampaignClient } from '../client/index.js'; import { Campaign } from '../types/index.js'; export function createCampaignTools(client: ActiveCampaignClient) { return { ac_list_campaigns: { description: 'List all campaigns', inputSchema: { type: 'object', properties: { type: { type: 'string', description: 'Campaign type filter' }, status: { type: 'number', description: 'Status filter' }, limit: { type: 'number', description: 'Max results', default: 20 }, }, }, handler: async (params: any) => { const campaigns = await client.paginate('/campaigns', params, params.limit || 20); return { campaigns, count: campaigns.length }; }, }, ac_get_campaign: { description: 'Get a campaign by ID', inputSchema: { type: 'object', properties: { id: { type: 'string', description: 'Campaign ID' }, }, required: ['id'], }, handler: async (params: { id: string }) => { return client.get<{ campaign: Campaign }>(`/campaigns/${params.id}`); }, }, ac_create_campaign: { description: 'Create a new campaign', inputSchema: { type: 'object', properties: { type: { type: 'string', description: 'Campaign type', enum: ['single', 'recurring', 'split', 'responder', 'reminder', 'special', 'activerss', 'automation'], }, name: { type: 'string', description: 'Campaign name' }, userid: { type: 'string', description: 'User ID' }, }, required: ['type', 'name'], }, handler: async (params: Campaign) => { return client.post<{ campaign: Campaign }>('/campaigns', { campaign: params }); }, }, ac_get_campaign_stats: { description: 'Get campaign statistics', inputSchema: { type: 'object', properties: { id: { type: 'string', description: 'Campaign ID' }, }, required: ['id'], }, handler: async (params: { id: string }) => { const campaign = await client.get<{ campaign: Campaign }>(`/campaigns/${params.id}`); return { campaign: (campaign as any).campaign, stats: { opens: (campaign as any).campaign.opens, uniqueOpens: (campaign as any).campaign.uniqueopens, clicks: (campaign as any).campaign.linkclicks, uniqueClicks: (campaign as any).campaign.uniquelinkclicks, unsubscribes: (campaign as any).campaign.unsubscribes, bounces: (campaign as any).campaign.hardbounces, }, }; }, }, ac_delete_campaign: { description: 'Delete a campaign', inputSchema: { type: 'object', properties: { id: { type: 'string', description: 'Campaign ID' }, }, required: ['id'], }, handler: async (params: { id: string }) => { return client.delete(`/campaigns/${params.id}`); }, }, }; }