@net3/queuer
Version:
165 lines (164 loc) • 7.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getQueue = 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.getQueue = (0, pieces_framework_1.createAction)({
name: 'get_queue',
displayName: 'Get Queue',
description: 'Show queue settings and status information for a specific queue',
props: {
queueId: pieces_framework_1.Property.Dropdown({
displayName: 'Select Queue',
description: 'Select the queue to view settings and status for',
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 view'
};
}
catch (error) {
console.error('Failed to fetch MCP tools:', error);
return {
options: [],
placeholder: 'Failed to connect to MCP server'
};
}
},
}),
includeUsageDetails: pieces_framework_1.Property.Checkbox({
displayName: 'Include Usage Details',
description: 'Include detailed usage statistics and active hours information',
required: false,
defaultValue: true,
}),
},
async run(context) {
try {
const { queueId, includeUsageDetails } = context.propsValue;
if (!queueId) {
throw new Error('Queue ID is required');
}
// Verify queue exists
let queue;
try {
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.`);
}
}
catch (error) {
throw new Error(`Failed to get queue configuration: ${error.message}`);
}
// Get complete queue details
let details;
try {
details = await queue_manager_1.QueueManager.getQueueDetails(context, queueId);
if (!details) {
throw new Error('Failed to retrieve queue details');
}
}
catch (error) {
throw new Error(`Failed to get queue details: ${error.message}`);
}
// Validate details structure
if (!details.configuration || !details.state || !details.usage) {
throw new Error('Incomplete queue details received - missing configuration, state, or usage data');
}
// Format the configuration for output
let baseResponse;
try {
baseResponse = {
success: true,
queueId: queueId,
configuration: {
id: details.configuration.id,
mcpToolName: details.configuration.mcpToolName,
delayType: details.configuration.delayType,
delayUnit: details.configuration.delayUnit,
delayValue: details.configuration.delayValue,
delayMin: details.configuration.delayMin,
delayMax: details.configuration.delayMax,
dailyLimit: details.configuration.dailyLimit,
hourlyLimit: details.configuration.hourlyLimit,
createdAt: details.configuration.createdAt ? new Date(details.configuration.createdAt).toISOString() : null,
updatedAt: details.configuration.updatedAt ? new Date(details.configuration.updatedAt).toISOString() : null,
lastUsed: details.configuration.lastUsed ? new Date(details.configuration.lastUsed).toISOString() : null,
totalProcessed: details.configuration.totalProcessed || 0,
},
status: details.status,
currentState: {
pendingItems: details.state.itemCount,
currentlyExecuting: details.state.currentExecutingItem,
lastExecutedTime: details.state.lastExecutedTime ? new Date(details.state.lastExecutedTime).toISOString() : null,
lastReleaseTime: details.state.lastReleaseTime ? new Date(details.state.lastReleaseTime).toISOString() : null,
version: details.state.version,
},
retrievedAt: new Date().toISOString(),
message: `Successfully retrieved queue information for "${details.configuration.mcpToolName}"`,
};
}
catch (error) {
throw new Error(`Failed to format queue response: ${error.message}`);
}
if (includeUsageDetails) {
try {
return {
...baseResponse,
usageDetails: {
currentUsage: details.usage,
activeHours: details.configuration.activeHours || null,
rateLimits: {
daily: {
limit: details.configuration.dailyLimit || 0,
used: details.usage.dailyCount,
remaining: details.status?.dailyRemaining,
},
hourly: {
limit: details.configuration.hourlyLimit || 0,
used: details.usage.hourlyCount,
remaining: details.status?.hourlyRemaining,
},
},
activeHoursStatus: {
isWithinActiveHours: details.status?.isWithinActiveHours,
nextActiveWindow: details.status?.nextActiveWindow,
},
},
};
}
catch (error) {
throw new Error(`Failed to format usage details: ${error.message}`);
}
}
return baseResponse;
}
catch (error) {
throw new Error(`Get Queue Action Failed: ${error.message}`);
}
},
});