@net3/queuer
Version:
118 lines (117 loc) • 4.93 kB
JavaScript
;
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}`);
}
},
});