wulf-pulse/lib/services/pipeline-steps/create-note.ts

52 lines
1.6 KiB
TypeScript

/**
* Create Note Step — add a note to an Autotask ticket.
* Config: { ticket_id: "{{context.ticket_id}}", title: "...", body: "...", note_type: 1, publish: 1 }
*/
import { registerStepExecutor } from '../pipeline-engine';
import { AutotaskClient } from '../autotask-client';
import { PipelineStep, PipelineContext, StepExecutorResult } from '../../types/pipeline';
let _client: AutotaskClient | null = null;
function getClient(): AutotaskClient {
if (!_client) {
_client = new AutotaskClient({
apiUrl: process.env.AUTOTASK_API_URL || '',
username: process.env.AUTOTASK_USERNAME || '',
password: process.env.AUTOTASK_SECRET || '',
apiIntegrationCode: process.env.AUTOTASK_API_INTEGRATION_CODE || '',
});
}
return _client;
}
async function executeCreateNote(
step: PipelineStep,
_context: PipelineContext,
_executionId: number
): Promise<StepExecutorResult> {
const ticketId = Number(step.config.ticket_id);
const title = step.config.title || 'Pipeline Note';
const body = step.config.body || '';
const noteType = Number(step.config.note_type) || 1;
const publish = Number(step.config.publish) || 1;
if (!ticketId || isNaN(ticketId)) {
return { success: false, error: 'Missing or invalid ticket_id' };
}
console.log(`[PIPELINE:create_note] Adding note to ticket #${ticketId}: "${title}"`);
const client = getClient();
await client.createEntity('TicketNotes', {
ticketID: ticketId,
title,
description: body,
noteType,
publish,
});
return { success: true, output: { note_created: true, ticket_id: ticketId } };
}
registerStepExecutor('create_note', executeCreateNote);