| import fs from 'node:fs'; |
| import path from 'node:path'; |
|
|
| import express from 'express'; |
| import sanitize from 'sanitize-filename'; |
| import { sync as writeFileAtomicSync } from 'write-file-atomic'; |
|
|
| import { getDefaultPresetFile, getDefaultPresets } from './content-manager.js'; |
|
|
| |
| |
| |
| |
| |
| |
| function getPresetSettingsByAPI(apiId, directories) { |
| switch (apiId) { |
| case 'kobold': |
| case 'koboldhorde': |
| return { folder: directories.koboldAI_Settings, extension: '.json' }; |
| case 'novel': |
| return { folder: directories.novelAI_Settings, extension: '.json' }; |
| case 'textgenerationwebui': |
| return { folder: directories.textGen_Settings, extension: '.json' }; |
| case 'openai': |
| return { folder: directories.openAI_Settings, extension: '.json' }; |
| case 'instruct': |
| return { folder: directories.instruct, extension: '.json' }; |
| case 'context': |
| return { folder: directories.context, extension: '.json' }; |
| case 'sysprompt': |
| return { folder: directories.sysprompt, extension: '.json' }; |
| case 'reasoning': |
| return { folder: directories.reasoning, extension: '.json' }; |
| default: |
| return { folder: null, extension: null }; |
| } |
| } |
|
|
| export const router = express.Router(); |
|
|
| router.post('/save', function (request, response) { |
| const name = sanitize(request.body.name); |
| if (!request.body.preset || !name) { |
| return response.sendStatus(400); |
| } |
|
|
| const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
| const filename = name + settings.extension; |
|
|
| if (!settings.folder) { |
| return response.sendStatus(400); |
| } |
|
|
| const fullpath = path.join(settings.folder, filename); |
| writeFileAtomicSync(fullpath, JSON.stringify(request.body.preset, null, 4), 'utf-8'); |
| return response.send({ name }); |
| }); |
|
|
| router.post('/delete', function (request, response) { |
| const name = sanitize(request.body.name); |
| if (!name) { |
| return response.sendStatus(400); |
| } |
|
|
| const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
| const filename = name + settings.extension; |
|
|
| if (!settings.folder) { |
| return response.sendStatus(400); |
| } |
|
|
| const fullpath = path.join(settings.folder, filename); |
|
|
| if (fs.existsSync(fullpath)) { |
| fs.unlinkSync(fullpath); |
| return response.sendStatus(200); |
| } else { |
| return response.sendStatus(404); |
| } |
| }); |
|
|
| router.post('/restore', function (request, response) { |
| try { |
| const settings = getPresetSettingsByAPI(request.body.apiId, request.user.directories); |
| const name = sanitize(request.body.name); |
| const defaultPresets = getDefaultPresets(request.user.directories); |
|
|
| const defaultPreset = defaultPresets.find(p => p.name === name && p.folder === settings.folder); |
|
|
| const result = { isDefault: false, preset: {} }; |
|
|
| if (defaultPreset) { |
| result.isDefault = true; |
| result.preset = getDefaultPresetFile(defaultPreset.filename) || {}; |
| } |
|
|
| return response.send(result); |
| } catch (error) { |
| console.error(error); |
| return response.sendStatus(500); |
| } |
| }); |
|
|