@kevisual/api 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -141,6 +141,14 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
141
141
  loginByWechat(data: {
142
142
  code: string;
143
143
  }): Promise<any>;
144
+ /**
145
+ * cnb登录, 适用于cnb的登录方式, 需要后端配合, 传入cnbToken, 后端验证cnbToken的有效性,并返回accessToken和refreshToken
146
+ * @param data
147
+ * @returns
148
+ */
149
+ loginByCnb(data: {
150
+ cnbToken: string;
151
+ }): Promise<any>;
144
152
  /**
145
153
  * 检测微信登录,登陆成功后,调用onSuccess,否则调用onError
146
154
  * @param param0
@@ -153,12 +161,18 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
153
161
  * 登陆成功,需要获取用户信息进行缓存
154
162
  * @param param0
155
163
  */
156
- beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: {
164
+ beforeSetLoginUser(opts: {
157
165
  accessTokenExpiresIn?: number;
158
166
  accessToken?: string;
159
167
  refreshToken?: string;
160
168
  check401?: boolean;
161
- }): Promise<void>;
169
+ }): Promise<Result<User>>;
170
+ /**
171
+ * 刷新登录用户,获取新的token,并更新用户信息
172
+ * @param refreshToken 刷新token,如果不传,则从缓存中获取
173
+ * @returns
174
+ */
175
+ refreshLoginUser(refreshToken?: string): Promise<any>;
162
176
  /**
163
177
  * 刷新token
164
178
  * @param refreshToken
@@ -215,21 +229,13 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
215
229
  * 检查本地用户,如果本地用户存在,则返回本地用户,否则返回null
216
230
  * @returns
217
231
  */
218
- checkLocalUser(): Promise<{
219
- avatar?: string;
220
- description?: string;
221
- id?: string;
222
- needChangePassword?: boolean;
223
- orgs?: string[];
224
- type?: string;
225
- username?: string;
226
- } | null>;
232
+ checkLocalUser(): Promise<User | null>;
227
233
  /**
228
234
  * 检查本地token是否存在,简单的判断是否已经属于登陆状态
229
235
  * @returns
230
236
  */
231
237
  checkLocalToken(): Promise<boolean>;
232
- checkTokenValid(): Promise<boolean>;
238
+ checkTokenValid(): Promise<null | string>;
233
239
  /**
234
240
  * 检查本地用户列表
235
241
  * @returns
@@ -957,6 +957,21 @@ class QueryLogin extends BaseQuery {
957
957
  }
958
958
  return res;
959
959
  }
960
+ async loginByCnb(data) {
961
+ const res = await this.post({
962
+ path: "user",
963
+ key: "cnb-login",
964
+ payload: {
965
+ data
966
+ }
967
+ });
968
+ if (res.code === 200) {
969
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
970
+ this.storage.setItem("token", accessToken || "");
971
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
972
+ }
973
+ return res;
974
+ }
960
975
  async checkWechat({ onSuccess, onError }) {
961
976
  const url = new URL(window.location.href);
962
977
  const code = url.searchParams.get("code");
@@ -970,7 +985,8 @@ class QueryLogin extends BaseQuery {
970
985
  }
971
986
  }
972
987
  }
973
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }) {
988
+ async beforeSetLoginUser(opts) {
989
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
974
990
  if (accessToken && refreshToken) {
975
991
  const resUser = await this.getMe(accessToken, check401);
976
992
  if (resUser.code === 200) {
@@ -988,10 +1004,24 @@ class QueryLogin extends BaseQuery {
988
1004
  console.error("登录失败");
989
1005
  }
990
1006
  }
1007
+ return resUser;
991
1008
  }
1009
+ return {
1010
+ code: 400,
1011
+ message: "登录失败"
1012
+ };
1013
+ }
1014
+ async refreshLoginUser(refreshToken) {
1015
+ const res = await this.queryRefreshToken(refreshToken);
1016
+ if (res.code === 200) {
1017
+ const { accessToken, refreshToken: refreshToken2, accessTokenExpiresIn } = res?.data || {};
1018
+ this.storage.setItem("token", accessToken || "");
1019
+ await this.beforeSetLoginUser({ accessToken, refreshToken: refreshToken2, accessTokenExpiresIn, check401: false });
1020
+ }
1021
+ return res;
992
1022
  }
993
1023
  async queryRefreshToken(refreshToken) {
994
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1024
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
995
1025
  let data = { refreshToken: _refreshToken };
996
1026
  if (!_refreshToken) {
997
1027
  await this.cacheStore.clearCurrentUser();
@@ -1090,7 +1120,19 @@ class QueryLogin extends BaseQuery {
1090
1120
  return !!token;
1091
1121
  }
1092
1122
  async checkTokenValid() {
1093
- return this.cacheStore.getIsExpired();
1123
+ const token = this.storage.getItem("token");
1124
+ if (!token) {
1125
+ return null;
1126
+ }
1127
+ const isExpired = await this.cacheStore.getIsExpired();
1128
+ if (isExpired) {
1129
+ const res = await this.refreshLoginUser();
1130
+ if (res.code === 200) {
1131
+ return res.data?.accessToken || null;
1132
+ }
1133
+ return null;
1134
+ }
1135
+ return token;
1094
1136
  }
1095
1137
  async getToken() {
1096
1138
  const token = this.storage.getItem("token");
@@ -141,6 +141,14 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
141
141
  loginByWechat(data: {
142
142
  code: string;
143
143
  }): Promise<any>;
144
+ /**
145
+ * cnb登录, 适用于cnb的登录方式, 需要后端配合, 传入cnbToken, 后端验证cnbToken的有效性,并返回accessToken和refreshToken
146
+ * @param data
147
+ * @returns
148
+ */
149
+ loginByCnb(data: {
150
+ cnbToken: string;
151
+ }): Promise<any>;
144
152
  /**
145
153
  * 检测微信登录,登陆成功后,调用onSuccess,否则调用onError
146
154
  * @param param0
@@ -153,12 +161,18 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
153
161
  * 登陆成功,需要获取用户信息进行缓存
154
162
  * @param param0
155
163
  */
