201 lines
4.6 KiB
TypeScript
201 lines
4.6 KiB
TypeScript
import { Query } from '@kevisual/query';
|
||
import { DataOpts, Result } from '@kevisual/query/query';
|
||
|
||
type CacheLoginUser = {
|
||
user?: any;
|
||
id?: string;
|
||
accessToken?: string;
|
||
refreshToken?: string;
|
||
};
|
||
type CacheLogin = {
|
||
loginUsers: CacheLoginUser[];
|
||
} & CacheLoginUser;
|
||
interface CacheStore<T = any> {
|
||
name: string;
|
||
cacheData: CacheLogin;
|
||
cache: T;
|
||
/**
|
||
* @update 获取缓存
|
||
*/
|
||
get(key: string): Promise<any>;
|
||
/**
|
||
* @update 设置缓存
|
||
*/
|
||
set(key: string, value: CacheLogin): Promise<CacheLogin>;
|
||
/**
|
||
* @update 删除缓存
|
||
*/
|
||
del(): Promise<void>;
|
||
/**
|
||
* 设置当前用户
|
||
*/
|
||
setLoginUser(user: CacheLoginUser): Promise<void>;
|
||
/**
|
||
* 获取当前用户
|
||
*/
|
||
getCurrentUser(): Promise<CacheLoginUser>;
|
||
/**
|
||
* 获取当前用户列表
|
||
*/
|
||
getCurrentUserList(): Promise<CacheLoginUser[]>;
|
||
/**
|
||
* 获取缓存的refreshToken
|
||
*/
|
||
getRefreshToken(): Promise<string>;
|
||
/**
|
||
* 获取缓存的accessToken
|
||
*/
|
||
getAccessToken(): Promise<string>;
|
||
/**
|
||
* 初始化
|
||
*/
|
||
init(): Promise<void>;
|
||
/**
|
||
* 清除当前用户
|
||
*/
|
||
clearCurrentUser(): Promise<void>;
|
||
/**
|
||
* 清除所有用户
|
||
*/
|
||
clearAll(): Promise<void>;
|
||
}
|
||
|
||
type QueryLoginOpts = {
|
||
query?: Query;
|
||
isBrowser?: boolean;
|
||
onLoad?: () => void;
|
||
storage?: Storage;
|
||
};
|
||
type QueryLoginData = {
|
||
username?: string;
|
||
password: string;
|
||
email?: string;
|
||
};
|
||
type QueryLoginResult = {
|
||
accessToken: string;
|
||
refreshToken: string;
|
||
};
|
||
declare class QueryLogin {
|
||
query: Query;
|
||
cache: CacheStore;
|
||
isBrowser: boolean;
|
||
load?: boolean;
|
||
storage: Storage;
|
||
onLoad?: () => void;
|
||
constructor(opts?: QueryLoginOpts);
|
||
setQuery(query: Query): void;
|
||
init(): Promise<void>;
|
||
post<T = any>(data: any, opts?: DataOpts): Promise<{
|
||
code: number;
|
||
data?: T;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
}>;
|
||
/**
|
||
* 登录,
|
||
* @param data
|
||
* @returns
|
||
*/
|
||
login(data: QueryLoginData): Promise<{
|
||
code: number;
|
||
data?: QueryLoginResult;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
}>;
|
||
/**
|
||
* 登陆成功,需要获取用户信息进行缓存
|
||
* @param param0
|
||
*/
|
||
beforeSetLoginUser({ accessToken, refreshToken, check401 }: {
|
||
accessToken?: string;
|
||
refreshToken?: string;
|
||
check401?: boolean;
|
||
}): Promise<void>;
|
||
queryRefreshToken(refreshToken?: string): Promise<{
|
||
code: number;
|
||
data?: any;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
} | {
|
||
code: number;
|
||
message: string;
|
||
data: any;
|
||
}>;
|
||
/**
|
||
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
||
* @param response
|
||
* @param ctx
|
||
* @param refetch
|
||
* @returns
|
||
*/
|
||
afterCheck401ToRefreshToken(response: Result, ctx?: {
|
||
req?: any;
|
||
res?: any;
|
||
fetch?: any;
|
||
}, refetch?: boolean): Promise<any>;
|
||
/**
|
||
* 获取用户信息
|
||
* @param token
|
||
* @returns
|
||
*/
|
||
getMe(token?: string, check401?: boolean): Promise<{
|
||
code: number;
|
||
data?: any;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
}>;
|
||
/**
|
||
* 请求更新,切换用户, 使用switchUser
|
||
* @param username
|
||
* @returns
|
||
*/
|
||
private postSwitchUser;
|
||
/**
|
||
* 切换用户
|
||
* @param username
|
||
* @returns
|
||
*/
|
||
switchUser(username: string): Promise<{
|
||
code: number;
|
||
data?: any;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
} | {
|
||
code: number;
|
||
data: {
|
||
accessToken: string;
|
||
refreshToken: string;
|
||
};
|
||
success: boolean;
|
||
message: string;
|
||
}>;
|
||
logout(): Promise<{
|
||
code: number;
|
||
data?: Result;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
}>;
|
||
hasUser(username: string): Promise<{
|
||
code: number;
|
||
data?: Result;
|
||
message?: string;
|
||
success: boolean;
|
||
noMsg?: boolean;
|
||
showError: (fn?: () => void) => void;
|
||
}>;
|
||
}
|
||
|
||
export { QueryLogin, type QueryLoginData, type QueryLoginResult };
|