mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00
57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
![]() |
const { getUserPluginAuthValue } = require('~/server/services/PluginService');
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @param {Object} params
|
||
|
* @param {string} params.userId
|
||
|
* @param {string[]} params.authFields
|
||
|
* @param {Set<string>} [params.optional]
|
||
|
* @param {boolean} [params.throwError]
|
||
|
* @returns
|
||
|
*/
|
||
|
const loadAuthValues = async ({ userId, authFields, optional, throwError = true }) => {
|
||
|
let authValues = {};
|
||
|
|
||
|
/**
|
||
|
* Finds the first non-empty value for the given authentication field, supporting alternate fields.
|
||
|
* @param {string[]} fields Array of strings representing the authentication fields. Supports alternate fields delimited by "||".
|
||
|
* @returns {Promise<{ authField: string, authValue: string} | null>} An object containing the authentication field and value, or null if not found.
|
||
|
*/
|
||
|
const findAuthValue = async (fields) => {
|
||
|
for (const field of fields) {
|
||
|
let value = process.env[field];
|
||
|
if (value) {
|
||
|
return { authField: field, authValue: value };
|
||
|
}
|
||
|
try {
|
||
|
value = await getUserPluginAuthValue(userId, field, throwError);
|
||
|
} catch (err) {
|
||
|
if (optional && optional.has(field)) {
|
||
|
return { authField: field, authValue: undefined };
|
||
|
}
|
||
|
if (field === fields[fields.length - 1] && !value) {
|
||
|
throw err;
|
||
|
}
|
||
|
}
|
||
|
if (value) {
|
||
|
return { authField: field, authValue: value };
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
for (let authField of authFields) {
|
||
|
const fields = authField.split('||');
|
||
|
const result = await findAuthValue(fields);
|
||
|
if (result) {
|
||
|
authValues[result.authField] = result.authValue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return authValues;
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
loadAuthValues,
|
||
|
};
|