ci(backend-review.yml): add linter step to the backend review workflow (#625)

* ci(backend-review.yml): add linter step to the backend review workflow

* chore(backend-review.yml): remove prettier from lint-action configuration

* chore: apply new linting workflow

* chore(lint-staged.config.js): reorder lint-staged tasks for JavaScript and TypeScript files

* chore(eslint): update ignorePatterns in .eslintrc.js
chore(lint-action): remove prettier option in backend-review.yml
chore(package.json): add lint and lint:fix scripts

* chore(lint-staged.config.js): remove prettier --write command for js, jsx, ts, tsx files

* chore(titleConvo.js): remove unnecessary console.log statement
chore(titleConvo.js): add missing comma in options object

* chore: apply linting to all files

* chore(lint-staged.config.js): update lint-staged configuration to include prettier formatting
This commit is contained in:
Danny Avila 2023-07-14 09:36:49 -04:00 committed by GitHub
parent 637bb6bc11
commit e5336039fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
231 changed files with 1688 additions and 1526 deletions

View file

@ -1,7 +1,7 @@
const {
registerUser,
requestPasswordReset,
resetPassword
resetPassword,
} = require('../services/auth.service');
const isProduction = process.env.NODE_ENV === 'production';
@ -16,7 +16,7 @@ const registrationController = async (req, res) => {
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.status(status).send({ user });
} else {
@ -52,7 +52,7 @@ const resetPasswordController = async (req, res) => {
const resetPasswordService = await resetPassword(
req.body.userId,
req.body.token,
req.body.password
req.body.password,
);
if (resetPasswordService instanceof Error) {
return res.status(400).json(resetPasswordService);
@ -120,5 +120,5 @@ module.exports = {
// refreshController,
registrationController,
resetPasswordRequestController,
resetPasswordController
resetPasswordController,
};

View file

@ -45,7 +45,7 @@ const getAvailablePluginsController = async (req, res) => {
});
res.status(200).json(authenticatedPlugins);
}
}
},
);
} catch (error) {
res.status(500).json({ message: error.message });
@ -53,5 +53,5 @@ const getAvailablePluginsController = async (req, res) => {
};
module.exports = {
getAvailablePluginsController
getAvailablePluginsController,
};

View file

@ -51,5 +51,5 @@ const updateUserPluginsController = async (req, res) => {
module.exports = {
getUserController,
updateUserPluginsController
updateUserPluginsController,
};

View file

@ -3,7 +3,7 @@ const User = require('../../../models/User');
const loginController = async (req, res) => {
try {
const user = await User.findById(
req.user._id
req.user._id,
);
// If user doesn't exist, return error
@ -13,7 +13,7 @@ const loginController = async (req, res) => {
const token = req.user.generateToken();
const expires = eval(process.env.SESSION_EXPIRY);
// Add token to cookie
res.cookie(
'token',
@ -21,8 +21,8 @@ const loginController = async (req, res) => {
{
expires: new Date(Date.now() + expires),
httpOnly: false,
secure: process.env.NODE_ENV === 'production'
}
secure: process.env.NODE_ENV === 'production',
},
);
return res.status(200).send({ token, user });
@ -35,5 +35,5 @@ const loginController = async (req, res) => {
};
module.exports = {
loginController
loginController,
};

View file

@ -17,5 +17,5 @@ const logoutController = async (req, res) => {
};
module.exports = {
logoutController
logoutController,
};

View file

@ -58,7 +58,7 @@ config.validate(); // Validate the config
app.use(session({
secret: process.env.OPENID_SESSION_SECRET,
resave: false,
saveUninitialized: false
saveUninitialized: false,
}));
app.use(passport.session());
require('../strategies/openidStrategy');
@ -86,7 +86,7 @@ config.validate(); // Validate the config
app.listen(port, host, () => {
if (host == '0.0.0.0')
console.log(
`Server listening on all interface at port ${port}. Use http://localhost:${port} to access it`
`Server listening on all interface at port ${port}. Use http://localhost:${port} to access it`,
);
else
console.log(`Server listening at http://${host == '0.0.0.0' ? 'localhost' : host}:${port}`);

View file

@ -5,19 +5,19 @@ const addToCache = async ({ endpoint, endpointOption, userMessage, responseMessa
try {
const conversationsCache = new Keyv({
store: new KeyvFile({ filename: './data/cache.json' }),
namespace: 'chatgpt' // should be 'bing' for bing/sydney
namespace: 'chatgpt', // should be 'bing' for bing/sydney
});
const {
conversationId,
messageId: userMessageId,
parentMessageId: userParentMessageId,
text: userText
text: userText,
} = userMessage;
const {
messageId: responseMessageId,
parentMessageId: responseParentMessageId,
text: responseText
text: responseText,
} = responseMessage;
let conversation = await conversationsCache.get(conversationId);
@ -26,7 +26,7 @@ const addToCache = async ({ endpoint, endpointOption, userMessage, responseMessa
if (!conversation) {
conversation = {
messages: [],
createdAt: Date.now()
createdAt: Date.now(),
};
// isNewConversation = true;
}
@ -43,14 +43,14 @@ const addToCache = async ({ endpoint, endpointOption, userMessage, responseMessa
id: userMessageId,
parentMessageId: userParentMessageId,
role: 'User',
message: userText
message: userText,
};
let _responseMessage = {
id: responseMessageId,
parentMessageId: responseParentMessageId,
role: roles(endpointOption),
message: responseText
message: responseText,
};
conversation.messages.push(_userMessage, _responseMessage);

View file

@ -27,8 +27,8 @@ router.post('/', requireJwtAuth, async (req, res) => {
temperature: req.body?.temperature ?? 0.7,
maxOutputTokens: req.body?.maxOutputTokens ?? 1024,
topP: req.body?.topP ?? 0.7,
topK: req.body?.topK ?? 40
}
topK: req.body?.topK ?? 40,
},
};
const conversationId = oldConversationId || crypto.randomUUID();
@ -39,7 +39,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
conversationId,
parentMessageId,
req,
res
res,
});
});
@ -49,7 +49,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
let userMessage;
@ -81,10 +81,10 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
text: partialText,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
const abortController = new AbortController();
@ -110,7 +110,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: responseMessage
responseMessage: responseMessage,
};
};
@ -132,10 +132,10 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
onProgress: progressCallback.call(null, {
res,
text,
parentMessageId: overrideParentMessageId || userMessageId
parentMessageId: overrideParentMessageId || userMessageId,
}),
onStart,
abortController
abortController,
});
if (overrideParentMessageId) {
@ -146,7 +146,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
...endpointOption,
...endpointOption.modelOptions,
conversationId,
endpoint: 'anthropic'
endpoint: 'anthropic',
});
await saveMessage(response);
@ -155,7 +155,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: response
responseMessage: response,
});
res.end();
@ -163,7 +163,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
const title = await titleConvo({ text, response });
await saveConvo(req.user.id, {
conversationId,
title
title,
});
}
} catch (error) {
@ -176,7 +176,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
unfinished: false,
cancelled: false,
error: true,
text: error.message
text: error.message,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -13,7 +13,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
messageId,
overrideParentMessageId = null,
parentMessageId,
conversationId: oldConversationId
conversationId: oldConversationId,
} = req.body;
if (text.length === 0) return handleError(res, { text: 'Prompt empty or too short' });
if (endpoint !== 'bingAI') return handleError(res, { text: 'Illegal request' });
@ -29,7 +29,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
text,
parentMessageId: userParentMessageId,
conversationId,
isCreatedByUser: true
isCreatedByUser: true,
};
// build endpoint option
@ -41,7 +41,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
systemMessage: req.body?.systemMessage ?? null,
context: req.body?.context ?? null,
toneStyle: req.body?.toneStyle ?? 'creative',
token: req.body?.token ?? null
token: req.body?.token ?? null,
};
else
endpointOption = {
@ -52,13 +52,13 @@ router.post('/', requireJwtAuth, async (req, res) => {
clientId: req.body?.clientId ?? null,
invocationId: req.body?.invocationId ?? null,
toneStyle: req.body?.toneStyle ?? 'creative',
token: req.body?.token ?? null
token: req.body?.token ?? null,
};
console.log('ask log', {
userMessage,
endpointOption,
conversationId
conversationId,
});
if (!overrideParentMessageId) {
@ -67,7 +67,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
...userMessage,
...endpointOption,
conversationId,
endpoint
endpoint,
});
}
@ -80,7 +80,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
preSendRequest: true,
overrideParentMessageId,
req,
res
res,
});
});
@ -92,7 +92,7 @@ const ask = async ({
preSendRequest = true,
overrideParentMessageId = null,
req,
res
res,
}) => {
let { text, parentMessageId: userParentMessageId, messageId: userMessageId } = userMessage;
@ -103,7 +103,7 @@ const ask = async ({
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
if (preSendRequest) sendMessage(res, { message: userMessage, created: true });
@ -123,10 +123,10 @@ const ask = async ({
text: text,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
const abortController = new AbortController();
let bingConversationId = null;
@ -142,9 +142,9 @@ const ask = async ({
onProgress: progressCallback.call(null, {
res,
text,
parentMessageId: overrideParentMessageId || userMessageId
parentMessageId: overrideParentMessageId || userMessageId,
}),
abortController
abortController,
});
console.log('BING RESPONSE', response);
@ -173,7 +173,7 @@ const ask = async ({
response.details.suggestedResponses.map((s) => s.text),
unfinished: false,
cancelled: false,
error: false
error: false,
};
await saveMessage(responseMessage);
@ -199,7 +199,7 @@ const ask = async ({
await saveMessage({
...userMessage,
messageId: userMessageId,
newMessageId: newUserMessageId
newMessageId: newUserMessageId,
});
userMessageId = newUserMessageId;
@ -208,19 +208,19 @@ const ask = async ({
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: responseMessage
responseMessage: responseMessage,
});
res.end();
if (userParentMessageId == '00000000-0000-0000-0000-000000000000') {
const title = await titleConvoBing({
text,
response: responseMessage
response: responseMessage,
});
await saveConvo(req.user.id, {
conversationId: conversationId,
title
title,
});
}
} catch (error) {
@ -233,7 +233,7 @@ const ask = async ({
unfinished: false,
cancelled: false,
error: true,
text: error.message
text: error.message,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -13,7 +13,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
text,
overrideParentMessageId = null,
parentMessageId,
conversationId: oldConversationId
conversationId: oldConversationId,
} = req.body;
if (text.length === 0) return handleError(res, { text: 'Prompt empty or too short' });
if (endpoint !== 'chatGPTBrowser') return handleError(res, { text: 'Illegal request' });
@ -29,13 +29,13 @@ router.post('/', requireJwtAuth, async (req, res) => {
text,
parentMessageId: userParentMessageId,
conversationId,
isCreatedByUser: true
isCreatedByUser: true,
};
// build endpoint option
const endpointOption = {
model: req.body?.model ?? 'text-davinci-002-render-sha',
token: req.body?.token ?? null
token: req.body?.token ?? null,
};
// const availableModels = getChatGPTBrowserModels();
@ -45,7 +45,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
console.log('ask log', {
userMessage,
endpointOption,
conversationId
conversationId,
});
if (!overrideParentMessageId) {
@ -54,7 +54,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
...userMessage,
...endpointOption,
conversationId,
endpoint
endpoint,
});
}
@ -67,7 +67,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
preSendRequest: true,
overrideParentMessageId,
req,
res
res,
});
});
@ -78,7 +78,7 @@ const ask = async ({
conversationId,
overrideParentMessageId = null,
req,
res
res,
}) => {
let { text, parentMessageId: userParentMessageId, messageId: userMessageId } = userMessage;
const userId = req.user.id;
@ -88,7 +88,7 @@ const ask = async ({
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
let responseMessageId = crypto.randomUUID();
@ -108,10 +108,10 @@ const ask = async ({
text: text,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
getPartialMessage = getPartialText;
@ -134,9 +134,9 @@ const ask = async ({
sendMessage(res, {
message: { ...userMessage, conversationId: data.conversation_id },
created: true
created: true,
});
}
},
});
console.log('CLIENT RESPONSE', response);
@ -157,7 +157,7 @@ const ask = async ({
sender: endpointOption?.chatGptLabel || 'ChatGPT',
unfinished: false,
cancelled: false,
error: false
error: false,
};
await saveMessage(responseMessage);
@ -173,13 +173,13 @@ const ask = async ({
conversationUpdate = {
...conversationUpdate,
conversationId: conversationId,
newConversationId: newConversationId
newConversationId: newConversationId,
};
} else {
// create new conversation
conversationUpdate = {
...conversationUpdate,
...endpointOption
...endpointOption,
};
}
@ -195,7 +195,7 @@ const ask = async ({
await saveMessage({
...userMessage,
messageId: userMessageId,
newMessageId: newUserMassageId
newMessageId: newUserMassageId,
});
userMessageId = newUserMassageId;
@ -204,7 +204,7 @@ const ask = async ({
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: responseMessage
responseMessage: responseMessage,
});
res.end();
@ -213,7 +213,7 @@ const ask = async ({
const title = await response.details.title;
await saveConvo(req.user.id, {
conversationId: conversationId,
title
title,
});
}
} catch (error) {
@ -225,7 +225,7 @@ const ask = async ({
unfinished: false,
cancelled: false,
// error: true,
text: `${getPartialMessage() ?? ''}\n\nError message: "${error.message}"`
text: `${getPartialMessage() ?? ''}\n\nError message: "${error.message}"`,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -23,13 +23,13 @@ router.post('/', requireJwtAuth, async (req, res) => {
temperature: req.body?.temperature ?? 0.2,
maxOutputTokens: req.body?.maxOutputTokens ?? 1024,
topP: req.body?.topP ?? 0.95,
topK: req.body?.topK ?? 40
}
topK: req.body?.topK ?? 40,
},
};
const availableModels = ['chat-bison', 'text-bison', 'codechat-bison'];
if (availableModels.find((model) => model === endpointOption.modelOptions.model) === undefined) {
return handleError(res, { text: `Illegal request: model` });
return handleError(res, { text: 'Illegal request: model' });
}
const conversationId = oldConversationId || crypto.randomUUID();
@ -41,7 +41,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
conversationId,
parentMessageId,
req,
res
res,
});
});
@ -51,7 +51,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
let userMessage;
let userMessageId;
@ -84,10 +84,10 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
text: partialText,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
const abortController = new AbortController();
@ -104,14 +104,14 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
key = require('../../../data/auth.json');
}
} catch (e) {
console.log("No 'auth.json' file (service account key) found in /api/data/ for PaLM models");
console.log('No \'auth.json\' file (service account key) found in /api/data/ for PaLM models');
}
const clientOptions = {
// debug: true, // for testing
reverseProxyUrl: process.env.GOOGLE_REVERSE_PROXY || null,
proxy: process.env.PROXY || null,
...endpointOption
...endpointOption,
};
const client = new GoogleClient(key, clientOptions);
@ -125,9 +125,9 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
onProgress: progressCallback.call(null, {
res,
text,
parentMessageId: overrideParentMessageId || userMessageId
parentMessageId: overrideParentMessageId || userMessageId,
}),
abortController
abortController,
});
if (overrideParentMessageId) {
@ -138,7 +138,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
...endpointOption,
...endpointOption.modelOptions,
conversationId,
endpoint: 'google'
endpoint: 'google',
});
await saveMessage(response);
@ -147,7 +147,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: response
responseMessage: response,
});
res.end();
@ -155,7 +155,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
const title = await titleConvo({ text, response });
await saveConvo(req.user.id, {
conversationId,
title
title,
});
}
} catch (error) {
@ -168,7 +168,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, conversationI
unfinished: false,
cancelled: false,
error: true,
text: error.message
text: error.message,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -8,7 +8,7 @@ const {
sendMessage,
createOnProgress,
formatSteps,
formatAction
formatAction,
} = require('./handlers');
const requireJwtAuth = require('../../../middleware/requireJwtAuth');
@ -44,12 +44,12 @@ router.post('/', requireJwtAuth, async (req, res) => {
temperature: req.body?.temperature ?? 0,
top_p: req.body?.top_p ?? 1,
presence_penalty: req.body?.presence_penalty ?? 0,
frequency_penalty: req.body?.frequency_penalty ?? 0
frequency_penalty: req.body?.frequency_penalty ?? 0,
},
agentOptions: {
...agentOptions,
// agent: 'functions'
}
},
};
console.log('ask log');
@ -63,7 +63,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
conversationId,
parentMessageId,
req,
res
res,
});
});
@ -73,7 +73,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
let userMessage;
let userMessageId;
@ -87,7 +87,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
loading: true,
inputs: [],
latest: null,
outputs: null
outputs: null,
};
try {
@ -119,10 +119,10 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
model: endpointOption.modelOptions.model,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
const abortController = new AbortController();
@ -149,7 +149,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: responseMessage
responseMessage: responseMessage,
};
};
@ -164,7 +164,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
endpoint,
reverseProxyUrl: process.env.OPENAI_REVERSE_PROXY || null,
proxy: process.env.PROXY || null,
...endpointOption
...endpointOption,
};
let openAIApiKey = req.body?.token ?? process.env.OPENAI_API_KEY;
@ -211,9 +211,9 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
res,
text,
plugin,
parentMessageId: overrideParentMessageId || userMessageId
parentMessageId: overrideParentMessageId || userMessageId,
}),
abortController
abortController,
});
if (overrideParentMessageId) {
@ -230,7 +230,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: response
responseMessage: response,
});
res.end();
@ -243,7 +243,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
});
await saveConvo(req.user.id, {
conversationId: conversationId,
title
title,
});
}
} catch (error) {
@ -256,7 +256,7 @@ const ask = async ({ text, endpoint, endpointOption, parentMessageId = null, con
unfinished: false,
cancelled: false,
error: true,
text: error.message
text: error.message,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -134,7 +134,7 @@ function formatAction(action) {
input: getString(action.toolInput),
thought: action.log.includes('Thought: ')
? action.log.split('\n')[0].replace('Thought: ', '')
: action.log.split('\n')[0]
: action.log.split('\n')[0],
};
formattedAction.thought = getString(formattedAction.thought);
@ -161,5 +161,5 @@ module.exports = {
createOnProgress,
handleText,
formatSteps,
formatAction
formatAction,
};

View file

@ -31,8 +31,8 @@ router.post('/', requireJwtAuth, async (req, res) => {
temperature: req.body?.temperature ?? 1,
top_p: req.body?.top_p ?? 1,
presence_penalty: req.body?.presence_penalty ?? 0,
frequency_penalty: req.body?.frequency_penalty ?? 0
}
frequency_penalty: req.body?.frequency_penalty ?? 0,
},
};
console.log('ask log');
@ -46,7 +46,7 @@ router.post('/', requireJwtAuth, async (req, res) => {
parentMessageId,
endpoint,
req,
res
res,
});
});
@ -56,7 +56,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
'Access-Control-Allow-Origin': '*',
'X-Accel-Buffering': 'no'
'X-Accel-Buffering': 'no',
});
let userMessage;
let userMessageId;
@ -90,10 +90,10 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
model: endpointOption.modelOptions.model,
unfinished: true,
cancelled: false,
error: false
error: false,
});
}
}
},
});
const abortController = new AbortController();
@ -119,7 +119,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: responseMessage
responseMessage: responseMessage,
};
};
@ -135,7 +135,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
reverseProxyUrl: process.env.OPENAI_REVERSE_PROXY || null,
proxy: process.env.PROXY || null,
endpoint,
...endpointOption
...endpointOption,
};
let openAIApiKey = req.body?.token ?? process.env.OPENAI_API_KEY;
@ -157,9 +157,9 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
onProgress: progressCallback.call(null, {
res,
text,
parentMessageId: overrideParentMessageId || userMessageId
parentMessageId: overrideParentMessageId || userMessageId,
}),
abortController
abortController,
});
if (overrideParentMessageId) {
@ -174,7 +174,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
final: true,
conversation: await getConvo(req.user.id, conversationId),
requestMessage: userMessage,
responseMessage: response
responseMessage: response,
});
res.end();
@ -183,11 +183,11 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
text,
response,
openAIApiKey,
azure: endpoint === 'azureOpenAI'
azure: endpoint === 'azureOpenAI',
});
await saveConvo(req.user.id, {
conversationId,
title
title,
});
}
} catch (error) {
@ -204,7 +204,7 @@ const ask = async ({ text, endpointOption, parentMessageId = null, endpoint, con
unfinished: false,
cancelled: false,
error: true,
text: error.message
text: error.message,
};
await saveMessage(errorMessage);
handleError(res, errorMessage);

View file

@ -3,7 +3,7 @@ const {
resetPasswordRequestController,
resetPasswordController,
// refreshController,
registrationController
registrationController,
} = require('../controllers/AuthController');
const { loginController } = require('../controllers/auth/LoginController');
const { logoutController } = require('../controllers/auth/LogoutController');

View file

@ -5,9 +5,9 @@ router.get('/', async function (req, res) {
try {
const appTitle = process.env.APP_TITLE || 'LibreChat';
const googleLoginEnabled = !!process.env.GOOGLE_CLIENT_ID && !!process.env.GOOGLE_CLIENT_SECRET;
const openidLoginEnabled = !!process.env.OPENID_CLIENT_ID
&& !!process.env.OPENID_CLIENT_SECRET
&& !!process.env.OPENID_ISSUER
const openidLoginEnabled = !!process.env.OPENID_CLIENT_ID
&& !!process.env.OPENID_CLIENT_SECRET
&& !!process.env.OPENID_ISSUER
&& !!process.env.OPENID_SESSION_SECRET;
const openidLabel = process.env.OPENID_BUTTON_LABEL || 'Login with OpenID';
const openidImageUrl = process.env.OPENID_IMAGE_URL;
@ -16,7 +16,7 @@ router.get('/', async function (req, res) {
const serverDomain = process.env.DOMAIN_SERVER || 'http://localhost:3080';
const registrationEnabled = process.env.ALLOW_REGISTRATION === 'true';
const socialLoginEnabled = process.env.ALLOW_SOCIAL_LOGIN === 'true';
return res.status(200).send({
appTitle,
googleLoginEnabled,
@ -27,12 +27,12 @@ router.get('/', async function (req, res) {
discordLoginEnabled,
serverDomain,
registrationEnabled,
socialLoginEnabled
socialLoginEnabled,
});
} catch (err) {
console.error(err);
return res.status(500).send({error: err.message});
return res.status(500).send({ error: err.message });
}
});

View file

@ -72,13 +72,13 @@ router.get('/', async function (req, res) {
const chatGPTBrowser = process.env.CHATGPT_TOKEN
? {
userProvide: process.env.CHATGPT_TOKEN == 'user_provided',
availableModels: getChatGPTBrowserModels()
availableModels: getChatGPTBrowserModels(),
}
: false;
const anthropic = process.env.ANTHROPIC_API_KEY
? {
userProvide: process.env.ANTHROPIC_API_KEY == 'user_provided',
availableModels: getAnthropicModels()
availableModels: getAnthropicModels(),
}
: false;

View file

@ -25,5 +25,5 @@ module.exports = {
tokenizer,
endpoints,
plugins,
config
config,
};

View file

@ -12,8 +12,8 @@ router.get(
'/google',
passport.authenticate('google', {
scope: ['openid', 'profile', 'email'],
session: false
})
session: false,
}),
);
router.get(
@ -22,25 +22,25 @@ router.get(
failureRedirect: `${domains.client}/login`,
failureMessage: true,
session: false,
scope: ['openid', 'profile', 'email']
scope: ['openid', 'profile', 'email'],
}),
(req, res) => {
const token = req.user.generateToken();
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.redirect(domains.client);
}
},
);
router.get(
'/facebook',
passport.authenticate('facebook', {
scope: ['public_profile', 'email'],
session: false
})
session: false,
}),
);
router.get(
@ -49,24 +49,24 @@ router.get(
failureRedirect: `${domains.client}/login`,
failureMessage: true,
session: false,
scope: ['public_profile', 'email']
scope: ['public_profile', 'email'],
}),
(req, res) => {
const token = req.user.generateToken();
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.redirect(domains.client);
}
},
);
router.get(
'/openid',
passport.authenticate('openid', {
session: false
})
session: false,
}),
);
router.get(
@ -74,26 +74,25 @@ router.get(
passport.authenticate('openid', {
failureRedirect: `${domains.client}/login`,
failureMessage: true,
session: false
session: false,
}),
(req, res) => {
const token = req.user.generateToken();
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.redirect(domains.client);
}
},
);
router.get(
'/github',
passport.authenticate('github', {
scope: ['user:email', 'read:user'],
session: false
})
session: false,
}),
);
router.get(
@ -102,26 +101,25 @@ router.get(
failureRedirect: `${domains.client}/login`,
failureMessage: true,
session: false,
scope: ['user:email', 'read:user']
scope: ['user:email', 'read:user'],
}),
(req, res) => {
const token = req.user.generateToken();
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.redirect(domains.client);
}
},
);
router.get(
'/discord',
passport.authenticate('discord', {
scope: ['identify', 'email'],
session: false
})
session: false,
}),
);
router.get(
@ -130,17 +128,17 @@ router.get(
failureRedirect: `${domains.client}/login`,
failureMessage: true,
session: false,
scope: ['identify', 'email']
scope: ['identify', 'email'],
}),
(req, res) => {
const token = req.user.generateToken();
res.cookie('token', token, {
expires: new Date(Date.now() + eval(process.env.SESSION_EXPIRY)),
httpOnly: false,
secure: isProduction
secure: isProduction,
});
res.redirect(domains.client);
}
},
);
module.exports = router;

