getDetail
codebolt.actionBlock.getDetail(actionBlockName: string): Promise<GetActionBlockDetailResponse>
Retrieves detailed information about a specific ActionBlock including metadata, input parameters, and output structure.
Parameters
actionBlockName(string): The name of the ActionBlock to retrieve details for.
Returns
Promise<[GetActionBlockDetailResponse](/docs/reference/type-reference/codeboltjs/interfaces/GetActionBlockDetailResponse)>: A promise that resolves to ActionBlock details.
Response Structure
Returns GetActionBlockDetailResponse with detailed ActionBlock information.
Response Properties:
type(string): Always "getActionBlockDetailResponse"success(boolean): Operation success statusactionBlock(ActionBlock, optional): Detailed ActionBlock objectid(string): Unique identifiername(string): ActionBlock namedescription(string): Detailed descriptionversion(string): Version numberentryPoint(string): Entry point filepath(string): File system pathtype(ActionBlockType): Type of ActionBlockmetadata(ActionBlockMetadata): Complete metadataauthor(string, optional): Author informationtags(string[], optional): Categorization tagsdependencies(string[], optional): Required dependenciesinputs(ActionBlockInput[], optional): Input parameter definitionsoutputs(ActionBlockOutput[], optional): Output definitions
error(string, optional): Error details if failed
Examples
Example 1: Get ActionBlock Details
import codebolt from '@codebolt/codeboltjs';
const detail = await codebolt.actionBlock.getDetail('file-reader');
if (detail.success && detail.actionBlock) {
console.log('ActionBlock Details:');
console.log(`Name: ${detail.actionBlock.name}`);
console.log(`Type: ${detail.actionBlock.type}`);
console.log(`Version: ${detail.actionBlock.version}`);
console.log(`Description: ${detail.actionBlock.description}`);
}
Example 2: Inspect Input Parameters
const detail = await codebolt.actionBlock.getDetail('data-processor');
if (detail.actionBlock?.metadata.inputs) {
console.log('Required Parameters:');
detail.actionBlock.metadata.inputs
.filter(input => input.required)
.forEach(input => {
console.log(`- ${input.name} (${input.type}): ${input.description}`);
});
console.log('\nOptional Parameters:');
detail.actionBlock.metadata.inputs
.filter(input => !input.required)
.forEach(input => {
const defaultVal = input.default !== undefined ? ` (default: ${input.default})` : '';
console.log(`- ${input.name} (${input.type}): ${input.description}${defaultVal}`);
});
}
Example 3: Build Parameter Validation
const validateParams = async (actionBlockName: string, params: Record<string, any>) => {
const detail = await codebolt.actionBlock.getDetail(actionBlockName);
if (!detail.success || !detail.actionBlock?.metadata.inputs) {
throw new Error('Failed to get ActionBlock details');
}
// Check required parameters
const required = detail.actionBlock.metadata.inputs
.filter(input => input.required)
.map(input => input.name);
const missing = required.filter(name => !(name in params));
if (missing.length > 0) {
throw new Error(`Missing required parameters: ${missing.join(', ')}`);
}
// Validate types
for (const input of detail.actionBlock.metadata.inputs) {
if (input.name in params) {
const value = params[input.name];
const expectedType = input.type;
// Add type validation logic here
console.log(`Validating ${input.name}: ${typeof value} vs ${expectedType}`);
}
}
return true;
};
// Usage
await validateParams('file-reader', { path: '/path/to/file' });
Example 4: Build Execution Wrapper
const executeWithValidation = async (
actionBlockName: string,
userParams: Record<string, any>
) => {
// Get details
const detail = await codebolt.actionBlock.getDetail(actionBlockName);
if (!detail.success) {
throw new Error('ActionBlock not found');
}
// Build parameters with defaults
const params: Record<string, any> = {};
detail.actionBlock?.metadata.inputs?.forEach(input => {
if (input.default !== undefined) {
params[input.name] = input.default;
}
});
// Override with user params
Object.assign(params, userParams);
// Execute
return await codebolt.actionBlock.start(actionBlockName, params);
};
const result = await executeWithValidation('file-reader', { path: 'data.txt' });
Common Use Cases
Dynamic Form Builder
const buildFormSchema = async (actionBlockName: string) => {
const detail = await codebolt.actionBlock.getDetail(actionBlockName);
if (!detail.success || !detail.actionBlock) {
return null;
}
return {
name: detail.actionBlock.name,
description: detail.actionBlock.description,
fields: detail.actionBlock.metadata.inputs?.map(input => ({
name: input.name,
type: mapTypeToFormType(input.type),
label: input.name,
description: input.description,
required: input.required || false,
defaultValue: input.default
})) || []
};
};
function mapTypeToFormType(type: string): string {
const mapping: Record<string, string> = {
'string': 'text',
'number': 'number',
'boolean': 'checkbox',
'array': 'multiselect',
'object': 'json'
};
return mapping[type] || 'text';
}
Notes
- Use details to understand required parameters before execution
- Input schemas help build dynamic forms
- Output schemas help process results
- Check dependencies before execution
- Version information helps track compatibility
- Author information can indicate trust level
- Tags help categorize ActionBlocks
- Path information shows where the ActionBlock is stored
- Entry point indicates the main execution file