UNPKG

@net3/queuer

Version:

118 lines (117 loc) 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clearQueue = void 0; const pieces_framework_1 = require("@activepieces/pieces-framework"); const queue_manager_1 = require("../common/queue-manager"); const mcp_manager_1 = require("../common/mcp-manager"); exports.clearQueue = (0, pieces_framework_1.createAction)({ name: 'clear_queue', displayName: 'Clear Queue', description: 'Clear all items from a queue', props: { queueId: pieces_framework_1.Property.Dropdown({ displayName: 'Select Queue', description: 'Select the queue to clear all items from', required: true, refreshers: [], options: async ({ auth }) => { const authConfig = auth; if (!authConfig.mcpServerUrl) { return { options: [], placeholder: 'MCP Server URL required in auth configuration' }; } try { const config = { mcpServerUrl: authConfig.mcpServerUrl }; const tools = await mcp_manager_1.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) => ({ 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) { try { const { queueId } = context.propsValue; if (!queueId) { throw new Error('Queue ID is required'); } // Verify queue exists const queue = await queue_manager_1.QueueManager.getQueueConfiguration(context, queueId); 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 queue_manager_1.QueueManager.getQueueStatus(context, queueId); if (!statusBefore) { throw new Error(`Failed to get queue status for "${queueId}"`); } } catch (error) { throw new Error(`Failed to get queue status before clearing: ${error.message}`); } // Clear the queue let result; try { result = await queue_manager_1.QueueManager.clearQueue(context, queueId); if (!result) { throw new Error('Clear queue operation returned no result'); } } catch (error) { throw new Error(`Failed to clear queue: ${error.message}`); } // Get updated status let statusAfter; try { statusAfter = await queue_manager_1.QueueManager.getQueueStatus(context, queueId); if (!statusAfter) { throw new Error(`Failed to get queue status after clearing`); } } catch (error) { 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) { throw new Error(`Clear Queue Action Failed: ${error.message}`); } }, });