webui-ng/src/lib/stores/settings.ts
2025-05-03 18:21:06 +02:00

161 lines
No EOL
4.3 KiB
TypeScript

import { writable } from 'svelte/store';
import { baseUrl } from '$lib/env';
import type { Settings } from '$lib/types';
// Create a default settings object
const defaultSettings: Settings = {
numScreens: 7,
invertedColor: false,
timerSeconds: 60,
timerRunning: false,
minSecPriceUpd: 30,
fullRefreshMin: 60,
wpTimeout: 600,
tzString: "UTC",
dataSource: 0,
mempoolInstance: "mempool.space",
mempoolSecure: true,
localPoolEndpoint: "localhost:2019",
nostrPubKey: "",
nostrRelay: "wss://relay.damus.io",
nostrZapNotify: false,
nostrZapPubkey: "",
ledFlashOnZap: true,
fontName: "oswald",
availableFonts: ["antonio", "oswald"],
customEndpoint: "ws-staging.btclock.dev",
customEndpointDisableSSL: false,
ledTestOnPower: true,
ledFlashOnUpd: true,
ledBrightness: 255,
stealFocus: false,
mcapBigChar: true,
mdnsEnabled: true,
otaEnabled: true,
useSatsSymbol: true,
useBlkCountdown: true,
suffixPrice: false,
disableLeds: false,
mowMode: false,
verticalDesc: true,
suffixShareDot: false,
enableDebugLog: false,
hostnamePrefix: "btclock",
hostname: "btclock",
ip: "",
txPower: 80,
gitReleaseUrl: "https://git.btclock.dev/api/v1/repos/btclock/btclock_v3/releases/latest",
bitaxeEnabled: false,
bitaxeHostname: "bitaxe1",
miningPoolStats: false,
miningPoolName: "noderunners",
miningPoolUser: "",
availablePools: [
"ocean",
"noderunners",
"satoshi_radio",
"braiins",
"public_pool",
"local_public_pool",
"gobrrr_pool",
"ckpool",
"eu_ckpool"
],
httpAuthEnabled: false,
httpAuthUser: "btclock",
httpAuthPass: "satoshi",
hasFrontlight: false,
// Default frontlight settings
flDisable: false,
flMaxBrightness: 2684,
flAlwaysOn: false,
flEffectDelay: 50,
flFlashOnUpd: true,
flFlashOnZap: true,
// Default light sensor settings
hasLightLevel: false,
luxLightToggle: 128,
flOffWhenDark: false,
hwRev: "",
fsRev: "",
gitRev: "",
gitTag: "",
lastBuildTime: "",
screens: [
{id: 0, name: "Block Height", enabled: true},
{id: 3, name: "Time", enabled: false},
{id: 4, name: "Halving countdown", enabled: false},
{id: 6, name: "Block Fee Rate", enabled: false},
{id: 10, name: "Sats per dollar", enabled: true},
{id: 20, name: "Ticker", enabled: true},
{id: 30, name: "Market Cap", enabled: false}
],
actCurrencies: ["USD"],
availableCurrencies: ["USD", "EUR", "GBP", "JPY", "AUD", "CAD"],
poolLogosUrl: "https://git.btclock.dev/btclock/mining-pool-logos/raw/branch/main",
ceEndpoint: "ws-staging.btclock.dev",
ceDisableSSL: false,
dnd: {
enabled: false,
timeBasedEnabled: false,
startHour: 23,
startMinute: 0,
endHour: 7,
endMinute: 0
}
};
// Create the Svelte store
function createSettingsStore() {
const { subscribe, set, update } = writable<Settings>(defaultSettings);
return {
subscribe,
fetch: async () => {
try {
const response = await fetch(`${baseUrl}/api/settings`);
if (!response.ok) {
throw new Error(`Error fetching settings: ${response.statusText}`);
}
const data = await response.json();
set(data);
return data;
} catch (error) {
console.error('Failed to fetch settings:', error);
return defaultSettings;
}
},
update: async (newSettings: Partial<Settings>) => {
try {
const response = await fetch(`${baseUrl}/api/settings`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(newSettings),
});
if (!response.ok) {
throw new Error(`Error updating settings: ${response.statusText}`);
}
// Update the local store with the new settings
update(currentSettings => ({ ...currentSettings, ...newSettings }));
return true;
} catch (error) {
console.error('Failed to update settings:', error);
return false;
}
},
set: (newSettings: Settings) => set(newSettings),
reset: () => set(defaultSettings)
};
}
export const settings = createSettingsStore();
// Initialize the store by fetching settings when this module is first imported
if (typeof window !== 'undefined') {
settings.fetch();
}