UNPKG

@net3/queuer

Version:

129 lines (113 loc) 4.17 kB
import { createAction, Property, ActionContext, } from '@activepieces/pieces-framework'; import { QueueManager } from '../common/queue-manager'; import { MCPManager } from '../common/mcp-manager'; export const clearQueue = createAction({ name: 'clear_queue', displayName: 'Clear Queue', description: 'Clear all items from a queue', props: { queueId: Property.Dropdown({ displayName: 'Select Queue', description: 'Select the queue to clear all items from', required: true, refreshers: [], options: async ({ auth }) => { const authConfig = auth as { mcpServerUrl?: string }; if (!authConfig.mcpServerUrl) { return { options: [], placeholder: 'MCP Server URL required in auth configuration' }; } try { const config = { mcpServerUrl: authConfig.mcpServerUrl }; const tools = await MCPManager.listMCPTools(config); if (tools.length === 0) { return { options: [], placeholder: 'No MCP tools found' }; } // Generate queue options based on available tools const queueOptions = tools.map((tool: any) => ({ label: `Queue: ${tool.name} - ${tool.description || 'No description'}`, value: `mcp_${tool.name}_queue`, })); return { options: queueOptions, placeholder: 'Select a queue to clear' }; } catch (error) { console.error('Failed to fetch MCP tools:', error); return { options: [], placeholder: 'Failed to connect to MCP server' }; } }, }), }, async run(context: ActionContext) { try { const { queueId } = context.propsValue; if (!queueId) { throw new Error('Queue ID is required'); } // Verify queue exists const queue = await QueueManager.getQueueConfiguration(context, queueId as string); if (!queue) { throw new Error(`Queue "${queueId}" not found. Make sure the queue was created using Create/Update Queue action.`); } // Get current status before clearing let statusBefore; try { statusBefore = await QueueManager.getQueueStatus(context, queueId as string); if (!statusBefore) { throw new Error(`Failed to get queue status for "${queueId}"`); } } catch (error: any) { throw new Error(`Failed to get queue status before clearing: ${error.message}`); } // Clear the queue let result; try { result = await QueueManager.clearQueue(context, queueId as string); if (!result) { throw new Error('Clear queue operation returned no result'); } } catch (error: any) { throw new Error(`Failed to clear queue: ${error.message}`); } // Get updated status let statusAfter; try { statusAfter = await QueueManager.getQueueStatus(context, queueId as string); if (!statusAfter) { throw new Error(`Failed to get queue status after clearing`); } } catch (error: any) { throw new Error(`Failed to get queue status after clearing: ${error.message}`); } // Verify the clear operation was successful if (statusAfter.pendingItems > 0) { throw new Error(`Clear operation may have failed - ${statusAfter.pendingItems} items still remain in queue`); } return { success: true, queueId: result.queueId, clearedCount: result.clearedCount, queueName: queue.mcpToolName, statusBefore, statusAfter, clearedAt: new Date().toISOString(), message: `Successfully cleared ${result.clearedCount} items from queue "${queue.mcpToolName}"`, }; } catch (error: any) { throw new Error(`Clear Queue Action Failed: ${error.message}`); } }, });