get_projects
Retrieve all projects in a tenant to manage performance test data and build engineering workflows.
Instructions
Retrieve all projects in a tenant.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- The main handler function that fetches the list of projects from LoadRunner Cloud API using authentication token.const executeFunction = async () => { const baseUrl = process.env.LRC_BASE_URL; const tenantId = process.env.LRC_TENANT_ID; const token = await getAuthToken(); try { // Construct the URL with query parameters const url = new URL(`${baseUrl}/projects`); url.searchParams.append('TENANTID', tenantId); // Set up headers for the request const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }; // Perform the fetch request const response = await fetch(url.toString(), { method: 'GET', headers }); // Check if the response was successful if (!response.ok) { const text = await response.text(); try { const errorData = JSON.parse(text); throw new Error(JSON.stringify(errorData)); } catch (jsonErr) { // Not JSON, log the raw text console.error('Non-JSON error response:', text); throw new Error(text); } } // Parse and return the response data const text = await response.text(); try { const data = JSON.parse(text); return data; } catch (jsonErr) { // Not JSON, log the raw text console.error('Non-JSON success response:', text); return { error: 'Received non-JSON response from API', raw: text }; } } catch (error) { console.error('Error retrieving projects:', error); return { error: 'An error occurred while retrieving projects.' }; } };
- Tool definition including schema for parameters (empty) and description.const apiTool = { function: executeFunction, definition: { type: 'function', function: { name: 'get_projects', description: 'Retrieve all projects in a tenant.', parameters: { type: 'object', properties: {}, required: [] } } } };
- lib/tools.js:7-16 (registration)Registers the get_projects tool by dynamically importing and collecting apiTool from all tool files listed in paths.js.export async function discoverTools() { const toolPromises = toolPaths.map(async (file) => { const module = await import(`../tools/${file}`); return { ...module.apiTool, path: file, }; }); return Promise.all(toolPromises); }
- Helper function to obtain authentication token required for API calls including get_projects.const getAuthToken = async () => { const baseUrl = process.env.LRC_BASE_URL; const tenantId = process.env.LRC_TENANT_ID; const clientId = process.env.LRC_CLIENT_ID; const clientSecret = process.env.LRC_CLIENT_SECRET; try { const url = new URL(`${baseUrl}/auth-client`); url.searchParams.append('TENANTID', tenantId); const headers = { 'Content-Type': 'application/json', 'accept': 'application/json' }; const body = JSON.stringify({ client_id: clientId, client_secret: clientSecret }); const response = await fetch(url.toString(), { method: 'POST', headers, body }); if (!response.ok) { const text = await response.text(); try { const errorData = JSON.parse(text); throw new Error(JSON.stringify(errorData)); } catch (jsonErr) { // Not JSON, log the raw text console.error('Non-JSON error response:', text); throw new Error(text); } } const data = await response.json(); // Adjust according to actual API response structure return data.access_token || data.token || data; } catch (error) { console.error('Error retrieving auth token:', error); return { error: 'An error occurred while retrieving auth token.' }; } };
- tools/paths.js:1-2 (registration)Lists the path to the get_projects tool file for dynamic registration.export const toolPaths = [ 'loadrunner-cloud/load-runner-cloud-api/projects-get-projects.js',