93 lines
3.4 KiB
TypeScript
93 lines
3.4 KiB
TypeScript
/**
|
|
* Webhook Registration API
|
|
* POST /api/webhooks/register — Register all webhooks with Autotask
|
|
* POST /api/webhooks/register?entity=Tickets — Register a single entity
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
import { AutotaskWebhookManager } from '@/lib/services/autotask-webhook-manager';
|
|
import { WebhookEntityType, WEBHOOK_SUPPORTED_ENTITIES } from '@/lib/types/webhook';
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const manager = new AutotaskWebhookManager();
|
|
const { searchParams } = new URL(request.url);
|
|
const entityParam = searchParams.get('entity');
|
|
|
|
if (entityParam) {
|
|
// Register a single entity type
|
|
const entityType = entityParam as WebhookEntityType;
|
|
if (!WEBHOOK_SUPPORTED_ENTITIES.includes(entityType)) {
|
|
return NextResponse.json(
|
|
{ error: `Unsupported entity type: ${entityParam}. Supported: ${WEBHOOK_SUPPORTED_ENTITIES.join(', ')}` },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const result = await manager.registerWebhook(entityType);
|
|
return NextResponse.json({ success: true, results: [result] });
|
|
}
|
|
|
|
// Register all supported entities
|
|
const results = await manager.registerAll();
|
|
const allSuccess = results.every(r => r.success);
|
|
|
|
return NextResponse.json({
|
|
success: allSuccess,
|
|
results,
|
|
summary: {
|
|
total: results.length,
|
|
succeeded: results.filter(r => r.success).length,
|
|
failed: results.filter(r => !r.success).length,
|
|
},
|
|
});
|
|
} catch (error) {
|
|
const msg = error instanceof Error ? error.message : String(error);
|
|
console.error('[WEBHOOK-REGISTER] Error:', msg);
|
|
return NextResponse.json({ error: msg }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* DELETE /api/webhooks/register — Deregister all webhooks
|
|
* DELETE /api/webhooks/register?entity=Tickets — Deregister a single entity
|
|
*/
|
|
export async function DELETE(request: NextRequest) {
|
|
try {
|
|
const manager = new AutotaskWebhookManager();
|
|
const { searchParams } = new URL(request.url);
|
|
const entityParam = searchParams.get('entity');
|
|
|
|
if (entityParam) {
|
|
const entityType = entityParam as WebhookEntityType;
|
|
if (!WEBHOOK_SUPPORTED_ENTITIES.includes(entityType)) {
|
|
return NextResponse.json(
|
|
{ error: `Unsupported entity type: ${entityParam}` },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Find the webhook ID from DB
|
|
const { postgresClient } = await import('@/lib/services/postgres-client');
|
|
const result = await postgresClient.query<{ autotask_webhook_id: string }>(
|
|
`SELECT autotask_webhook_id FROM webhook_configs WHERE entity_type = $1 AND autotask_webhook_id IS NOT NULL`,
|
|
[entityType]
|
|
);
|
|
|
|
if (result.rows.length === 0 || !result.rows[0].autotask_webhook_id) {
|
|
return NextResponse.json({ error: `No webhook registered for ${entityType}` }, { status: 404 });
|
|
}
|
|
|
|
await manager.deleteWebhook(entityType, parseInt(result.rows[0].autotask_webhook_id));
|
|
return NextResponse.json({ success: true, entityType });
|
|
}
|
|
|
|
// Deregister all
|
|
await manager.deregisterAll();
|
|
return NextResponse.json({ success: true, message: 'All webhooks deregistered' });
|
|
} catch (error) {
|
|
const msg = error instanceof Error ? error.message : String(error);
|
|
console.error('[WEBHOOK-DEREGISTER] Error:', msg);
|
|
return NextResponse.json({ error: msg }, { status: 500 });
|
|
}
|
|
}
|