156
- beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: {
164
+ beforeSetLoginUser(opts: {
157
165
  accessTokenExpiresIn?: number;
158
166
  accessToken?: string;
159
167
  refreshToken?: string;
160
168
  check401?: boolean;
161
- }): Promise<void>;
169
+ }): Promise<Result<User>>;
170
+ /**
171
+ * 刷新登录用户,获取新的token,并更新用户信息
172
+ * @param refreshToken 刷新token,如果不传,则从缓存中获取
173
+ * @returns
174
+ */
175
+ refreshLoginUser(refreshToken?: string): Promise<any>;
162
176
  /**
163
177
  * 刷新token
164
178
  * @param refreshToken
@@ -215,21 +229,13 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
215
229
  * 检查本地用户,如果本地用户存在,则返回本地用户,否则返回null
216
230
  * @returns
217
231
  */
218
- checkLocalUser(): Promise<{
219
- avatar?: string;
220
- description?: string;
221
- id?: string;
222
- needChangePassword?: boolean;
223
- orgs?: string[];
224
- type?: string;
225
- username?: string;
226
- } | null>;
232
+ checkLocalUser(): Promise<User | null>;
227
233
  /**
228
234
  * 检查本地token是否存在,简单的判断是否已经属于登陆状态
229
235
  * @returns
230
236
  */
231
237
  checkLocalToken(): Promise<boolean>;
232
- checkTokenValid(): Promise<boolean>;
238
+ checkTokenValid(): Promise<null | string>;
233
239
  /**
234
240
  * 检查本地用户列表
235
241
  * @returns
@@ -957,6 +957,21 @@ class QueryLogin extends BaseQuery {
957
957
  }
958
958
  return res;
959
959
  }
960
+ async loginByCnb(data) {
961
+ const res = await this.post({
962
+ path: "user",
963
+ key: "cnb-login",
964
+ payload: {
965
+ data
966
+ }
967
+ });
968
+ if (res.code === 200) {
969
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
970
+ this.storage.setItem("token", accessToken || "");
971
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
972
+ }
973
+ return res;
974
+ }
960
975
  async checkWechat({ onSuccess, onError }) {
961
976
  const url = new URL(window.location.href);
962
977
  const code = url.searchParams.get("code");
@@ -970,7 +985,8 @@ class QueryLogin extends BaseQuery {
970
985
  }
971
986
  }
972
987
  }
973
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }) {
988
+ async beforeSetLoginUser(opts) {
989
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
974
990
  if (accessToken && refreshToken) {
975
991
  const resUser = await this.getMe(accessToken, check401);
976
992
  if (resUser.code === 200) {
@@ -988,10 +1004,24 @@ class QueryLogin extends BaseQuery {
988
1004
  console.error("登录失败");
989
1005
  }
990
1006
  }
1007
+ return resUser;
991
1008
  }
1009
+ return {
1010
+ code: 400,
1011
+ message: "登录失败"
1012
+ };
1013
+ }
1014
+ async refreshLoginUser(refreshToken) {
1015
+ const res = await this.queryRefreshToken(refreshToken);
1016
+ if (res.code === 200) {
1017
+ const { accessToken, refreshToken: refreshToken2, accessTokenExpiresIn } = res?.data || {};
1018
+ this.storage.setItem("token", accessToken || "");
1019
+ await this.beforeSetLoginUser({ accessToken, refreshToken: refreshToken2, accessTokenExpiresIn, check401: false });
1020
+ }
1021
+ return res;
992
1022
  }
993
1023
  async queryRefreshToken(refreshToken) {
994
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1024
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
995
1025
  let data = { refreshToken: _refreshToken };
996
1026
  if (!_refreshToken) {
997
1027
  await this.cacheStore.clearCurrentUser();
@@ -1090,7 +1120,19 @@ class QueryLogin extends BaseQuery {
1090
1120
  return !!token;
1091
1121
  }
1092
1122
  async checkTokenValid() {
1093
- return this.cacheStore.getIsExpired();
1123
+ const token = this.storage.getItem("token");
1124
+ if (!token) {
1125
+ return null;
1126
+ }
1127
+ const isExpired = await this.cacheStore.getIsExpired();
1128
+ if (isExpired) {
1129
+ const res = await this.refreshLoginUser();
1130
+ if (res.code === 200) {
1131
+ return res.data?.accessToken || null;
1132
+ }
1133
+ return null;
1134
+ }
1135
+ return token;
1094
1136
  }
1095
1137
  async getToken() {
1096
1138
  const token = this.storage.getItem("token");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/api",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "description": "",
5
5
  "main": "mod.ts",
6
6
  "scripts": {
@@ -16,7 +16,7 @@ export interface Cache {
16
16
  */
