@kevisual/api 0.0.57 → 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
@@ -159,6 +167,12 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
159
167
  refreshToken?: string;
160
168
  check401?: boolean;
161
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
@@ -221,7 +235,7 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
221
235
  * @returns
222
236
  */
223
237
  checkLocalToken(): Promise<boolean>;
224
- checkTokenValid(): Promise<boolean>;
238
+ checkTokenValid(): Promise<null | string>;
225
239
  /**
226
240
  * 检查本地用户列表
227
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");
@@ -996,8 +1011,17 @@ class QueryLogin extends BaseQuery {
996
1011
  message: "登录失败"
997
1012
  };
998
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;
1022
+ }
999
1023
  async queryRefreshToken(refreshToken) {
1000
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1024
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
1001
1025
  let data = { refreshToken: _refreshToken };
1002
1026
  if (!_refreshToken) {
1003
1027
  await this.cacheStore.clearCurrentUser();
@@ -1096,7 +1120,19 @@ class QueryLogin extends BaseQuery {
1096
1120
  return !!token;
1097
1121
  }
1098
1122
  async checkTokenValid() {
1099
- 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;
1100
1136
  }
1101
1137
  async getToken() {
1102
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
@@ -159,6 +167,12 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
159
167
  refreshToken?: string;
160
168
  check401?: boolean;
161
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
@@ -221,7 +235,7 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
221
235
  * @returns
222
236
  */
223
237
  checkLocalToken(): Promise<boolean>;
224
- checkTokenValid(): Promise<boolean>;
238
+ checkTokenValid(): Promise<null | string>;
225
239
  /**
226
240
  * 检查本地用户列表
227
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");
@@ -996,8 +1011,17 @@ class QueryLogin extends BaseQuery {
996
1011
  message: "登录失败"
997
1012
  };
998
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;
1022
+ }
999
1023
  async queryRefreshToken(refreshToken) {
1000
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1024
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
1001
1025
  let data = { refreshToken: _refreshToken };
1002
1026
  if (!_refreshToken) {
1003
1027
  await this.cacheStore.clearCurrentUser();
@@ -1096,7 +1120,19 @@ class QueryLogin extends BaseQuery {
1096
1120
  return !!token;
1097
1121
  }
1098
1122
  async checkTokenValid() {
1099
- 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;
1100
1136
  }
1101
1137
  async getToken() {
1102
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.57",
3
+ "version": "0.0.58",
4
4
  "description": "",
5
5
  "main": "mod.ts",
6
6
  "scripts": {
@@ -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
@@ -154,13 +174,27 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
154
174
  message: '登录失败',
155
175
  };
156
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;
190
+ }
157
191
  /**
158
192
  * 刷新token
159
193
  * @param refreshToken
160
194
  * @returns
161
195
  */
162
196
  async queryRefreshToken(refreshToken?: string) {
163
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
197
+ const _refreshToken = refreshToken || (await this.cacheStore.getRefreshToken());
164
198
  let data = { refreshToken: _refreshToken };
165
199
  if (!_refreshToken) {
166
200
  await this.cacheStore.clearCurrentUser();
@@ -311,8 +345,21 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
311
345
  const token = this.storage.getItem('token');
312
346
  return !!token;
313
347
  }
314
- async checkTokenValid() {
315
- 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;
316
363
  }
317
364
  /**
318
365
  * 检查本地用户列表