View file

@ -1,6 +1,6 @@
const express = require('express');
const router = express.Router();
const { savePrompt, getPrompts, deletePrompts } = require('../../models/Prompt');
const { getPrompts } = require('../../models/Prompt');
router.get('/', async (req, res) => {
let filter = {};

View file

@ -42,16 +42,16 @@ router.get('/', requireJwtAuth, async function (req, res) {
{
attributesToHighlight: ['text'],
highlightPreTag: '**',
highlightPostTag: '**'
highlightPostTag: '**',
},
true
true,
)
).hits.map((message) => {
const { _formatted, ...rest } = message;
return {
...rest,
searchResult: true,
text: _formatted.text
text: _formatted.text,
};
});
const titles = (await Conversation.meiliSearch(q)).hits;
@ -111,7 +111,7 @@ router.get('/enable', async function (req, res) {
try {
const client = new MeiliSearch({
host: process.env.MEILI_HOST,
apiKey: process.env.MEILI_MASTER_KEY
apiKey: process.env.MEILI_MASTER_KEY,
});
const { status } = await client.health();

View file

@ -47,7 +47,7 @@ const updateUserPluginAuth = async (userId, authField, pluginKey, value) => {
if (pluginAuth) {
const pluginAuth = await PluginAuth.updateOne(
{ userId, authField },
{ $set: { value: encryptedValue } }
{ $set: { value: encryptedValue } },
);
return pluginAuth;
} else {
@ -55,7 +55,7 @@ const updateUserPluginAuth = async (userId, authField, pluginKey, value) => {
userId,
authField,
value: encryptedValue,
pluginKey
pluginKey,
});
newPluginAuth.save();
return newPluginAuth;
@ -79,5 +79,5 @@ const deleteUserPluginAuth = async (userId, authField) => {
module.exports = {
getUserPluginAuthValue,
updateUserPluginAuth,
deleteUserPluginAuth
deleteUserPluginAuth,
};

View file

@ -5,13 +5,13 @@ const updateUserPluginsService = async (user, pluginKey, action) => {
if (action === 'install') {
const response = await User.updateOne(
{ _id: user._id },
{ $set: { plugins: [...user.plugins, pluginKey] } }
{ $set: { plugins: [...user.plugins, pluginKey] } },
);
return response;
} else if (action === 'uninstall') {
const response = await User.updateOne(
{ _id: user._id },
{ $set: { plugins: user.plugins.filter((plugin) => plugin !== pluginKey) } }
{ $set: { plugins: user.plugins.filter((plugin) => plugin !== pluginKey) } },
);
return response;
}

View file

@ -18,7 +18,7 @@ const logoutUser = async (user, refreshToken) => {
try {
const userFound = await User.findById(user._id);
const tokenIndex = userFound.refreshToken.findIndex(
(item) => item.refreshToken === refreshToken
(item) => item.refreshToken === refreshToken,
);
if (tokenIndex !== -1) {
@ -45,7 +45,7 @@ const registerUser = async (user) => {
console.info(
'Route: register - Joi Validation Error',
{ name: 'Request params:', value: user },
{ name: 'Validation error:', value: error.details }
{ name: 'Validation error:', value: error.details },
);
return { status: 422, message: error.details[0].message };
@ -60,7 +60,7 @@ const registerUser = async (user) => {
console.info(
'Register User - Email in use',
{ name: 'Request params:', value: user },
{ name: 'Existing user:', value: existingUser }
{ name: 'Existing user:', value: existingUser },
);
// Sleep for 1 second
@ -80,7 +80,7 @@ const registerUser = async (user) => {
username,
name,
avatar: null,
role: isFirstRegisteredUser ? 'ADMIN' : 'USER'
role: isFirstRegisteredUser ? 'ADMIN' : 'USER',
});
// todo: implement refresh token
@ -118,7 +118,7 @@ const requestPasswordReset = async (email) => {
await new Token({
userId: user._id,
token: hash,
createdAt: Date.now()
createdAt: Date.now(),
}).save();
const link = `${domains.client}/reset-password?token=${resetToken}&userId=${user._id}`;
@ -128,9 +128,9 @@ const requestPasswordReset = async (email) => {
'Password Reset Request',
{
name: user.name,
link: link
link: link,
},
'./template/requestResetPassword.handlebars'
'./template/requestResetPassword.handlebars',
);
return { link };
};
@ -166,9 +166,9 @@ const resetPassword = async (userId, token, password) => {
user.email,
'Password Reset Successfully',
{
name: user.name
name: user.name,
},
'./template/resetPassword.handlebars'
'./template/resetPassword.handlebars',
);
await passwordResetToken.deleteOne();
@ -180,5 +180,5 @@ module.exports = {
registerUser,
logoutUser,
requestPasswordReset,
resetPassword
resetPassword,
};