NapCatQQ/packages/napcat-core/services/NodeIKernelLoginService.ts
手瓜一十雪 74b1da67d8
Some checks are pending
Build NapCat Artifacts / Build-Framework (push) Waiting to run
Build NapCat Artifacts / Build-Shell (push) Waiting to run
Add password login support to web UI and backend
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.
2026-02-02 19:48:31 +08:00

92 lines
2.1 KiB
TypeScript
Raw 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.

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;
}