/** * Media Management Tools */ import { getPayloadClient } from '../client.js'; import { readFileSync } from 'fs'; import { basename } from 'path'; export async function mediaListTool(args: any) { try { const client = await getPayloadClient(); const response = await client.media.list({ page: args.page || 1, limit: args.limit || 10, }); return { success: true, data: response, message: `Retrieved ${response.docs?.length || 0} media files`, }; } catch (error: any) { throw new Error(`Failed to list media: ${error.message}`); } } export async function mediaUploadTool(args: any) { if (!args.file) { throw new Error('File path or data is required'); } try { const client = await getPayloadClient(); // Handle file upload let fileData; if (args.file.startsWith('/')) { // File path provided fileData = readFileSync(args.file); } else { // Assume base64 data fileData = Buffer.from(args.file, 'base64'); } const media = await client.media.create({ file: fileData, alt: args.alt, caption: args.caption, }); return { success: true, data: media, message: 'Media uploaded successfully', }; } catch (error: any) { throw new Error(`Failed to upload media: ${error.message}`); } } export async function mediaGetTool(args: any) { if (!args.id) { throw new Error('Media ID is required'); } try { const client = await getPayloadClient(); const media = await client.media.retrieve(args.id); return { success: true, data: media, }; } catch (error: any) { if (error.status === 404) { throw new Error(`Media not found: ${args.id}`); } throw new Error(`Failed to get media: ${error.message}`); } } export async function mediaDeleteTool(args: any) { if (!args.id) { throw new Error('Media ID is required'); } try { const client = await getPayloadClient(); await client.media.delete(args.id); return { success: true, message: `Media deleted: ${args.id}`, }; } catch (error: any) { throw new Error(`Failed to delete media: ${error.message}`); } }