mirror of
https://gitee.com/wanwujie/sub2api-mobile
synced 2026-04-24 08:44:46 +08:00
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
|
|
import * as SecureStore from 'expo-secure-store';
|
||
|
|
const { proxy } = require('valtio');
|
||
|
|
|
||
|
|
const BASE_URL_KEY = 'sub2api_base_url';
|
||
|
|
const ADMIN_KEY_KEY = 'sub2api_admin_api_key';
|
||
|
|
|
||
|
|
export function getDefaultAdminConfig() {
|
||
|
|
return {
|
||
|
|
baseUrl: '',
|
||
|
|
adminApiKey: '',
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
async function getItem(key: string) {
|
||
|
|
if (typeof window !== 'undefined') {
|
||
|
|
if (typeof localStorage === 'undefined') {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return localStorage.getItem(key);
|
||
|
|
}
|
||
|
|
|
||
|
|
return SecureStore.getItemAsync(key);
|
||
|
|
}
|
||
|
|
|
||
|
|
async function setItem(key: string, value: string) {
|
||
|
|
if (typeof window !== 'undefined') {
|
||
|
|
if (typeof localStorage !== 'undefined') {
|
||
|
|
localStorage.setItem(key, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
await SecureStore.setItemAsync(key, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
export const adminConfigState = proxy({
|
||
|
|
...getDefaultAdminConfig(),
|
||
|
|
hydrated: false,
|
||
|
|
saving: false,
|
||
|
|
});
|
||
|
|
|
||
|
|
export async function hydrateAdminConfig() {
|
||
|
|
const defaults = getDefaultAdminConfig();
|
||
|
|
const [baseUrl, adminApiKey] = await Promise.all([
|
||
|
|
getItem(BASE_URL_KEY),
|
||
|
|
getItem(ADMIN_KEY_KEY),
|
||
|
|
]);
|
||
|
|
|
||
|
|
adminConfigState.baseUrl = baseUrl ?? defaults.baseUrl;
|
||
|
|
adminConfigState.adminApiKey = adminApiKey ?? defaults.adminApiKey;
|
||
|
|
|
||
|
|
adminConfigState.hydrated = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function saveAdminConfig(input: { baseUrl: string; adminApiKey: string }) {
|
||
|
|
adminConfigState.saving = true;
|
||
|
|
|
||
|
|
const nextBaseUrl = input.baseUrl.trim().replace(/\/$/, '');
|
||
|
|
const nextAdminApiKey = input.adminApiKey.trim();
|
||
|
|
|
||
|
|
await Promise.all([
|
||
|
|
setItem(BASE_URL_KEY, nextBaseUrl),
|
||
|
|
setItem(ADMIN_KEY_KEY, nextAdminApiKey),
|
||
|
|
]);
|
||
|
|
|
||
|
|
adminConfigState.baseUrl = nextBaseUrl;
|
||
|
|
adminConfigState.adminApiKey = nextAdminApiKey;
|
||
|
|
adminConfigState.saving = false;
|
||
|
|
}
|