mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-04 06:31:13 +00:00
Implement password-based QQ login across the stack: add a PasswordLogin React component, integrate it into the QQ login page, and add a frontend controller method to call a new /QQLogin/PasswordLogin API. On the backend, add QQPasswordLoginHandler, router entry, and WebUiDataRuntime hooks (setPasswordLoginCall / requestPasswordLogin) plus a default handler. Register a password login callback in the shell (base.ts) that calls the kernel login service, handles common error cases and falls back to QR code when needed. Update types to include onPasswordLoginRequested and adjust NodeIKernelLoginService method signatures (including passwordLogin return type changed to Promise<QuickLoginResult>) and minor formatting fixes.
92 lines
2.1 KiB
TypeScript
92 lines
2.1 KiB
TypeScript
import { NodeIKernelLoginListener } from '@/napcat-core/listeners/NodeIKernelLoginListener';
|
||
import { GeneralCallResult } from './common';
|
||
|
||
export interface LoginInitConfig {
|
||
machineId: '';
|
||
appid: string;
|
||
platVer: string;
|
||
commonPath: string;
|
||
clientVer: string;
|
||
hostName: string;
|
||
}
|
||
|
||
export interface PasswordLoginRetType {
|
||
result: string,
|
||
loginErrorInfo: {
|
||
step: number;
|
||
errMsg: string;
|
||
proofWaterUrl: string;
|
||
newDevicePullQrCodeSig: string;
|
||
jumpUrl: string,
|
||
jumpWord: string;
|
||
tipsTitle: string;
|
||
tipsContent: string;
|
||
};
|
||
}
|
||
|
||
export interface PasswordLoginArgType {
|
||
uin: string;
|
||
passwordMd5: string;// passwMD5
|
||
step: number;// 猜测是需要二次认证 参数 一次为0
|
||
newDeviceLoginSig: string;
|
||
proofWaterSig: string;
|
||
proofWaterRand: string;
|
||
proofWaterSid: string;
|
||
}
|
||
|
||
export interface LoginListItem {
|
||
uin: string;
|
||
uid: string;
|
||
nickName: string;
|
||
faceUrl: string;
|
||
facePath: string;
|
||
loginType: 1; // 1是二维码登录?
|
||
isQuickLogin: boolean; // 是否可以快速登录
|
||
isAutoLogin: boolean; // 是否可以自动登录
|
||
}
|
||
|
||
export interface QuickLoginResult {
|
||
result: string;
|
||
loginErrorInfo: {
|
||
step: number,
|
||
errMsg: string,
|
||
proofWaterUrl: string,
|
||
newDevicePullQrCodeSig: string,
|
||
jumpUrl: string,
|
||
jumpWord: string,
|
||
tipsTitle: string,
|
||
tipsContent: string;
|
||
};
|
||
}
|
||
|
||
export interface NodeIKernelLoginService {
|
||
getMsfStatus: () => number;
|
||
|
||
setLoginMiscData (arg0: string, value: string): unknown;
|
||
|
||
getMachineGuid (): string;
|
||
|
||
get (): NodeIKernelLoginService;
|
||
|
||
connect (): boolean;
|
||
|
||
addKernelLoginListener (listener: NodeIKernelLoginListener): number;
|
||
|
||
removeKernelLoginListener (listener: number): void;
|
||
|
||
initConfig (config: LoginInitConfig): void;
|
||
|
||
getLoginMiscData (data: string): Promise<GeneralCallResult & { value: string; }>;
|
||
|
||
getLoginList (): Promise<{
|
||
result: number, // 0是ok
|
||
LocalLoginInfoList: LoginListItem[];
|
||
}>;
|
||
|
||
quickLoginWithUin (uin: string): Promise<QuickLoginResult>;
|
||
|
||
passwordLogin (param: PasswordLoginArgType): Promise<QuickLoginResult>;
|
||
|
||
getQRCodePicture (): boolean;
|
||
}
|