@kaia-team/n8n-nodes-kaia
Version:
n8n nodes for Kaia LLM integration
137 lines • 4.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.adminApiProperties = void 0;
exports.handleAdminApi = handleAdminApi;
const utils_1 = require("../utils");
/**
* Admin API Properties
* Properties specific to the admin API resource
*/
exports.adminApiProperties = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['admin'],
},
},
options: [
{
name: 'DELETE',
value: 'delete',
description: 'Delete data via the API',
action: 'Delete data via the API',
},
{
name: 'GET',
value: 'get',
description: 'Get data from the API',
action: 'Get data from the API',
},
{
name: 'POST',
value: 'post',
description: 'Create data via the API',
action: 'Create data via the API',
},
{
name: 'PUT',
value: 'put',
description: 'Update data via the API',
action: 'Update data via the API',
},
],
default: 'get',
},
{
displayName: 'Endpoint',
name: 'endpoint',
type: 'string',
default: '',
placeholder: 'assistants',
description: 'The API endpoint to call (e.g., assistants, chat_histories, api_configs)',
required: true,
displayOptions: {
show: {
resource: ['admin'],
},
},
},
// TODO: Add body parameter for POST/PUT operations
// TODO: Add additionalFields parameter (shared across APIs)
];
/**
* Admin API Handler
* Handles requests to the admin API
*/
async function handleAdminApi(executeFunctions, itemIndex, adminUrl, adminToken) {
const operation = executeFunctions.getNodeParameter('operation', itemIndex);
const endpoint = executeFunctions.getNodeParameter('endpoint', itemIndex);
const additionalFields = executeFunctions.getNodeParameter('additionalFields', itemIndex);
const url = `${adminUrl}/${endpoint}`;
const headers = (0, utils_1.createHeaders)(adminToken, additionalFields);
let qs = undefined;
if (additionalFields.queryParameters) {
const queryParameters = additionalFields.queryParameters.parameters;
if (queryParameters) {
qs = {};
for (const param of queryParameters) {
qs[param.name] = param.value;
}
}
}
let body = undefined;
if (['POST', 'PUT', 'PATCH'].includes(operation.toUpperCase())) {
body = executeFunctions.getNodeParameter('body', itemIndex, {});
}
// For widgets create/update, build specific body
if (executeFunctions.getNodeParameter('resource', itemIndex) === 'widgets' && ['create', 'update'].includes(operation)) {
const widgetBody = { widget_config: {} };
// Collect parameters
const params = [
'name',
'question_timeline',
'voice',
'initial_status',
'available_assistants',
'assistant_id',
'theme',
'theme_color' /* add all others */,
];
for (const param of params) {
widgetBody.widget_config[param] = executeFunctions.getNodeParameter(param, itemIndex, '');
}
// Handle available_assistants as array
if (widgetBody.widget_config.available_assistants) {
widgetBody.widget_config.available_assistants = widgetBody.widget_config.available_assistants
.split(',')
.map(s => s.trim());
}
// Handle vec_db_ids
const vecDbIds = executeFunctions.getNodeParameter('vec_db_ids.vecDbItems', itemIndex, []);
widgetBody.widget_config.vec_db_ids = vecDbIds.map(item => ({
id: item.id,
weight: item.weight,
}));
// Handle files - for now, assume string; later add form-data if needed
widgetBody.widget_config.icon = executeFunctions.getNodeParameter('icon', itemIndex, '');
widgetBody.widget_config.remove_icon = executeFunctions.getNodeParameter('remove_icon', itemIndex, false)
? 1
: 0;
// Similarly for other files
// TODO: If files are actual uploads, switch to FormData and multipart
body = widgetBody;
}
const response = await executeFunctions.helpers.httpRequest({
method: operation.toUpperCase(),
url,
headers,
...(qs ? { qs } : {}),
...(body ? { body } : {}),
});
return response;
}
//# sourceMappingURL=adminApi.js.map