Files

63 lines
2.1 KiB
JavaScript

import { app } from "/scripts/app.js";
import { api } from "/scripts/api.js";
const GEMINI_API_KEY_ID = "HackAfterDark.GeminiApiKey";
const PRESETS_PATH_ID = "HackAfterDark.PresetsPath";
// Helper function to save settings to the backend
async function saveSettings(settings) {
try {
const resp = await api.fetchApi("/hackafterdark/settings", {
method: "POST",
body: JSON.stringify(settings),
});
if (resp.status !== 200) {
console.error("Failed to save HackAfterDark settings.");
}
} catch (e) {
console.error("Error saving HackAfterDark settings:", e);
}
}
app.registerExtension({
name: "HackAfterDark.Settings",
async setup(app) {
// API Key Setting
const apiKeySetting = app.ui.settings.addSetting({
id: GEMINI_API_KEY_ID,
name: "Gemini API Key",
type: "text",
defaultValue: "",
onChange: async (value) => {
await saveSettings({ gemini_api_key: value, presets_path: presetsPathSetting.value });
},
});
// Presets Path Setting
const presetsPathSetting = app.ui.settings.addSetting({
id: PRESETS_PATH_ID,
name: "Prompt Template Directory",
type: "text",
defaultValue: "",
onChange: async (value) => {
await saveSettings({ gemini_api_key: apiKeySetting.value, presets_path: value });
},
});
// Load the initial values from the backend
try {
const resp = await api.fetchApi("/hackafterdark/settings");
if (resp.status === 200) {
const settings = await resp.json();
if (settings.gemini_api_key) {
apiKeySetting.value = settings.gemini_api_key;
}
if (settings.presets_path) {
presetsPathSetting.value = settings.presets_path;
}
}
} catch (e) {
console.error("Failed to load HackAfterDark settings:", e);
}
},
});