Files
dockhand/routes/api/notifications/test/+server.ts
Jarek Krochmalski 62e3c6439e Initial commit
2025-12-28 21:16:03 +01:00

62 lines
1.8 KiB
TypeScript

import { json } from '@sveltejs/kit';
import { testNotification } from '$lib/server/notifications';
import { authorize } from '$lib/server/authorize';
import type { RequestHandler } from './$types';
// Test notification with provided config (without saving)
export const POST: RequestHandler = async ({ request, cookies }) => {
const auth = await authorize(cookies);
if (auth.authEnabled && !await auth.can('settings', 'edit')) {
return json({ error: 'Permission denied' }, { status: 403 });
}
try {
const data = await request.json();
if (!data.type || !data.config) {
return json({ error: 'Type and config are required' }, { status: 400 });
}
// Validate SMTP config
if (data.type === 'smtp') {
const config = data.config;
if (!config.host || !config.from_email || !config.to_emails?.length) {
return json({ error: 'Host, from email, and at least one recipient are required' }, { status: 400 });
}
}
// Validate Apprise config
if (data.type === 'apprise') {
const config = data.config;
if (!config.urls?.length) {
return json({ error: 'At least one Apprise URL is required' }, { status: 400 });
}
}
// Create a fake notification setting object for testing
const setting = {
id: 0,
name: data.name || 'Test',
type: data.type as 'smtp' | 'apprise',
enabled: true,
config: data.config,
event_types: [],
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
};
const success = await testNotification(setting);
return json({
success,
message: success ? 'Test notification sent successfully' : 'Failed to send test notification'
});
} catch (error: any) {
console.error('Error testing notification:', error);
return json({
success: false,
error: error.message || 'Failed to test notification'
}, { status: 500 });
}
};