Files
WYF-koubo/electron/lib/store.ts
T
2026-06-19 18:45:55 +08:00

139 lines
3.5 KiB
TypeScript

/**
* 🔐 Store Manager - 用于持久化存储激活信息和设备指纹
* 使用 JSON 文件存储,位于用户数据目录
*/
import { app } from 'electron';
import * as fs from 'node:fs';
import * as path from 'node:path';
import Log from '../mapi/log/main';
interface StoreData {
activation?: any;
deviceFingerprint?: string;
}
export class Store {
private static instance: Store | null = null;
private storePath: string;
private data: StoreData = {};
private constructor() {
const userDataPath = app.getPath('userData');
this.storePath = path.join(userDataPath, 'store.json');
this.load();
}
/**
* 获取 Store 单例实例(延迟初始化)
*/
static getInstance(): Store {
if (!Store.instance) {
Store.instance = new Store();
}
return Store.instance;
}
/**
* 从文件加载数据
*/
private load(): void {
try {
if (fs.existsSync(this.storePath)) {
const content = fs.readFileSync(this.storePath, 'utf-8');
this.data = JSON.parse(content);
Log.info('[Store] 已从文件加载持久化数据:', {
hasActivation: !!this.data.activation,
hasDeviceFingerprint: !!this.data.deviceFingerprint
});
} else {
this.data = {};
Log.info('[Store] Store 文件不存在,使用空数据');
}
} catch (error) {
Log.error('[Store] 加载文件失败:', error);
this.data = {};
}
}
/**
* 保存数据到文件
*/
private save(): void {
try {
const dir = path.dirname(this.storePath);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
fs.writeFileSync(this.storePath, JSON.stringify(this.data, null, 2), 'utf-8');
Log.info('[Store] 数据已保存到文件');
} catch (error) {
Log.error('[Store] 保存文件失败:', error);
throw error;
}
}
/**
* 获取激活信息
*/
getActivation(): any {
Log.info('[Store] 获取激活信息:', !!this.data.activation);
return this.data.activation || null;
}
/**
* 保存激活信息
*/
setActivation(data: any): void {
Log.info('[Store] 保存激活信息');
this.data.activation = data;
this.save();
}
/**
* 清除激活信息
*/
clearActivation(): void {
Log.info('[Store] 清除激活信息');
delete this.data.activation;
this.save();
}
/**
* 获取设备指纹
*/
getDeviceFingerprint(): string | null {
Log.info('[Store] 获取设备指纹:', !!this.data.deviceFingerprint);
return this.data.deviceFingerprint || null;
}
/**
* 保存设备指纹
*/
setDeviceFingerprint(fingerprint: string): void {
Log.info('[Store] 保存设备指纹');
this.data.deviceFingerprint = fingerprint;
this.save();
}
/**
* 清除设备指纹
*/
clearDeviceFingerprint(): void {
Log.info('[Store] 清除设备指纹');
delete this.data.deviceFingerprint;
this.save();
}
}
// 延迟初始化:只有在第一次调用时才创建 Store 实例
// 这样确保 AppEnv 已经初始化完成
export default {
getActivation: () => Store.getInstance().getActivation(),
setActivation: (data: any) => Store.getInstance().setActivation(data),
clearActivation: () => Store.getInstance().clearActivation(),
getDeviceFingerprint: () => Store.getInstance().getDeviceFingerprint(),
setDeviceFingerprint: (fingerprint: string) => Store.getInstance().setDeviceFingerprint(fingerprint),
clearDeviceFingerprint: () => Store.getInstance().clearDeviceFingerprint(),
};