Sparser use of .error

a5399b6614705b6db138526d9cc492890c4169c8

Eradev <admin@eradev.com>

15 files changed, +119 -119Showing whitespace changes
src/endpoints/anthropic.js+1 -1
@@ -46,7 +46,7 @@ router.post('/caption-image', jsonParser, async (request, response) => {
4646
4747 if (!result.ok) {
4848 const text = await result.text();
4949 console.errorwarn(`Claude API returned error: ${result.status} ${result.statusText}`, text);
5050 return response.status(result.status).send({ error: true });
5151 }
5252
src/endpoints/azure.js+6 -6
@@ -11,14 +11,14 @@ router.post('/list', jsonParser, async (req, res) => {
1111 const key = readSecret(req.user.directories, SECRET_KEYS.AZURE_TTS);
1212
1313 if (!key) {
1414 console.errorwarn('Azure TTS API Key not set');
1515 return res.sendStatus(403);
1616 }
1717
1818 const region = req.body.region;
1919
2020 if (!region) {
2121 console.errorwarn('Azure TTS region not set');
2222 return res.sendStatus(400);
2323 }
2424
@@ -32,7 +32,7 @@ router.post('/list', jsonParser, async (req, res) => {
3232 });
3333
3434 if (!response.ok) {
3535 console.errorwarn('Azure Request failed', response.status, response.statusText);
3636 return res.sendStatus(500);
3737 }
3838
@@ -49,13 +49,13 @@ router.post('/generate', jsonParser, async (req, res) => {
4949 const key = readSecret(req.user.directories, SECRET_KEYS.AZURE_TTS);
5050
5151 if (!key) {
5252 console.errorwarn('Azure TTS API Key not set');
5353 return res.sendStatus(403);
5454 }
5555
5656 const { text, voice, region } = req.body;
5757 if (!text || !voice || !region) {
5858 console.errorwarn('Missing required parameters');
5959 return res.sendStatus(400);
6060 }
6161
@@ -75,7 +75,7 @@ router.post('/generate', jsonParser, async (req, res) => {
7575 });
7676
7777 if (!response.ok) {
7878 console.errorwarn('Azure Request failed', response.status, response.statusText);
7979 return res.sendStatus(500);
8080 }
8181
src/endpoints/backends/chat-completions.js+17 -17
@@ -114,7 +114,7 @@ async function sendClaudeRequest(request, response) {
114114 }
115115
116116 if (!apiKey) {
117117 console.logwarn(color.red(`Claude API key is missing.\n${divider}`));
118118 return response.status(400).send({ error: true });
119119 }
120120
@@ -230,7 +230,7 @@ async function sendScaleRequest(request, response) {
230230 const apiKey = readSecret(request.user.directories, SECRET_KEYS.SCALE);
231231
232232 if (!apiKey) {
233233 console.logwarn('Scale API key is missing.');
234234 return response.status(400).send({ error: true });
235235 }
236236
@@ -254,7 +254,7 @@ async function sendScaleRequest(request, response) {
254254 });
255255
256256 if (!generateResponse.ok) {
257257 console.errorwarn(`Scale API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
258258 return response.status(500).send({ error: true });
259259 }
260260
@@ -282,7 +282,7 @@ async function sendMakerSuiteRequest(request, response) {
282282 const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.MAKERSUITE);
283283
284284 if (!request.body.reverse_proxy && !apiKey) {
285285 console.errorwarn('Google AI Studio API key is missing.');
286286 return response.status(400).send({ error: true });
287287 }
288288
@@ -373,7 +373,7 @@ async function sendMakerSuiteRequest(request, response) {
373373 }
374374 } else {
375375 if (!generateResponse.ok) {
376376 console.errorwarn(`Google AI Studio API returned error: ${generateResponse.status} ${generateResponse.statusText} ${await generateResponse.text()}`);
377377 return response.status(generateResponse.status).send({ error: true });
378378 }
379379
@@ -391,12 +391,12 @@ async function sendMakerSuiteRequest(request, response) {
391391 }
392392
393393 const responseContent = candidates[0].content ?? candidates[0].output;
394394 console.errorwarn('Google AI Studio response:', responseContent);
395395
396396 const responseText = typeof responseContent === 'string' ? responseContent : responseContent?.parts?.filter(part => !part.thought)?.map(part => part.text)?.join('\n\n');
397397 if (!responseText) {
398398 let message = 'Google AI Studio Candidate text empty';
399399 console.errorwarn(message, generateResponseJson);
400400 return response.send({ error: { message } });
401401 }
402402
@@ -456,7 +456,7 @@ async function sendAI21Request(request, response) {
456456 } else {
457457 if (!generateResponse.ok) {
458458 const errorText = await generateResponse.text();
459459 console.errorwarn(`AI21 API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
460460 const errorJson = tryParse(errorText) ?? { error: true };
461461 return response.status(500).send(errorJson);
462462 }
@@ -484,7 +484,7 @@ async function sendMistralAIRequest(request, response) {
484484 const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.MISTRALAI);
485485
486486 if (!apiKey) {
487487 console.errorwarn('MistralAI API key is missing.');
488488 return response.status(400).send({ error: true });
489489 }
490490
@@ -533,7 +533,7 @@ async function sendMistralAIRequest(request, response) {
533533 } else {
534534 if (!generateResponse.ok) {
535535 const errorText = await generateResponse.text();
536536 console.errorwarn(`MistralAI API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
537537 const errorJson = tryParse(errorText) ?? { error: true };
538538 return response.status(500).send(errorJson);
539539 }
@@ -565,7 +565,7 @@ async function sendCohereRequest(request, response) {
565565 });
566566
567567 if (!apiKey) {
568568 console.errorwarn('Cohere API key is missing.');
569569 return response.status(400).send({ error: true });
570570 }
571571
@@ -626,7 +626,7 @@ async function sendCohereRequest(request, response) {
626626 const generateResponse = await fetch(apiUrl, config);
627627 if (!generateResponse.ok) {
628628 const errorText = await generateResponse.text();
629629 console.errorwarn(`Cohere API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
630630 const errorJson = tryParse(errorText) ?? { error: true };
631631 return response.status(500).send(errorJson);
632632 }
@@ -654,7 +654,7 @@ async function sendDeepSeekRequest(request, response) {
654654 const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.DEEPSEEK);
655655
656656 if (!apiKey && !request.body.reverse_proxy) {
657657 console.logwarn('DeepSeek API key is missing.');
658658 return response.status(400).send({ error: true });
659659 }
660660
@@ -775,12 +775,12 @@ router.post('/status', jsonParser, async function (request, response_getstatus_o
775775 api_key_openai = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.DEEPSEEK);
776776 headers = {};
777777 } else {
778778 console.errorwarn('This chat completion source is not supported yet.');
779779 return response_getstatus_openai.status(400).send({ error: true });
780780 }
781781
782782 if (!api_key_openai && !request.body.reverse_proxy && request.body.chat_completion_source !== CHAT_COMPLETION_SOURCES.CUSTOM) {
783783 console.errorwarn('Chat Completion API key is missing.');
784784 return response_getstatus_openai.status(400).send({ error: true });
785785 }
786786
@@ -1059,12 +1059,12 @@ router.post('/generate', jsonParser, function (request, response) {
10591059 headers = {};
10601060 bodyParams = {};
10611061 } else {
10621062 console.errorwarn('This chat completion source is not supported yet.');
10631063 return response.status(400).send({ error: true });
10641064 }
10651065
10661066 if (!apiKey && !request.body.reverse_proxy && request.body.chat_completion_source !== CHAT_COMPLETION_SOURCES.CUSTOM) {
10671067 console.errorwarn('OpenAI API key is missing.');
10681068 return response.status(400).send({ error: true });
10691069 }
10701070
src/endpoints/backends/kobold.js+1 -1
@@ -105,7 +105,7 @@ router.post('/generate', jsonParser, async function (request, response_generate)
105105 } else {
106106 if (!response.ok) {
107107 const errorText = await response.text();
108108 console.errorwarn(`Kobold returned error: ${response.status} ${response.statusText} ${errorText}`);
109109
110110 try {
111111 const errorJson = JSON.parse(errorText);
src/endpoints/caption.js+1 -1
@@ -13,7 +13,7 @@ router.post('/', jsonParser, async (req, res) => {
1313 const rawImage = await getRawImage(image);
1414
1515 if (!rawImage) {
1616 console.errorwarn('Failed to parse captioned image');
1717 return res.sendStatus(400);
1818 }
1919
src/endpoints/characters.js+8 -8
@@ -812,13 +812,13 @@ router.post('/rename', jsonParser, validateAvatarUrlMiddleware, async function (
812812
813813router.post('/edit', urlencodedParser, validateAvatarUrlMiddleware, async function (request, response) {
814814 if (!request.body) {
815815 console.errorwarn('Error: no response body detected');
816816 response.status(400).send('Error: no response body detected');
817817 return;
818818 }
819819
820820 if (request.body.ch_name === '' || request.body.ch_name === undefined || request.body.ch_name === '.') {
821821 console.errorwarn('Error: invalid name.');
822822 response.status(400).send('Error: invalid name.');
823823 return;
824824 }
@@ -862,12 +862,12 @@ router.post('/edit', urlencodedParser, validateAvatarUrlMiddleware, async functi
862862router.post('/edit-attribute', jsonParser, validateAvatarUrlMiddleware, async function (request, response) {
863863 console.debug(request.body);
864864 if (!request.body) {
865865 console.errorwarn('Error: no response body detected');
866866 return response.status(400).send('Error: no response body detected');
867867 }
868868
869869 if (request.body.ch_name === '' || request.body.ch_name === undefined || request.body.ch_name === '.') {
870870 console.errorwarn('Error: invalid name.');
871871 return response.status(400).send('Error: invalid name.');
872872 }
873873
@@ -879,7 +879,7 @@ router.post('/edit-attribute', jsonParser, validateAvatarUrlMiddleware, async fu
879879 const char = JSON.parse(charJSON);
880880 //check if the field exists
881881 if (char[request.body.field] === undefined && char.data[request.body.field] === undefined) {
882882 console.errorwarn('Error: invalid field.');
883883 response.status(400).send('Error: invalid field.');
884884 return;
885885 }
@@ -928,7 +928,7 @@ router.post('/merge-attributes', jsonParser, getFileNameValidationFunction('avat
928928 await writeCharacterData(avatarPath, JSON.stringify(character), targetImg, request);
929929 response.sendStatus(200);
930930 } else {
931931 console.errorwarn(validator.lastValidationError);
932932 response.status(400).send({ message: `Validation failed for ${character.name}`, error: validator.lastValidationError });
933933 }
934934 } catch (exception) {
@@ -1152,7 +1152,7 @@ router.post('/import', urlencodedParser, async function (request, response) {
11521152 const fileName = await importFunction(uploadPath, { request, response }, preservedFileName);
11531153
11541154 if (!fileName) {
11551155 console.errorwarn('Failed to import character');
11561156 return response.sendStatus(400);
11571157 }
11581158
@@ -1170,7 +1170,7 @@ router.post('/import', urlencodedParser, async function (request, response) {
11701170router.post('/duplicate', jsonParser, validateAvatarUrlMiddleware, async function (request, response) {
11711171 try {
11721172 if (!request.body.avatar_url) {
11731173 console.errorwarn('avatar URL not found in request body');
11741174 console.debug(request.body);
11751175 return response.sendStatus(400);
11761176 }
src/endpoints/horde.js+1 -1
@@ -360,7 +360,7 @@ router.post('/generate-image', jsonParser, async (request, response) => {
360360 { token: api_key_horde });
361361
362362 if (!generation.id) {
363363 console.errorwarn('Image generation request is not satisfyable:', generation.message || 'unknown error');
364364 return response.sendStatus(400);
365365 }
366366
src/endpoints/novelai.js+6 -6
@@ -120,7 +120,7 @@ router.post('/status', jsonParser, async function (req, res) {
120120 const api_key_novel = readSecret(req.user.directories, SECRET_KEYS.NOVEL);
121121
122122 if (!api_key_novel) {
123123 console.errorwarn('NovelAI Access Token is missing.');
124124 return res.sendStatus(400);
125125 }
126126
@@ -141,7 +141,7 @@ router.post('/status', jsonParser, async function (req, res) {
141141 return res.send({ error: true });
142142 }
143143 else {
144144 console.errorwarn('NovelAI returned an error:', response.statusText);
145145 return res.send({ error: true });
146146 }
147147 } catch (error) {
@@ -156,7 +156,7 @@ router.post('/generate', jsonParser, async function (req, res) {
156156 const api_key_novel = readSecret(req.user.directories, SECRET_KEYS.NOVEL);
157157
158158 if (!api_key_novel) {
159159 console.errorwarn('NovelAI Access Token is missing.');
160160 return res.sendStatus(400);
161161 }
162162
@@ -261,7 +261,7 @@ router.post('/generate', jsonParser, async function (req, res) {
261261 if (!response.ok) {
262262 const text = await response.text();
263263 let message = text;
264264 console.errorwarn(`Novel API returned error: ${response.status} ${response.statusText} ${text}`);
265265
266266 try {
267267 const data = JSON.parse(text);
@@ -292,7 +292,7 @@ router.post('/generate-image', jsonParser, async (request, response) => {
292292 const key = readSecret(request.user.directories, SECRET_KEYS.NOVEL);
293293
294294 if (!key) {
295295 console.errorwarn('NovelAI Access Token is missing.');
296296 return response.sendStatus(400);
297297 }
298298
@@ -358,7 +358,7 @@ router.post('/generate-image', jsonParser, async (request, response) => {
358358
359359 if (!generateResult.ok) {
360360 const text = await generateResult.text();
361361 console.errorwarn('NovelAI returned an error.', generateResult.statusText, text);
362362 return response.sendStatus(500);
363363 }
364364
src/endpoints/openai.js+12 -12
@@ -63,7 +63,7 @@ router.post('/caption-image', jsonParser, async (request, response) => {
6363 }
6464
6565 if (!key && !request.body.reverse_proxy && ['custom', 'ooba', 'koboldcpp', 'vllm'].includes(request.body.api) === false) {
6666 console.errorwarn('No key found for API', request.body.api);
6767 return response.sendStatus(400);
6868 }
6969
@@ -93,7 +93,7 @@ router.post('/caption-image', jsonParser, async (request, response) => {
9393 excludeKeysByYaml(body, request.body.custom_exclude_body);
9494 }
9595
9696 console.errordebug('Multimodal captioning request', body);
9797
9898 let apiUrl = '';
9999
@@ -158,7 +158,7 @@ router.post('/caption-image', jsonParser, async (request, response) => {
158158
159159 if (!result.ok) {
160160 const text = await result.text();
161161 console.errorwarn('Multimodal captioning request failed', result.statusText, text);
162162 return response.status(500).send(text);
163163 }
164164
@@ -184,12 +184,12 @@ router.post('/transcribe-audio', urlencodedParser, async (request, response) =>
184184 const key = readSecret(request.user.directories, SECRET_KEYS.OPENAI);
185185
186186 if (!key) {
187187 console.errorwarn('No OpenAI key found');
188188 return response.sendStatus(400);
189189 }
190190
191191 if (!request.file) {
192192 console.errorwarn('No audio file found');
193193 return response.sendStatus(400);
194194 }
195195
@@ -213,7 +213,7 @@ router.post('/transcribe-audio', urlencodedParser, async (request, response) =>
213213
214214 if (!result.ok) {
215215 const text = await result.text();
216216 console.errorwarn('OpenAI request failed', result.statusText, text);
217217 return response.status(500).send(text);
218218 }
219219
@@ -232,7 +232,7 @@ router.post('/generate-voice', jsonParser, async (request, response) => {
232232 const key = readSecret(request.user.directories, SECRET_KEYS.OPENAI);
233233
234234 if (!key) {
235235 console.errorwarn('No OpenAI key found');
236236 return response.sendStatus(400);
237237 }
238238
@@ -253,7 +253,7 @@ router.post('/generate-voice', jsonParser, async (request, response) => {
253253
254254 if (!result.ok) {
255255 const text = await result.text();
256256 console.errorwarn('OpenAI request failed', result.statusText, text);
257257 return response.status(500).send(text);
258258 }
259259
@@ -271,7 +271,7 @@ router.post('/generate-image', jsonParser, async (request, response) => {
271271 const key = readSecret(request.user.directories, SECRET_KEYS.OPENAI);
272272
273273 if (!key) {
274274 console.errorwarn('No OpenAI key found');
275275 return response.sendStatus(400);
276276 }
277277
@@ -288,7 +288,7 @@ router.post('/generate-image', jsonParser, async (request, response) => {
288288
289289 if (!result.ok) {
290290 const text = await result.text();
291291 console.errorwarn('OpenAI request failed', result.statusText, text);
292292 return response.status(500).send(text);
293293 }
294294
@@ -308,7 +308,7 @@ custom.post('/generate-voice', jsonParser, async (request, response) => {
308308 const { input, provider_endpoint, response_format, voice, speed, model } = request.body;
309309
310310 if (!provider_endpoint) {
311311 console.errorwarn('No OpenAI-compatible TTS provider endpoint provided');
312312 return response.sendStatus(400);
313313 }
314314
@@ -329,7 +329,7 @@ custom.post('/generate-voice', jsonParser, async (request, response) => {
329329
330330 if (!result.ok) {
331331 const text = await result.text();
332332 console.errorwarn('OpenAI request failed', result.statusText, text);
333333 return response.status(500).send(text);
334334 }
335335
src/endpoints/stable-diffusion.js+26 -26
@@ -604,7 +604,7 @@ together.post('/models', jsonParser, async (request, response) => {
604604 const key = readSecret(request.user.directories, SECRET_KEYS.TOGETHERAI);
605605
606606 if (!key) {
607607 console.errorwarn('TogetherAI key not found.');
608608 return response.sendStatus(400);
609609 }
610610
@@ -616,14 +616,14 @@ together.post('/models', jsonParser, async (request, response) => {
616616 });
617617
618618 if (!modelsResponse.ok) {
619619 console.errorwarn('TogetherAI returned an error.');
620620 return response.sendStatus(500);
621621 }
622622
623623 const data = await modelsResponse.json();
624624
625625 if (!Array.isArray(data)) {
626626 console.errorwarn('TogetherAI returned invalid data.');
627627 return response.sendStatus(500);
628628 }
629629
@@ -643,7 +643,7 @@ together.post('/generate', jsonParser, async (request, response) => {
643643 const key = readSecret(request.user.directories, SECRET_KEYS.TOGETHERAI);
644644
645645 if (!key) {
646646 console.errorwarn('TogetherAI key not found.');
647647 return response.sendStatus(400);
648648 }
649649
@@ -669,7 +669,7 @@ together.post('/generate', jsonParser, async (request, response) => {
669669 });
670670
671671 if (!result.ok) {
672672 console.errorwarn('TogetherAI returned an error.', { body: await result.text() });
673673 return response.sendStatus(500);
674674 }
675675
@@ -794,14 +794,14 @@ pollinations.post('/models', jsonParser, async (_request, response) => {
794794 const result = await fetch(modelsUrl);
795795
796796 if (!result.ok) {
797797 console.errorwarn('Pollinations returned an error.', result.status, result.statusText);
798798 throw new Error('Pollinations request failed.');
799799 }
800800
801801 const data = await result.json();
802802
803803 if (!Array.isArray(data)) {
804804 console.errorwarn('Pollinations returned invalid data.');
805805 throw new Error('Pollinations request failed.');
806806 }
807807
@@ -834,7 +834,7 @@ pollinations.post('/generate', jsonParser, async (request, response) => {
834834 const result = await fetch(promptUrl);
835835
836836 if (!result.ok) {
837837 console.errorwarn('Pollinations returned an error.', result.status, result.statusText);
838838 throw new Error('Pollinations request failed.');
839839 }
840840
@@ -855,7 +855,7 @@ stability.post('/generate', jsonParser, async (request, response) => {
855855 const key = readSecret(request.user.directories, SECRET_KEYS.STABILITY);
856856
857857 if (!key) {
858858 console.errorwarn('Stability AI key not found.');
859859 return response.sendStatus(400);
860860 }
861861
@@ -896,7 +896,7 @@ stability.post('/generate', jsonParser, async (request, response) => {
896896
897897 if (!result.ok) {
898898 const text = await result.text();
899899 console.errorwarn('Stability AI returned an error.', result.status, result.statusText, text);
900900 return response.sendStatus(500);
901901 }
902902
@@ -915,7 +915,7 @@ blockentropy.post('/models', jsonParser, async (request, response) => {
915915 const key = readSecret(request.user.directories, SECRET_KEYS.BLOCKENTROPY);
916916
917917 if (!key) {
918918 console.errorwarn('Block Entropy key not found.');
919919 return response.sendStatus(400);
920920 }
921921
@@ -927,14 +927,14 @@ blockentropy.post('/models', jsonParser, async (request, response) => {
927927 });
928928
929929 if (!modelsResponse.ok) {
930930 console.errorwarn('Block Entropy returned an error.');
931931 return response.sendStatus(500);
932932 }
933933
934934 const data = await modelsResponse.json();
935935
936936 if (!Array.isArray(data)) {
937937 console.errorwarn('Block Entropy returned invalid data.');
938938 return response.sendStatus(500);
939939 }
940940 const models = data.map(x => ({ value: x.name, text: x.name }));
@@ -951,7 +951,7 @@ blockentropy.post('/generate', jsonParser, async (request, response) => {
951951 const key = readSecret(request.user.directories, SECRET_KEYS.BLOCKENTROPY);
952952
953953 if (!key) {
954954 console.errorwarn('Block Entropy key not found.');
955955 return response.sendStatus(400);
956956 }
957957
@@ -976,7 +976,7 @@ blockentropy.post('/generate', jsonParser, async (request, response) => {
976976 });
977977
978978 if (!result.ok) {
979979 console.errorwarn('Block Entropy returned an error.');
980980 return response.sendStatus(500);
981981 }
982982
@@ -998,7 +998,7 @@ huggingface.post('/generate', jsonParser, async (request, response) => {
998998 const key = readSecret(request.user.directories, SECRET_KEYS.HUGGINGFACE);
999999
10001000 if (!key) {
10011001 console.errorwarn('Hugging Face key not found.');
10021002 return response.sendStatus(400);
10031003 }
10041004
@@ -1016,7 +1016,7 @@ huggingface.post('/generate', jsonParser, async (request, response) => {
10161016 });
10171017
10181018 if (!result.ok) {
10191019 console.errorwarn('Hugging Face returned an error.');
10201020 return response.sendStatus(500);
10211021 }
10221022
@@ -1037,7 +1037,7 @@ nanogpt.post('/models', jsonParser, async (request, response) => {
10371037 const key = readSecret(request.user.directories, SECRET_KEYS.NANOGPT);
10381038
10391039 if (!key) {
10401040 console.errorwarn('NanoGPT key not found.');
10411041 return response.sendStatus(400);
10421042 }
10431043
@@ -1050,7 +1050,7 @@ nanogpt.post('/models', jsonParser, async (request, response) => {
10501050 });
10511051
10521052 if (!modelsResponse.ok) {
10531053 console.errorwarn('NanoGPT returned an error.');
10541054 return response.sendStatus(500);
10551055 }
10561056
@@ -1059,7 +1059,7 @@ nanogpt.post('/models', jsonParser, async (request, response) => {
10591059 const imageModels = data?.models?.image;
10601060
10611061 if (!imageModels || typeof imageModels !== 'object') {
10621062 console.errorwarn('NanoGPT returned invalid data.');
10631063 return response.sendStatus(500);
10641064 }
10651065
@@ -1077,7 +1077,7 @@ nanogpt.post('/generate', jsonParser, async (request, response) => {
10771077 const key = readSecret(request.user.directories, SECRET_KEYS.NANOGPT);
10781078
10791079 if (!key) {
10801080 console.errorwarn('NanoGPT key not found.');
10811081 return response.sendStatus(400);
10821082 }
10831083
@@ -1093,7 +1093,7 @@ nanogpt.post('/generate', jsonParser, async (request, response) => {
10931093 });
10941094
10951095 if (!result.ok) {
10961096 console.errorwarn('NanoGPT returned an error.');
10971097 return response.sendStatus(500);
10981098 }
10991099
@@ -1102,7 +1102,7 @@ nanogpt.post('/generate', jsonParser, async (request, response) => {
11021102
11031103 const image = data?.data?.[0]?.b64_json;
11041104 if (!image) {
11051105 console.errorwarn('NanoGPT returned invalid data.');
11061106 return response.sendStatus(500);
11071107 }
11081108
@@ -1121,7 +1121,7 @@ bfl.post('/generate', jsonParser, async (request, response) => {
11211121 const key = readSecret(request.user.directories, SECRET_KEYS.BFL);
11221122
11231123 if (!key) {
11241124 console.errorwarn('BFL key not found.');
11251125 return response.sendStatus(400);
11261126 }
11271127
@@ -1185,7 +1185,7 @@ bfl.post('/generate', jsonParser, async (request, response) => {
11851185 });
11861186
11871187 if (!result.ok) {
11881188 console.errorwarn('BFL returned an error.');
11891189 return response.sendStatus(500);
11901190 }
11911191
@@ -1201,7 +1201,7 @@ bfl.post('/generate', jsonParser, async (request, response) => {
12011201
12021202 if (!statusResult.ok) {
12031203 const text = await statusResult.text();
12041204 console.errorwarn('BFL returned an error.', text);
12051205 return response.sendStatus(500);
12061206 }
12071207
src/endpoints/tokenizers.js+2 -2
@@ -988,7 +988,7 @@ router.post('/remote/kobold/count', jsonParser, async function (request, respons
988988 const result = await fetch(url, args);
989989
990990 if (!result.ok) {
991991 console.errorwarn(`API returned error: ${result.status} ${result.statusText}`);
992992 return response.send({ error: true });
993993 }
994994
@@ -1052,7 +1052,7 @@ router.post('/remote/textgenerationwebui/encode', jsonParser, async function (re
10521052 const result = await fetch(url, args);
10531053
10541054 if (!result.ok) {
10551055 console.errorwarn(`API returned error: ${result.status} ${result.statusText}`);
10561056 return response.send({ error: true });
10571057 }
10581058
src/endpoints/translate.js+8 -8
@@ -46,7 +46,7 @@ router.post('/libre', jsonParser, async (request, response) => {
4646 const url = readSecret(request.user.directories, SECRET_KEYS.LIBRE_URL);
4747
4848 if (!url) {
4949 console.errorwarn('LibreTranslate URL is not configured.');
5050 return response.sendStatus(400);
5151 }
5252
@@ -85,7 +85,7 @@ router.post('/libre', jsonParser, async (request, response) => {
8585
8686 if (!result.ok) {
8787 const error = await result.text();
8888 console.errorwarn('LibreTranslate error: ', result.statusText, error);
8989 return response.sendStatus(500);
9090 }
9191
@@ -116,7 +116,7 @@ router.post('/google', jsonParser, async (request, response) => {
116116 const result = await fetch(requestUrl);
117117
118118 if (!result.ok) {
119119 console.errorwarn('Google Translate error: ', result.statusText);
120120 return response.sendStatus(500);
121121 }
122122
@@ -173,7 +173,7 @@ router.post('/yandex', jsonParser, async (request, response) => {
173173
174174 if (!result.ok) {
175175 const error = await result.text();
176176 console.errorwarn('Yandex error: ', result.statusText, error);
177177 return response.sendStatus(500);
178178 }
179179
@@ -220,7 +220,7 @@ router.post('/lingva', jsonParser, async (request, response) => {
220220
221221 if (!result.ok) {
222222 const error = await result.text();
223223 console.errorwarn('Lingva error: ', result.statusText, error);
224224 }
225225
226226 /** @type {any} */
@@ -238,7 +238,7 @@ router.post('/deepl', jsonParser, async (request, response) => {
238238 const key = readSecret(request.user.directories, SECRET_KEYS.DEEPL);
239239
240240 if (!key) {
241241 console.errorwarn('DeepL key is not configured.');
242242 return response.sendStatus(400);
243243 }
244244
@@ -280,7 +280,7 @@ router.post('/deepl', jsonParser, async (request, response) => {
280280
281281 if (!result.ok) {
282282 const error = await result.text();
283283 console.errorwarn('DeepL error: ', result.statusText, error);
284284 return response.sendStatus(500);
285285 }
286286
@@ -393,7 +393,7 @@ router.post('/deeplx', jsonParser, async (request, response) => {
393393
394394 if (!result.ok) {
395395 const error = await result.text();
396396 console.errorwarn('DeepLX error: ', result.statusText, error);
397397 return response.sendStatus(500);
398398 }
399399
src/endpoints/users-admin.js+13 -13
@@ -53,12 +53,12 @@ router.post('/get', requireAdminMiddleware, jsonParser, async (_request, respons
5353router.post('/disable', requireAdminMiddleware, jsonParser, async (request, response) => {
5454 try {
5555 if (!request.body.handle) {
5656 console.errorwarn('Disable user failed: Missing required fields');
5757 return response.status(400).json({ error: 'Missing required fields' });
5858 }
5959
6060 if (request.body.handle === request.user.profile.handle) {
6161 console.errorwarn('Disable user failed: Cannot disable yourself');
6262 return response.status(400).json({ error: 'Cannot disable yourself' });
6363 }
6464
@@ -82,7 +82,7 @@ router.post('/disable', requireAdminMiddleware, jsonParser, async (request, resp
8282router.post('/enable', requireAdminMiddleware, jsonParser, async (request, response) => {
8383 try {
8484 if (!request.body.handle) {
8585 console.errorwarn('Enable user failed: Missing required fields');
8686 return response.status(400).json({ error: 'Missing required fields' });
8787 }
8888
@@ -106,7 +106,7 @@ router.post('/enable', requireAdminMiddleware, jsonParser, async (request, respo
106106router.post('/promote', requireAdminMiddleware, jsonParser, async (request, response) => {
107107 try {
108108 if (!request.body.handle) {
109109 console.errorwarn('Promote user failed: Missing required fields');
110110 return response.status(400).json({ error: 'Missing required fields' });
111111 }
112112
@@ -130,12 +130,12 @@ router.post('/promote', requireAdminMiddleware, jsonParser, async (request, resp
130130router.post('/demote', requireAdminMiddleware, jsonParser, async (request, response) => {
131131 try {
132132 if (!request.body.handle) {
133133 console.errorwarn('Demote user failed: Missing required fields');
134134 return response.status(400).json({ error: 'Missing required fields' });
135135 }
136136
137137 if (request.body.handle === request.user.profile.handle) {
138138 console.errorwarn('Demote user failed: Cannot demote yourself');
139139 return response.status(400).json({ error: 'Cannot demote yourself' });
140140 }
141141
@@ -159,7 +159,7 @@ router.post('/demote', requireAdminMiddleware, jsonParser, async (request, respo
159159router.post('/create', requireAdminMiddleware, jsonParser, async (request, response) => {
160160 try {
161161 if (!request.body.handle || !request.body.name) {
162162 console.errorwarn('Create user failed: Missing required fields');
163163 return response.status(400).json({ error: 'Missing required fields' });
164164 }
165165
@@ -167,12 +167,12 @@ router.post('/create', requireAdminMiddleware, jsonParser, async (request, respo
167167 const handle = lodash.kebabCase(String(request.body.handle).toLowerCase().trim());
168168
169169 if (!handle) {
170170 console.errorwarn('Create user failed: Invalid handle');
171171 return response.status(400).json({ error: 'Invalid handle' });
172172 }
173173
174174 if (handles.some(x => x === handle)) {
175175 console.errorwarn('Create user failed: User with that handle already exists');
176176 return response.status(409).json({ error: 'User already exists' });
177177 }
178178
@@ -206,17 +206,17 @@ router.post('/create', requireAdminMiddleware, jsonParser, async (request, respo
206206router.post('/delete', requireAdminMiddleware, jsonParser, async (request, response) => {
207207 try {
208208 if (!request.body.handle) {
209209 console.errorwarn('Delete user failed: Missing required fields');
210210 return response.status(400).json({ error: 'Missing required fields' });
211211 }
212212
213213 if (request.body.handle === request.user.profile.handle) {
214214 console.errorwarn('Delete user failed: Cannot delete yourself');
215215 return response.status(400).json({ error: 'Cannot delete yourself' });
216216 }
217217
218218 if (request.body.handle === DEFAULT_USER.handle) {
219219 console.errorwarn('Delete user failed: Cannot delete default user');
220220 return response.status(400).json({ error: 'Sorry, but the default user cannot be deleted. It is required as a fallback.' });
221221 }
222222
@@ -238,7 +238,7 @@ router.post('/delete', requireAdminMiddleware, jsonParser, async (request, respo
238238router.post('/slugify', requireAdminMiddleware, jsonParser, async (request, response) => {
239239 try {
240240 if (!request.body.text) {
241241 console.errorwarn('Slugify failed: Missing required fields');
242242 return response.status(400).json({ error: 'Missing required fields' });
243243 }
244244
src/endpoints/users-private.js+10 -10
@@ -58,7 +58,7 @@ router.get('/me', async (request, response) => {
5858router.post('/change-avatar', jsonParser, async (request, response) => {
5959 try {
6060 if (!request.body.handle) {
6161 console.errorwarn('Change avatar failed: Missing required fields');
6262 return response.status(400).json({ error: 'Missing required fields' });
6363 }
6464
@@ -69,7 +69,7 @@ router.post('/change-avatar', jsonParser, async (request, response) => {
6969
7070 // Avatar is not a data URL or not an empty string
7171 if (!request.body.avatar.startsWith('data:image/') && request.body.avatar !== '') {
7272 console.errorwarn('Change avatar failed: Invalid data URL');
7373 return response.status(400).json({ error: 'Invalid data URL' });
7474 }
7575
@@ -93,7 +93,7 @@ router.post('/change-avatar', jsonParser, async (request, response) => {
9393router.post('/change-password', jsonParser, async (request, response) => {
9494 try {
9595 if (!request.body.handle) {
9696 console.errorwarn('Change password failed: Missing required fields');
9797 return response.status(400).json({ error: 'Missing required fields' });
9898 }
9999
@@ -142,7 +142,7 @@ router.post('/backup', jsonParser, async (request, response) => {
142142 const handle = request.body.handle;
143143
144144 if (!handle) {
145145 console.errorwarn('Backup failed: Missing required fields');
146146 return response.status(400).json({ error: 'Missing required fields' });
147147 }
148148
@@ -163,7 +163,7 @@ router.post('/reset-settings', jsonParser, async (request, response) => {
163163 const password = request.body.password;
164164
165165 if (request.user.profile.password && request.user.profile.password !== getPasswordHash(password, request.user.profile.salt)) {
166166 console.errorwarn('Reset settings failed: Incorrect password');
167167 return response.status(403).json({ error: 'Incorrect password' });
168168 }
169169
@@ -181,7 +181,7 @@ router.post('/reset-settings', jsonParser, async (request, response) => {
181181router.post('/change-name', jsonParser, async (request, response) => {
182182 try {
183183 if (!request.body.name || !request.body.handle) {
184184 console.errorwarn('Change name failed: Missing required fields');
185185 return response.status(400).json({ error: 'Missing required fields' });
186186 }
187187
@@ -194,7 +194,7 @@ router.post('/change-name', jsonParser, async (request, response) => {
194194 const user = await storage.getItem(toKey(request.body.handle));
195195
196196 if (!user) {
197197 console.errorwarn('Change name failed: User not found');
198198 return response.status(404).json({ error: 'User not found' });
199199 }
200200
@@ -225,19 +225,19 @@ router.post('/reset-step1', jsonParser, async (request, response) => {
225225router.post('/reset-step2', jsonParser, async (request, response) => {
226226 try {
227227 if (!request.body.code) {
228228 console.errorwarn('Recover step 2 failed: Missing required fields');
229229 return response.status(400).json({ error: 'Missing required fields' });
230230 }
231231
232232 if (request.user.profile.password && request.user.profile.password !== getPasswordHash(request.body.password, request.user.profile.salt)) {
233233 console.errorwarn('Recover step 2 failed: Incorrect password');
234234 return response.status(400).json({ error: 'Incorrect password' });
235235 }
236236
237237 const code = RESET_CACHE.get(request.user.profile.handle);
238238
239239 if (!code || code !== request.body.code) {
240240 console.errorwarn('Recover step 2 failed: Incorrect code');
241241 return response.status(400).json({ error: 'Incorrect code' });
242242 }
243243
src/endpoints/users-public.js+7 -7
@@ -56,7 +56,7 @@ router.post('/list', async (_request, response) => {
5656router.post('/login', jsonParser, async (request, response) => {
5757 try {
5858 if (!request.body.handle) {
5959 console.errorwarn('Login failed: Missing required fields');
6060 return response.status(400).json({ error: 'Missing required fields' });
6161 }
6262
@@ -72,12 +72,12 @@ router.post('/login', jsonParser, async (request, response) => {
7272 }
7373
7474 if (!user.enabled) {
7575 console.errorwarn('Login failed: User', user.handle, 'is disabled');
7676 return response.status(403).json({ error: 'User is disabled' });
7777 }
7878
7979 if (user.password && user.password !== getPasswordHash(request.body.password, user.salt)) {
8080 console.errorwarn('Login failed: Incorrect password for', user.handle);
8181 return response.status(403).json({ error: 'Incorrect credentials' });
8282 }
8383
@@ -104,7 +104,7 @@ router.post('/login', jsonParser, async (request, response) => {
104104router.post('/recover-step1', jsonParser, async (request, response) => {
105105 try {
106106 if (!request.body.handle) {
107107 console.errorwarn('Recover step 1 failed: Missing required fields');
108108 return response.status(400).json({ error: 'Missing required fields' });
109109 }
110110
@@ -144,7 +144,7 @@ router.post('/recover-step1', jsonParser, async (request, response) => {
144144router.post('/recover-step2', jsonParser, async (request, response) => {
145145 try {
146146 if (!request.body.handle || !request.body.code) {
147147 console.errorwarn('Recover step 2 failed: Missing required fields');
148148 return response.status(400).json({ error: 'Missing required fields' });
149149 }
150150
@@ -158,7 +158,7 @@ router.post('/recover-step2', jsonParser, async (request, response) => {
158158 }
159159
160160 if (!user.enabled) {
161161 console.errorwarn('Recover step 2 failed: User', user.handle, 'is disabled');
162162 return response.status(403).json({ error: 'User is disabled' });
163163 }
164164
@@ -166,7 +166,7 @@ router.post('/recover-step2', jsonParser, async (request, response) => {
166166
167167 if (request.body.code !== mfaCode) {
168168 await recoverLimiter.consume(ip);
169169 console.errorwarn('Recover step 2 failed: Incorrect code');
170170 return response.status(403).json({ error: 'Incorrect code' });
171171 }
172172