mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
* refactor: Agent CodeFiles, abortUpload WIP * feat: code environment file upload * refactor: useLazyEffect * refactor: - Add `watch` from `useFormContext` to check if code execution is enabled - Disable file upload button if `agent_id` is not selected or code execution is disabled * WIP: primeCodeFiles; refactor: rename sessionId to session_id for uniformity * Refactor: Rename session_id to sessionId for uniformity in AuthService.js * chore: bump @librechat/agents to version 1.7.1 * WIP: prime code files * refactor: Update code env file upload method to use read stream * feat: reupload code env file if no longer active * refactor: isAssistantTool -> isEntityTool + address type issues * feat: execute code tool hook * refactor: Rename isPluginAuthenticated to checkPluginAuth in PluginController.js * refactor: Update PluginController.js to use AuthType constant for comparison * feat: verify tool authentication (execute_code) * feat: enter librechat_code_api_key * refactor: Remove unused imports in BookmarkForm.tsx * feat: authenticate code tool * refactor: Update Action.tsx to conditionally render the key and revoke key buttons * refactor(Code/Action): prevent uncheck-able 'Run Code' capability when key is revoked * refactor(Code/Action): Update Action.tsx to conditionally render the key and revoke key buttons * fix: agent file upload edge cases * chore: bump @librechat/agents * fix: custom endpoint providerValue icon * feat: ollama meta modal token values + context * feat: ollama agents * refactor: Update token models for Ollama models * chore: Comment out CodeForm * refactor: Update token models for Ollama and Meta models
53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
const { EnvVar } = require('@librechat/agents');
|
|
const { Tools, AuthType } = require('librechat-data-provider');
|
|
const { loadAuthValues } = require('~/app/clients/tools/util');
|
|
|
|
const fieldsMap = {
|
|
[Tools.execute_code]: [EnvVar.CODE_API_KEY],
|
|
};
|
|
|
|
/**
|
|
* @param {ServerRequest} req - The request object, containing information about the HTTP request.
|
|
* @param {ServerResponse} res - The response object, used to send back the desired HTTP response.
|
|
* @returns {Promise<void>} A promise that resolves when the function has completed.
|
|
*/
|
|
const verifyToolAuth = async (req, res) => {
|
|
try {
|
|
const { toolId } = req.params;
|
|
const authFields = fieldsMap[toolId];
|
|
if (!authFields) {
|
|
res.status(404).json({ message: 'Tool not found' });
|
|
return;
|
|
}
|
|
let result;
|
|
try {
|
|
result = await loadAuthValues({
|
|
userId: req.user.id,
|
|
authFields,
|
|
});
|
|
} catch (error) {
|
|
res.status(200).json({ authenticated: false, message: AuthType.USER_PROVIDED });
|
|
return;
|
|
}
|
|
let isUserProvided = false;
|
|
for (const field of authFields) {
|
|
if (!result[field]) {
|
|
res.status(200).json({ authenticated: false, message: AuthType.USER_PROVIDED });
|
|
return;
|
|
}
|
|
if (!isUserProvided && process.env[field] !== result[field]) {
|
|
isUserProvided = true;
|
|
}
|
|
}
|
|
res.status(200).json({
|
|
authenticated: true,
|
|
message: isUserProvided ? AuthType.USER_PROVIDED : AuthType.SYSTEM_DEFINED,
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
verifyToolAuth,
|
|
};
|