NapCatQQ/packages/napcat-core/wrapper.ts
H3CoF6 246269b519
feat: Support custom filename and cover image for Flash Transfer (#1544)
* feat: support thumbnail for flash-transfer

* fix: fix get thumbnail path unknown type error

* Refactor flash module types and enums

Standardized TypeScript interface property formatting in flash.ts, flash data, and wrapper files. Introduced the UploadSceneType enum for upload scene types, replacing hardcoded numeric values. Improved type annotations and consistency across the flash API and related data structures.

* Update arg type in NodeQQNTWrapperUtil interface

Changed the type of the 'arg' parameter in the NodeQQNTWrapperUtil interface from optional number to 'number | null | undefined' for improved type clarity.

* Refactor flash scene type and update method params

Introduced BusiScene enum for sceneType in FileListInfoRequests to improve type safety. Renamed parameters in getFileThumbSavePathForSend for better clarity.

* Refactor downloadSceneType to use enum type

Replaced numeric downloadSceneType fields with the DownloadSceneType enum in relevant interfaces. Updated NodeIKernelFlashTransferService method signatures to use DownloadSceneType for download operations, improving type safety and code clarity.

* refactor: remove thumbnail dependency for QQ resource icons

* fix: remove useless console.log

---------

Co-authored-by: 手瓜一十雪 <nanaeonn@outlook.com>
2026-01-25 09:51:43 +08:00

376 lines
10 KiB
TypeScript

import { NodeIDependsAdapter, NodeIDispatcherAdapter, NodeIGlobalAdapter } from './adapters';
import {
GeneralCallResult,
NodeIKernelAvatarService,
NodeIKernelBuddyService,
NodeIKernelGroupService,
NodeIKernelLoginService,
NodeIKernelMsgService,
NodeIKernelProfileLikeService,
NodeIKernelProfileService,
NodeIKernelRichMediaService,
NodeIKernelRobotService,
NodeIKernelSessionListener,
NodeIKernelStorageCleanService,
NodeIKernelTicketService,
NodeIKernelTipOffService,
} from '@/napcat-core/index';
import { NodeIKernelNodeMiscService } from './services/NodeIKernelNodeMiscService';
import { NodeIKernelUixConvertService } from './services/NodeIKernelUixConvertService';
import { NodeIKernelMsgBackupService } from './services/NodeIKernelMsgBackupService';
import { NodeIKernelAlbumService } from './services/NodeIKernelAlbumService';
import { NodeIKernelTianShuService } from './services/NodeIKernelTianShuService';
import { NodeIKernelUnitedConfigService } from './services/NodeIKernelUnitedConfigService';
import { NodeIKernelSearchService } from './services/NodeIKernelSearchService';
import { NodeIKernelCollectionService } from './services/NodeIKernelCollectionService';
import { NodeIKernelRecentContactService } from './services/NodeIKernelRecentContactService';
import { NodeIKernelMSFService } from './services/NodeIKernelMSFService';
import { NodeIkernelTestPerformanceService } from './services/NodeIkernelTestPerformanceService';
import { NodeIKernelECDHService } from './services/NodeIKernelECDHService';
import { NodeIO3MiscService } from './services/NodeIO3MiscService';
import { NodeIKernelFlashTransferService } from './services/NodeIKernelFlashTransferService';
export interface NodeQQNTWrapperUtil {
get (): NodeQQNTWrapperUtil;
getNTUserDataInfoConfig (): string;
emptyWorkingSet (n: number): void;
getSsoCmdOfOidbReq (arg1: number, arg2: number): unknown;
getSsoBufferOfOidbReq (...args: unknown[]): unknown; // 有点看不懂参数定义 待补充 好像是三个参数
getOidbRspInfo (arg: string): unknown; // 可能是错的
getFileSize (path: string): Promise<number>; // 直接的猜测
genFileMd5Buf (arg: string): unknown; // 可能是错的
genFileMd5Hex (path: string): unknown; // 直接的猜测
genFileShaBuf (path: string): unknown; // 直接的猜测
genFileCumulateSha1 (path: string): unknown; // 直接的猜测
genFileShaHex (path: string): unknown; // 直接的猜测
fileIsExist (path: string): unknown;
startTrace (path: string): unknown; // 可能是错的
copyFile (src: string, dst: string): unknown;
genFileShaAndMd5Hex (path: string, unknown: number): unknown; // 可能是错的
setTraceInfo (unknown: unknown): unknown;
encodeOffLine (unknown: unknown): unknown;
decodeOffLine (arg: string): unknown; // 可能是错的 传递hex
DecoderRecentInfo (arg: string): unknown; // 可能是错的 传递hex
getPinyin (arg0: string, arg1: boolean): unknown;
matchInPinyin (arg0: unknown[], arg1: string): unknown; // 参数特复杂 arg0是个复杂数据类型
makeDirByPath (arg0: string): unknown;
emptyWorkingSet (arg0: number): unknown; // 参数是UINT32
runProcess (arg0: string, arg1: boolean): unknown;
runProcessArgs (arg0: string, arg1: { [key: string]: string; }, arg2: boolean): unknown;
calcThumbSize (arg0: number, arg1: number, arg2: unknown): unknown;
fullWordToHalfWord (word: string): unknown;
getNTUserDataInfoConfig (): unknown;
pathIsReadableAndWriteable (path: string): unknown; // 直接的猜测
resetUserDataSavePathToDocument (): unknown;
getSoBuildInfo (): unknown; // 例如 0[0]_d491dc01e0a_0
registerCountInstruments (arg0: string, arg1: string[], arg2: number, arg3: number): unknown;
registerValueInstruments (arg0: string, arg1: string[], arg2: number, arg3: number): unknown;
registerValueInstrumentsWithBoundary (
arg0: string,
arg1: unknown,
arg2: unknown,
arg3: number,
arg4: number,
): unknown;
reportCountIndicators (
arg0: string,
arg1: Map<unknown, unknown>,
arg2: string,
arg3: number,
arg4: boolean,
): unknown;
reportValueIndicators (
arg0: string,
arg1: Map<unknown, unknown>,
arg2: string,
arg3: boolean,
arg4: number,
): unknown;
checkNewUserDataSaveDirAvailable (arg0: string): unknown;
copyUserData (arg0: string, arg1: string): Promise<unknown>;
setUserDataSaveDirectory (arg0: string): Promise<unknown>;
hasOtherRunningQQProcess (): boolean;
quitAllRunningQQProcess (arg: boolean): unknown;
checkNvidiaConfig (): unknown;
repairNvidiaConfig (): unknown;
getNvidiaDriverVersion (): unknown;
isNull (): unknown;
createThumbnailImage (
serviceName: string,
filePath: string,
targetPath: string,
imgSize: {
width: number,
height: number;
},
fileFormat: string,
arg: number | null | undefined, // null undefined都行
): Promise<GeneralCallResult & { targetPath?: string; }>;
}
export interface NodeIQQNTStartupSessionWrapper {
create (): NodeIQQNTStartupSessionWrapper;
stop (): void;
start (): void;
createWithModuleList (uk: unknown): unknown;
getSessionIdList (): unknown;
}
export interface NodeIQQNTWrapperSession {
getNTWrapperSession (str: string): NodeIQQNTWrapperSession;
get (): NodeIQQNTWrapperSession;
new(): NodeIQQNTWrapperSession;
create (): NodeIQQNTWrapperSession;
init (
wrapperSessionInitConfig: WrapperSessionInitConfig,
nodeIDependsAdapter: NodeIDependsAdapter,
nodeIDispatcherAdapter: NodeIDispatcherAdapter,
nodeIKernelSessionListener: NodeIKernelSessionListener,
): void;
startNT (session: number): void;
startNT (): void;
getBdhUploadService (): unknown;
getECDHService (): NodeIKernelECDHService;
getMsgService (): NodeIKernelMsgService;
getProfileService (): NodeIKernelProfileService;
getProfileLikeService (): NodeIKernelProfileLikeService;
getGroupService (): NodeIKernelGroupService;
getStorageCleanService (): NodeIKernelStorageCleanService;
getBuddyService (): NodeIKernelBuddyService;
getRobotService (): NodeIKernelRobotService;
getTicketService (): NodeIKernelTicketService;
getTipOffService (): NodeIKernelTipOffService;
getNodeMiscService (): NodeIKernelNodeMiscService;
getRichMediaService (): NodeIKernelRichMediaService;
getMsgBackupService (): NodeIKernelMsgBackupService;
getAlbumService (): NodeIKernelAlbumService;
getTianShuService (): NodeIKernelTianShuService;
getUnitedConfigService (): NodeIKernelUnitedConfigService;
getSearchService (): NodeIKernelSearchService;
getFlashTransferService (): NodeIKernelFlashTransferService;
getDirectSessionService (): unknown;
getRDeliveryService (): unknown;
getAvatarService (): NodeIKernelAvatarService;
getFeedChannelService (): unknown;
getYellowFaceService (): unknown;
getCollectionService (): NodeIKernelCollectionService;
getSettingService (): unknown;
getQiDianService (): unknown;
getFileAssistantService (): unknown;
getGuildService (): unknown;
getSkinService (): unknown;
getTestPerformanceService (): NodeIkernelTestPerformanceService;
getQQPlayService (): unknown;
getDbToolsService (): unknown;
getUixConvertService (): NodeIKernelUixConvertService;
getOnlineStatusService (): unknown;
getRemotingService (): unknown;
getGroupTabService (): unknown;
getGroupSchoolService (): unknown;
getLiteBusinessService (): unknown;
getGuildMsgService (): unknown;
getLockService (): unknown;
getMSFService (): NodeIKernelMSFService;
getGuildHotUpdateService (): unknown;
getAVSDKService (): unknown;
getRecentContactService (): NodeIKernelRecentContactService;
getConfigMgrService (): unknown;
}
export interface EnginInitDesktopConfig {
base_path_prefix: string;
platform_type: PlatformType;
app_type: 4;
app_version: string;
os_version: string;
use_xlog: boolean;
qua: string;
global_path_config: {
desktopGlobalPath: string;
};
thumb_config: { maxSide: 324; minSide: 48; longLimit: 6; density: 2; };
}
export interface NodeIQQNTWrapperEngine {
get (): NodeIQQNTWrapperEngine;
initWithDeskTopConfig (config: EnginInitDesktopConfig, nodeIGlobalAdapter: NodeIGlobalAdapter): void;
}
export interface WrapperNodeApi {
NodeIO3MiscService: NodeIO3MiscService;
NodeQQNTWrapperUtil: NodeQQNTWrapperUtil;
NodeIQQNTWrapperSession: NodeIQQNTWrapperSession;
NodeIQQNTStartupSessionWrapper: NodeIQQNTStartupSessionWrapper;
NodeIQQNTWrapperEngine: NodeIQQNTWrapperEngine;
NodeIKernelLoginService: NodeIKernelLoginService;
}
export enum PlatformType {
KUNKNOWN,
KANDROID,
KIOS,
KWINDOWS,
KMAC,
KLINUX,
}
export enum DeviceType {
KUNKNOWN,
KPHONE,
KPAD,
KCOMPUTER,
}
// 推送类型
export enum VendorType {
KNOSETONIOS = 0,
KSUPPORTGOOGLEPUSH = 99,
KSUPPORTHMS = 3,
KSUPPORTOPPOPUSH = 4,
KSUPPORTTPNS = 2,
KSUPPORTVIVOPUSH = 5,
KUNSUPPORTANDROIDPUSH = 1,
}
export interface WrapperSessionInitConfig {
selfUin: string;
selfUid: string;
desktopPathConfig: {
account_path: string; // 可以通过NodeQQNTWrapperUtil().getNTUserDataInfoConfig()获取
};
clientVer: string; // 9.9.8-22355
a2: string;
d2: string;
d2Key: string;
machineId: string;
platform: PlatformType; // 3是Windows?
platVer: string; // 系统版本号, 应该可以固定
appid: string;
rdeliveryConfig: {
appKey: string;
systemId: number;
appId: string;
logicEnvironment: string;
platform: PlatformType;
language: string;
sdkVersion: string;
userId: string;
appVersion: string;
osVersion: string;
bundleId: string;
serverUrl: string;
fixedAfterHitKeys: string[];
};
defaultFileDownloadPath: string; // 这个可以通过环境变量获取?
deviceInfo: {
guid: string;
buildVer: string;
localId: number;
devName: string;
devType: string;
vendorName: string;
osVer: string;
vendorOsName: string;
setMute: boolean;
vendorType: VendorType;
};
deviceConfig: '{"appearance":{"isSplitViewMode":true},"msg":{}}';
}