From 2bd645e271486aa00aa03f425c7ee339905de7f3 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:05:18 -0700 Subject: [PATCH 01/16] move child_process import to top --- jsconfig.json | 16 ++++++++++++++++ server.js | 9 +++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 jsconfig.json diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 000000000..790faa9d6 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "node", + "strictNullChecks": true, + "strictFunctionTypes": true, + "checkJs": true, + "allowUmdGlobalAccess": true, + "allowSyntheticDefaultImports": true + }, + "exclude": [ + "node_modules", + "**/node_modules/*" + ] +} \ No newline at end of file diff --git a/server.js b/server.js index ef435fd55..6eb6ae349 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,9 @@ #!/usr/bin/env node +// native node modules +const child_process = require('child_process') + + createDefaultFiles(); function createDefaultFiles() { @@ -838,11 +842,11 @@ function getVersion() { const pkgJson = require('./package.json'); pkgVersion = pkgJson.version; if (!process.pkg && commandExistsSync('git')) { - gitRevision = require('child_process') + gitRevision = child_process .execSync('git rev-parse --short HEAD', { cwd: process.cwd(), stdio: ['ignore', 'pipe', 'ignore'] }) .toString().trim(); - gitBranch = require('child_process') + gitBranch = child_process .execSync('git rev-parse --abbrev-ref HEAD', { cwd: process.cwd(), stdio: ['ignore', 'pipe', 'ignore'] }) .toString().trim(); } @@ -1855,6 +1859,7 @@ app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus data: data, headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel } }; + client.get(api_novelai + "/user/subscription", args, function (data, response) { if (response.statusCode == 200) { //console.log(data); From 8d5eb062e6894d44a2732356121029f388c2b154 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:06:37 -0700 Subject: [PATCH 02/16] move fs and path imports to top --- server.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index 6eb6ae349..78d1e81d1 100644 --- a/server.js +++ b/server.js @@ -2,13 +2,12 @@ // native node modules const child_process = require('child_process') - +const fs = require('fs'); +const path = require('path'); createDefaultFiles(); function createDefaultFiles() { - const fs = require('fs'); - const path = require('path'); const files = { settings: 'public/settings.json', bg_load: 'public/css/bg_load.css', @@ -56,7 +55,6 @@ const cliArguments = yargs(hideBin(process.argv)) }).argv; // change all relative paths -const path = require('path'); const directory = process.pkg ? path.dirname(process.execPath) : __dirname; console.log(process.pkg ? 'Running from binary' : 'Running from source'); process.chdir(directory); @@ -70,7 +68,6 @@ const simpleGit = require('simple-git'); app.use(compression()); app.use(responseTime()); -const fs = require('fs'); const writeFileAtomicSync = require('write-file-atomic').sync; const readline = require('readline'); const open = require('open'); From 288378919a2051ea141fd4471ce2ce41d5cb256c Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:10:40 -0700 Subject: [PATCH 03/16] move express imports to top --- server.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index 78d1e81d1..436762435 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,12 @@ const child_process = require('child_process') const fs = require('fs'); const path = require('path'); +// express related library imports +const express = require('express'); +const compression = require('compression'); +const responseTime = require('response-time'); +const multer = require("multer"); + createDefaultFiles(); function createDefaultFiles() { @@ -59,10 +65,9 @@ const directory = process.pkg ? path.dirname(process.execPath) : __dirname; console.log(process.pkg ? 'Running from binary' : 'Running from source'); process.chdir(directory); -const express = require('express'); -const compression = require('compression'); + const app = express(); -const responseTime = require('response-time'); + const simpleGit = require('simple-git'); app.use(compression()); @@ -72,7 +77,6 @@ const writeFileAtomicSync = require('write-file-atomic').sync; const readline = require('readline'); const open = require('open'); -const multer = require("multer"); const http = require("http"); const https = require('https'); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); From 918aba3eb6b95f46acc07023daa07f77ceb1c95a Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:12:47 -0700 Subject: [PATCH 04/16] group image processing imports at top --- server.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index 436762435..d2b188590 100644 --- a/server.js +++ b/server.js @@ -11,6 +11,15 @@ const compression = require('compression'); const responseTime = require('response-time'); const multer = require("multer"); +// image processing related library imports +const extract = require('png-chunks-extract'); +const encode = require('png-chunks-encode'); +const PNGtext = require('png-chunk-text'); +const jimp = require('jimp'); +const mime = require('mime-types'); +const exif = require('piexifjs'); +const webp = require('webp-converter'); + createDefaultFiles(); function createDefaultFiles() { @@ -81,21 +90,13 @@ const http = require("http"); const https = require('https'); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const contentManager = require('./src/content-manager'); -const extract = require('png-chunks-extract'); -const encode = require('png-chunks-encode'); -const PNGtext = require('png-chunk-text'); -const jimp = require('jimp'); const sanitize = require('sanitize-filename'); -const mime = require('mime-types'); - const cookieParser = require('cookie-parser'); const crypto = require('crypto'); const ipaddr = require('ipaddr.js'); const json5 = require('json5'); -const exif = require('piexifjs'); -const webp = require('webp-converter'); const DeviceDetector = require("device-detector-js"); const { TextEncoder, TextDecoder } = require('util'); const utf8Encode = new TextEncoder(); From fc59b20f36530c20678fee84f27fd23bfd774054 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:16:39 -0700 Subject: [PATCH 05/16] cli/fs related library import grouping --- server.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index d2b188590..3dc04ceee 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,13 @@ const child_process = require('child_process') const fs = require('fs'); const path = require('path'); +// cli/fs related library imports +const yargs = require('yargs/yargs'); +const { hideBin } = require('yargs/helpers'); +const simpleGit = require('simple-git'); +const writeFileAtomicSync = require('write-file-atomic').sync; +const sanitize = require('sanitize-filename'); + // express related library imports const express = require('express'); const compression = require('compression'); @@ -42,8 +49,6 @@ function createDefaultFiles() { } } -const yargs = require('yargs/yargs'); -const { hideBin } = require('yargs/helpers'); const net = require("net"); // work around a node v20 bug: https://github.com/nodejs/node/issues/47822#issuecomment-1564708870 if (net.setDefaultAutoSelectFamily) { @@ -77,12 +82,12 @@ process.chdir(directory); const app = express(); -const simpleGit = require('simple-git'); + app.use(compression()); app.use(responseTime()); -const writeFileAtomicSync = require('write-file-atomic').sync; + const readline = require('readline'); const open = require('open'); @@ -91,7 +96,7 @@ const https = require('https'); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const contentManager = require('./src/content-manager'); -const sanitize = require('sanitize-filename'); + const cookieParser = require('cookie-parser'); const crypto = require('crypto'); const ipaddr = require('ipaddr.js'); From c0b1ea5f4c6c65ca6bc7149c396a1fbc69d5bf1e Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:20:37 -0700 Subject: [PATCH 06/16] grouping native node imports --- server.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/server.js b/server.js index 3dc04ceee..b7a223497 100644 --- a/server.js +++ b/server.js @@ -2,8 +2,13 @@ // native node modules const child_process = require('child_process') +const crypto = require('crypto'); const fs = require('fs'); +const http = require("http"); +const https = require('https'); const path = require('path'); +const readline = require('readline'); +const { TextEncoder, TextDecoder } = require('util'); // cli/fs related library imports const yargs = require('yargs/yargs'); @@ -79,31 +84,21 @@ const directory = process.pkg ? path.dirname(process.execPath) : __dirname; console.log(process.pkg ? 'Running from binary' : 'Running from source'); process.chdir(directory); - const app = express(); - - - app.use(compression()); app.use(responseTime()); - -const readline = require('readline'); const open = require('open'); -const http = require("http"); -const https = require('https'); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const contentManager = require('./src/content-manager'); - const cookieParser = require('cookie-parser'); -const crypto = require('crypto'); const ipaddr = require('ipaddr.js'); const json5 = require('json5'); const DeviceDetector = require("device-detector-js"); -const { TextEncoder, TextDecoder } = require('util'); + const utf8Encode = new TextEncoder(); const commandExistsSync = require('command-exists').sync; From 9087736835b0a87bc08d6155d46ddcecdaacca39 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:23:53 -0700 Subject: [PATCH 07/16] move and organize additional imports --- server.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/server.js b/server.js index b7a223497..30b1b603f 100644 --- a/server.js +++ b/server.js @@ -11,25 +11,28 @@ const readline = require('readline'); const { TextEncoder, TextDecoder } = require('util'); // cli/fs related library imports -const yargs = require('yargs/yargs'); -const { hideBin } = require('yargs/helpers'); +const commandExistsSync = require('command-exists').sync; +const sanitize = require('sanitize-filename'); const simpleGit = require('simple-git'); const writeFileAtomicSync = require('write-file-atomic').sync; -const sanitize = require('sanitize-filename'); +const yargs = require('yargs/yargs'); +const { hideBin } = require('yargs/helpers'); -// express related library imports +// express/net related library imports const express = require('express'); const compression = require('compression'); -const responseTime = require('response-time'); +const cookieParser = require('cookie-parser'); const multer = require("multer"); +const responseTime = require('response-time'); +const DeviceDetector = require("device-detector-js"); // image processing related library imports -const extract = require('png-chunks-extract'); +const exif = require('piexifjs'); const encode = require('png-chunks-encode'); -const PNGtext = require('png-chunk-text'); +const extract = require('png-chunks-extract'); const jimp = require('jimp'); const mime = require('mime-types'); -const exif = require('piexifjs'); +const PNGtext = require('png-chunk-text'); const webp = require('webp-converter'); createDefaultFiles(); @@ -93,14 +96,13 @@ const open = require('open'); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const contentManager = require('./src/content-manager'); -const cookieParser = require('cookie-parser'); const ipaddr = require('ipaddr.js'); const json5 = require('json5'); -const DeviceDetector = require("device-detector-js"); + const utf8Encode = new TextEncoder(); -const commandExistsSync = require('command-exists').sync; + // impoort from statsHelpers.js const statsHelpers = require('./statsHelpers.js'); From 26e008e907f341a7fc4f3e9c1f0338fad0869784 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:26:59 -0700 Subject: [PATCH 08/16] move and organize more imports --- server.js | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/server.js b/server.js index 30b1b603f..2ecef5a9f 100644 --- a/server.js +++ b/server.js @@ -12,19 +12,28 @@ const { TextEncoder, TextDecoder } = require('util'); // cli/fs related library imports const commandExistsSync = require('command-exists').sync; +const open = require('open'); const sanitize = require('sanitize-filename'); const simpleGit = require('simple-git'); const writeFileAtomicSync = require('write-file-atomic').sync; const yargs = require('yargs/yargs'); const { hideBin } = require('yargs/helpers'); -// express/net related library imports +// express related library imports const express = require('express'); const compression = require('compression'); const cookieParser = require('cookie-parser'); const multer = require("multer"); const responseTime = require('response-time'); + +// net related library imports +const axios = require('axios'); const DeviceDetector = require("device-detector-js"); +const ipaddr = require('ipaddr.js'); +const ipMatching = require('ip-matching'); +const json5 = require('json5'); +const Client = require('node-rest-client').Client; +const WebSocket = require('ws'); // image processing related library imports const exif = require('piexifjs'); @@ -34,6 +43,16 @@ const jimp = require('jimp'); const mime = require('mime-types'); const PNGtext = require('png-chunk-text'); const webp = require('webp-converter'); +const yauzl = require('yauzl'); + +// tokenizing related library imports +const tiktoken = require('@dqbd/tiktoken'); + +// local library imports +const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); +const characterCardParser = require('./src/character-card-parser.js'); +const contentManager = require('./src/content-manager'); +const statsHelpers = require('./statsHelpers.js'); createDefaultFiles(); @@ -91,23 +110,10 @@ const app = express(); app.use(compression()); app.use(responseTime()); -const open = require('open'); - -const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); -const contentManager = require('./src/content-manager'); - -const ipaddr = require('ipaddr.js'); -const json5 = require('json5'); - - - const utf8Encode = new TextEncoder(); - // impoort from statsHelpers.js -const statsHelpers = require('./statsHelpers.js'); -const characterCardParser = require('./src/character-card-parser.js'); const config = require(path.join(process.cwd(), './config.conf')); const server_port = process.env.SILLY_TAVERN_PORT || config.port; @@ -128,10 +134,6 @@ const enableExtensions = config.enableExtensions; const listen = config.listen; const allowKeysExposure = config.allowKeysExposure; -const axios = require('axios'); -const tiktoken = require('@dqbd/tiktoken'); -const WebSocket = require('ws'); - function getHordeClient() { const AIHorde = require("./src/horde"); const ai_horde = new AIHorde({ @@ -140,10 +142,6 @@ function getHordeClient() { return ai_horde; } -const ipMatching = require('ip-matching'); -const yauzl = require('yauzl'); - -const Client = require('node-rest-client').Client; const client = new Client(); client.on('error', (err) => { From d07779e5da9d4dede5aa8750c0fc1dc7f5ecef4b Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:28:13 -0700 Subject: [PATCH 09/16] refactor ambiguous "Client" from node-rest-client --- server.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server.js b/server.js index 2ecef5a9f..559ec3927 100644 --- a/server.js +++ b/server.js @@ -32,7 +32,7 @@ const DeviceDetector = require("device-detector-js"); const ipaddr = require('ipaddr.js'); const ipMatching = require('ip-matching'); const json5 = require('json5'); -const Client = require('node-rest-client').Client; +const RESTClient = require('node-rest-client').Client; const WebSocket = require('ws'); // image processing related library imports @@ -142,9 +142,9 @@ function getHordeClient() { return ai_horde; } -const client = new Client(); +const restClient = new RESTClient(); -client.on('error', (err) => { +restClient.on('error', (err) => { console.error('An error occurred:', err); }); @@ -1862,7 +1862,7 @@ app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel } }; - client.get(api_novelai + "/user/subscription", args, function (data, response) { + restClient.get(api_novelai + "/user/subscription", args, function (data, response) { if (response.statusCode == 200) { //console.log(data); response_getstatus_novel.send(data);//data); @@ -3125,7 +3125,7 @@ app.post("/getstatus_openai", jsonParser, function (request, response_getstatus_ ...headers, }, }; - client.get(api_url + "/models", args, function (data, response) { + restClient.get(api_url + "/models", args, function (data, response) { if (response.statusCode == 200) { response_getstatus_openai.send(data); if (request.body.use_openrouter) { @@ -3978,7 +3978,7 @@ async function postAsync(url, args) { function getAsync(url, args) { return new Promise((resolve, reject) => { - client.get(url, args, (data, response) => { + restClient.get(url, args, (data, response) => { if (response.statusCode >= 400) { reject(data); } From 7bf72beed71ec5a4305ba6636b12447e89bf0f9e Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:29:02 -0700 Subject: [PATCH 10/16] move AIHorde import to top --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 559ec3927..bbaa45fa3 100644 --- a/server.js +++ b/server.js @@ -49,6 +49,7 @@ const yauzl = require('yauzl'); const tiktoken = require('@dqbd/tiktoken'); // local library imports +const AIHorde = require("./src/horde"); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const characterCardParser = require('./src/character-card-parser.js'); const contentManager = require('./src/content-manager'); @@ -135,7 +136,6 @@ const listen = config.listen; const allowKeysExposure = config.allowKeysExposure; function getHordeClient() { - const AIHorde = require("./src/horde"); const ai_horde = new AIHorde({ client_agent: getVersion()?.agent || 'SillyTavern:UNKNOWN:Cohee#1207', }); From 403546e514c3527b1f1b23abb7ae7cc63a093954 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:34:41 -0700 Subject: [PATCH 11/16] finish moving and organizing require statements --- server.js | 45 +++++++++++++++------------------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/server.js b/server.js index bbaa45fa3..86a170770 100644 --- a/server.js +++ b/server.js @@ -8,6 +8,9 @@ const http = require("http"); const https = require('https'); const path = require('path'); const readline = require('readline'); +const util = require('util'); +const { Readable } = require('stream'); +const { finished } = require('stream/promises'); const { TextEncoder, TextDecoder } = require('util'); // cli/fs related library imports @@ -19,7 +22,9 @@ const writeFileAtomicSync = require('write-file-atomic').sync; const yargs = require('yargs/yargs'); const { hideBin } = require('yargs/helpers'); -// express related library imports +// express/server related library imports +const cors = require('cors'); +const doubleCsrf = require('csrf-csrf').doubleCsrf; const express = require('express'); const compression = require('compression'); const cookieParser = require('cookie-parser'); @@ -29,6 +34,7 @@ const responseTime = require('response-time'); // net related library imports const axios = require('axios'); const DeviceDetector = require("device-detector-js"); +const fetch = require('node-fetch').default; const ipaddr = require('ipaddr.js'); const ipMatching = require('ip-matching'); const json5 = require('json5'); @@ -46,13 +52,20 @@ const webp = require('webp-converter'); const yauzl = require('yauzl'); // tokenizing related library imports +const { SentencePieceProcessor } = require("@agnai/sentencepiece-js"); const tiktoken = require('@dqbd/tiktoken'); +const { Tokenizer } = require('@agnai/web-tokenizers'); + +// misc/other imports +const _ = require('lodash'); +const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser'); // local library imports const AIHorde = require("./src/horde"); const basicAuthMiddleware = require('./src/middleware/basicAuthMiddleware'); const characterCardParser = require('./src/character-card-parser.js'); const contentManager = require('./src/content-manager'); +const novelai = require('./src/novelai'); const statsHelpers = require('./statsHelpers.js'); createDefaultFiles(); @@ -189,8 +202,6 @@ function get_mancer_headers() { const delay = ms => new Promise(resolve => setTimeout(resolve, ms)) -const { SentencePieceProcessor } = require("@agnai/sentencepiece-js"); -const { Tokenizer } = require('@agnai/web-tokenizers'); const CHARS_PER_TOKEN = 3.35; let spp_llama; @@ -339,8 +350,6 @@ const directories = { // CSRF Protection // if (cliArguments.disableCsrf === false) { - const doubleCsrf = require('csrf-csrf').doubleCsrf; - const CSRF_SECRET = crypto.randomBytes(8).toString('hex'); const COOKIES_SECRET = crypto.randomBytes(8).toString('hex'); @@ -374,7 +383,6 @@ if (cliArguments.disableCsrf === false) { } // CORS Settings // -const cors = require('cors'); const CORS = cors({ origin: 'null', methods: ['OPTIONS'] @@ -545,7 +553,6 @@ app.post("/generate", jsonParser, async function (request, response_generate = r let fetch, url, response; for (let i = 0; i < MAX_RETRIES; i++) { try { - fetch = require('node-fetch').default; url = request.body.streaming ? `${api_server}/extra/generate/stream` : `${api_server}/v1/generate`; response = await fetch(url, { method: 'POST', timeout: 0, ...args }); @@ -893,13 +900,11 @@ function convertToV2(char) { function unsetFavFlag(char) { - const _ = require('lodash'); _.set(char, 'fav', false); _.set(char, 'data.extensions.fav', false); } function readFromV2(char) { - const _ = require('lodash'); if (_.isUndefined(char.data)) { console.warn('Spec v2 data missing'); return char; @@ -954,7 +959,6 @@ function readFromV2(char) { //***************** Main functions function charaFormatData(data) { // This is supposed to save all the foreign keys that ST doesn't care about - const _ = require('lodash'); const char = tryParse(data.json_data) || {}; // This function uses _.cond() to create a series of conditional checks that return the desired output based on the input data. @@ -1093,7 +1097,6 @@ app.post("/renamecharacter", jsonParser, async function (request, response) { const newChatsPath = path.join(chatsPath, newInternalName); try { - const _ = require('lodash'); // Read old file, replace name int it const rawOldData = await charaRead(oldAvatarPath); const oldData = getCharaCardV2(json5.parse(rawOldData)); @@ -1895,7 +1898,6 @@ app.post("/generate_novelai", jsonParser, async function (request, response_gene controller.abort(); }); - const novelai = require('./src/novelai'); const isNewModel = (request.body.model.includes('clio') || request.body.model.includes('kayra')); const badWordsList = novelai.getBadWordsList(request.body.model); @@ -1950,7 +1952,7 @@ app.post("/generate_novelai", jsonParser, async function (request, response_gene "order": request.body.order } }; - const util = require('util'); + console.log(util.inspect(data, { depth: 4 })) const args = { @@ -1960,7 +1962,6 @@ app.post("/generate_novelai", jsonParser, async function (request, response_gene }; try { - const fetch = require('node-fetch').default; const url = request.body.streaming ? `${api_novelai}/ai/generate-stream` : `${api_novelai}/ai/generate`; const response = await fetch(url, { method: 'POST', timeout: 0, ...args }); @@ -2311,7 +2312,6 @@ app.post("/exportchat", jsonParser, async function (request, response) { } } - const readline = require('readline'); const readStream = fs.createReadStream(filename); const rl = readline.createInterface({ input: readStream, @@ -3275,7 +3275,6 @@ function convertClaudePrompt(messages, addHumanPrefix, addAssistantPostfix) { } async function sendScaleRequest(request, response) { - const fetch = require('node-fetch').default; const api_url = new URL(request.body.api_url_scale).toString(); const api_key_scale = readSecret(SECRET_KEYS.SCALE); @@ -3389,7 +3388,6 @@ app.post("/generate_altscale", jsonParser, function (request, response_generate_ }); async function sendClaudeRequest(request, response) { - const fetch = require('node-fetch').default; const api_url = new URL(request.body.reverse_proxy || api_claude).toString(); const api_key_claude = request.body.reverse_proxy ? request.body.proxy_password : readSecret(SECRET_KEYS.CLAUDE); @@ -3965,7 +3963,6 @@ app.post("/tokenize_via_api", jsonParser, async function (request, response) { // ** REST CLIENT ASYNC WRAPPERS ** async function postAsync(url, args) { - const fetch = require('node-fetch').default; const response = await fetch(url, { method: 'POST', timeout: 0, ...args }); if (response.ok) { @@ -4444,8 +4441,6 @@ app.post('/libre_translate', jsonParser, async (request, response) => { }); app.post('/google_translate', jsonParser, async (request, response) => { - const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser'); - const text = request.body.text; const lang = request.body.lang; @@ -4491,7 +4486,6 @@ app.post('/deepl_translate', jsonParser, async (request, response) => { console.log('Input text: ' + text); - const fetch = require('node-fetch').default; const params = new URLSearchParams(); params.append('text', text); params.append('target_lang', lang); @@ -4537,7 +4531,6 @@ app.post('/novel_tts', jsonParser, async (request, response) => { } try { - const fetch = require('node-fetch').default; const url = `${api_novelai}/ai/generate-voice?text=${encodeURIComponent(text)}&voice=-1&seed=${encodeURIComponent(voice)}&opus=false&version=v2`; const result = await fetch(url, { method: 'GET', @@ -4721,8 +4714,6 @@ app.post('/import_custom', jsonParser, async (request, response) => { }); async function downloadChubLorebook(id) { - const fetch = require('node-fetch').default; - const result = await fetch('https://api.chub.ai/api/lorebooks/download', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -4746,8 +4737,6 @@ async function downloadChubLorebook(id) { } async function downloadChubCharacter(id) { - const fetch = require('node-fetch').default; - const result = await fetch('https://api.chub.ai/api/characters/download', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -5241,8 +5230,6 @@ function checkAssetFileName(inputFilename) { * @returns {void} */ app.post('/asset_download', jsonParser, async (request, response) => { - const { Readable } = require('stream'); - const { finished } = require('stream/promises'); const url = request.body.url; const inputCategory = request.body.category; const inputFilename = sanitize(request.body.filename); @@ -5308,8 +5295,6 @@ app.post('/asset_download', jsonParser, async (request, response) => { * @returns {void} */ app.post('/asset_delete', jsonParser, async (request, response) => { - const { Readable } = require('stream'); - const { finished } = require('stream/promises'); const inputCategory = request.body.category; const inputFilename = sanitize(request.body.filename); const validCategories = ["bgm", "ambient"]; From 1ce7131c1b20cc8dd99434b44a98a51eeffcb733 Mon Sep 17 00:00:00 2001 From: RealBeepMcJeep Date: Tue, 29 Aug 2023 14:39:15 -0700 Subject: [PATCH 12/16] remove jsconfig to match current staging --- jsconfig.json | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 jsconfig.json diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index 790faa9d6..000000000 --- a/jsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "module": "ESNext", - "target": "ESNext", - "moduleResolution": "node", - "strictNullChecks": true, - "strictFunctionTypes": true, - "checkJs": true, - "allowUmdGlobalAccess": true, - "allowSyntheticDefaultImports": true - }, - "exclude": [ - "node_modules", - "**/node_modules/*" - ] -} \ No newline at end of file From a757532c3ee8d7e72adb5e9d9cf11e76bec0446c Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Wed, 30 Aug 2023 21:46:09 +0300 Subject: [PATCH 13/16] Fix local fetch import for Kobold --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index a73b7a495..f12af1435 100644 --- a/server.js +++ b/server.js @@ -550,7 +550,7 @@ app.post("/generate", jsonParser, async function (request, response_generate = r const MAX_RETRIES = 50; const delayAmount = 2500; - let fetch, url, response; + let url, response; for (let i = 0; i < MAX_RETRIES; i++) { try { url = request.body.streaming ? `${api_server}/extra/generate/stream` : `${api_server}/v1/generate`; From ce46e1a4ca4bf29e36c26111d2e70d26636e7a9b Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Wed, 30 Aug 2023 21:58:46 +0300 Subject: [PATCH 14/16] Replace restClient in getstatus_novelai --- server.js | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/server.js b/server.js index f12af1435..e914fc22e 100644 --- a/server.js +++ b/server.js @@ -1850,8 +1850,7 @@ function getImages(path) { //***********Novel.ai API -app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus_novel = response) { - +app.post("/getstatus_novelai", jsonParser, async function (request, response_getstatus_novel) { if (!request.body) return response_getstatus_novel.sendStatus(400); const api_key_novel = readSecret(SECRET_KEYS.NOVEL); @@ -1859,28 +1858,30 @@ app.post("/getstatus_novelai", jsonParser, function (request, response_getstatus return response_getstatus_novel.sendStatus(401); } - var data = {}; - var args = { - data: data, - headers: { "Content-Type": "application/json", "Authorization": "Bearer " + api_key_novel } - }; + try { + const response = await fetch(api_novelai + "/user/subscription", { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Authorization': "Bearer " + api_key_novel, + }, + }); - restClient.get(api_novelai + "/user/subscription", args, function (data, response) { - if (response.statusCode == 200) { - //console.log(data); - response_getstatus_novel.send(data);//data); + if (response.ok) { + const data = await response.json(); + return response_getstatus_novel.send(data); + } else if (response.status == 401) { + console.log('NovelAI Access Token is incorrect.'); + return response_getstatus_novel.send({ error: true }); } else { - if (response.statusCode == 401) { - console.log('Access Token is incorrect.'); - } - - console.log(data); - response_getstatus_novel.send({ error: true }); + console.log('NovelAI returned an error:', response.statusText); + return response_getstatus_novel.send({ error: true }); } - }).on('error', function () { - response_getstatus_novel.send({ error: true }); - }); + } catch (error) { + console.log(error); + return response_getstatus_novel.send({ error: true }); + } }); app.post("/generate_novelai", jsonParser, async function (request, response_generate_novel = response) { From f5e52eab05b1e73f813adcad320e2a11302725b6 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Wed, 30 Aug 2023 22:04:11 +0300 Subject: [PATCH 15/16] Specify read encoding --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index e914fc22e..28c37f94e 100644 --- a/server.js +++ b/server.js @@ -4180,7 +4180,7 @@ function migrateSecrets() { try { let modified = false; - const fileContents = fs.readFileSync(SETTINGS_FILE); + const fileContents = fs.readFileSync(SETTINGS_FILE, 'utf8'); const settings = JSON.parse(fileContents); const oaiKey = settings?.api_key_openai; const hordeKey = settings?.horde_settings?.api_key; From 220d19d3ec85ab83913ace8f315a0453b9094544 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Wed, 30 Aug 2023 22:09:09 +0300 Subject: [PATCH 16/16] Remove useless assignments --- server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index 28c37f94e..f4e5b2246 100644 --- a/server.js +++ b/server.js @@ -3098,7 +3098,7 @@ app.get('/thumbnail', jsonParser, async function (request, response) { }); /* OpenAI */ -app.post("/getstatus_openai", jsonParser, function (request, response_getstatus_openai = response) { +app.post("/getstatus_openai", jsonParser, function (request, response_getstatus_openai) { if (!request.body) return response_getstatus_openai.sendStatus(400); let api_url; @@ -3133,7 +3133,7 @@ app.post("/getstatus_openai", jsonParser, function (request, response_getstatus_ let models = []; data.data.forEach(model => { const context_length = model.context_length; - const tokens_dollar = parseFloat(1 / (1000 * model.pricing.prompt)); + const tokens_dollar = Number(1 / (1000 * model.pricing.prompt)); const tokens_rounded = (Math.round(tokens_dollar * 1000) / 1000).toFixed(0); models[model.id] = { tokens_per_dollar: tokens_rounded + 'k', @@ -3649,7 +3649,7 @@ app.post("/generate_openai", jsonParser, function (request, response_generate_op makeRequest(config, response_generate_openai, request); }); -app.post("/tokenize_openai", jsonParser, function (request, response_tokenize_openai = response) { +app.post("/tokenize_openai", jsonParser, function (request, response_tokenize_openai) { if (!request.body) return response_tokenize_openai.sendStatus(400); let num_tokens = 0; @@ -3757,7 +3757,7 @@ async function sendAI21Request(request, response) { } -app.post("/tokenize_ai21", jsonParser, function (request, response_tokenize_ai21 = response) { +app.post("/tokenize_ai21", jsonParser, function (request, response_tokenize_ai21) { if (!request.body) return response_tokenize_ai21.sendStatus(400); const options = { method: 'POST',