17
17
  init?: () => Promise<any>;
18
18
  }
19
- type User = {
19
+ export type User = {
20
20
  avatar?: string;
21
21
  description?: string;
22
22
  id?: string;
@@ -1,6 +1,6 @@
1
1
  import { Query, BaseQuery } from '@kevisual/query';
2
2
  import type { Result, DataOpts } from '@kevisual/query/query';
3
- import { LoginCacheStore, CacheStore } from './login-cache.ts';
3
+ import { LoginCacheStore, CacheStore, User } from './login-cache.ts';
4
4
  import { Cache } from './login-cache.ts';
5
5
  import { BaseLoad } from '@kevisual/load';
6
6
  export type QueryLoginOpts<T extends Cache = Cache> = {
@@ -107,6 +107,26 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
107
107
  }
108
108
  return res;
109
109
  }
110
+ /**
111
+ * cnb登录, 适用于cnb的登录方式, 需要后端配合, 传入cnbToken, 后端验证cnbToken的有效性,并返回accessToken和refreshToken
112
+ * @param data
113
+ * @returns
114
+ */
115
+ async loginByCnb(data: { cnbToken: string }) {
116
+ const res = await this.post<QueryLoginResult>({
117
+ path: 'user',
118
+ key: 'cnb-login',
119
+ payload: {
120
+ data: data
121
+ }
122
+ });
123
+ if (res.code === 200) {
124
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
125
+ this.storage.setItem('token', accessToken || '');
126
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
127
+ }
128
+ return res;
129
+ }
110
130
  /**
111
131
  * 检测微信登录,登陆成功后,调用onSuccess,否则调用onError
112
132
  * @param param0
@@ -128,7 +148,8 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
128
148
  * 登陆成功,需要获取用户信息进行缓存
129
149
  * @param param0
130
150
  */
131
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: { accessTokenExpiresIn?: number, accessToken?: string; refreshToken?: string; check401?: boolean }) {
151
+ async beforeSetLoginUser(opts: { accessTokenExpiresIn?: number, accessToken?: string; refreshToken?: string; check401?: boolean }): Promise<Result<User>> {
152
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
132
153
  if (accessToken && refreshToken) {
133
154
  const resUser = await this.getMe(accessToken, check401);
134
155
  if (resUser.code === 200) {
@@ -146,7 +167,26 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
146
167
  console.error('登录失败');
147
168
  }
148
169
  }
170
+ return resUser;
149
171
  }
172
+ return {
173
+ code: 400,
174
+ message: '登录失败',
175
+ };
176
+ }
177
+ /**
178
+ * 刷新登录用户,获取新的token,并更新用户信息
179
+ * @param refreshToken 刷新token,如果不传,则从缓存中获取
180
+ * @returns
181
+ */
182
+ async refreshLoginUser(refreshToken?: string) {
183
+ const res = await this.queryRefreshToken(refreshToken);
184
+ if (res.code === 200) {
185
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
186
+ this.storage.setItem('token', accessToken || '');
187
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
188
+ }
189
+ return res;
150
190
  }
151
191
  /**
152
192
  * 刷新token
@@ -154,7 +194,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
154
194
  * @returns
155
195
  */
156
196
  async queryRefreshToken(refreshToken?: string) {
157
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
197
+ const _refreshToken = refreshToken || (await this.cacheStore.getRefreshToken());
158
198
  let data = { refreshToken: _refreshToken };
159
199
  if (!_refreshToken) {
160
200
  await this.cacheStore.clearCurrentUser();
@@ -305,8 +345,21 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
305
345
  const token = this.storage.getItem('token');
306
346
  return !!token;
307
347
  }
308
- async checkTokenValid() {
309
- return this.cacheStore.getIsExpired();
348
+ async checkTokenValid(): Promise<null | string> {
349
+ const token = this.storage.getItem('token');
350
+ if (!token) {
351
+ return null;
352
+ }
353
+ const isExpired = await this.cacheStore.getIsExpired();
354
+ if (isExpired) {
355
+ const res = await this.refreshLoginUser()
356
+ if (res.code === 200) {
357
+ // 刷新成功,返回新的token
358
+ return res.data?.accessToken || null;
359
+ }
360
+ return null;
361
+ }
362
+ return token;
310
363
  }
311
364
  /**
312
365
  * 检查本地用户列表