@kevisual/api 0.0.57 → 0.0.59

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,12 +167,24 @@ 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(opts?: {
176
+ refreshToken?: string;
177
+ accessToken?: string;
178
+ }): Promise<any>;
162
179
  /**
163
180
  * 刷新token
164
181
  * @param refreshToken
165
182
  * @returns
166
183
  */
167
- queryRefreshToken(refreshToken?: string): Promise<any>;
184
+ queryRefreshToken(opts?: {
185
+ refreshToken?: string;
186
+ accessToken?: string;
187
+ }): Promise<any>;
168
188
  /**
169
189
  * 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
170
190
  * 拦截请求,请使用run401Action, 不要直接使用 afterCheck401ToRefreshToken
@@ -221,7 +241,7 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
221
241
  * @returns
222
242
  */
223
243
  checkLocalToken(): Promise<boolean>;
224
- checkTokenValid(): Promise<boolean>;
244
+ checkTokenValid(): Promise<null | string>;
225
245
  /**
226
246
  * 检查本地用户列表
227
247
  * @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,9 +1011,26 @@ class QueryLogin extends BaseQuery {
996
1011
  message: "登录失败"
997
1012
  };
998
1013
  }
999
- async queryRefreshToken(refreshToken) {
1000
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1001
- let data = { refreshToken: _refreshToken };
1014
+ async refreshLoginUser(opts) {
1015
+ const res = await this.queryRefreshToken(opts);
1016
+ if (res.code === 200) {
1017
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
1018
+ this.storage.setItem("token", accessToken || "");
1019
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
1020
+ }
1021
+ return res;
1022
+ }
1023
+ async queryRefreshToken(opts) {
1024
+ const refreshToken = opts?.refreshToken;
1025
+ let accessToken = opts?.accessToken;
1026
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
1027
+ let data = {};
1028
+ if (accessToken) {
1029
+ data.accessToken = accessToken;
1030
+ }
1031
+ if (_refreshToken) {
1032
+ data.refreshToken = _refreshToken;
1033
+ }
1002
1034
  if (!_refreshToken) {
1003
1035
  await this.cacheStore.clearCurrentUser();
1004
1036
  return {
@@ -1018,7 +1050,7 @@ class QueryLogin extends BaseQuery {
1018
1050
  if (response?.code === 401) {
1019
1051
  const hasRefreshToken = await that.cacheStore.getRefreshToken();
1020
1052
  if (hasRefreshToken) {
1021
- const res = await that.queryRefreshToken(hasRefreshToken);
1053
+ const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
1022
1054
  if (res.code === 200) {
1023
1055
  const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
1024
1056
  that.storage.setItem("token", accessToken || "");
@@ -1096,7 +1128,19 @@ class QueryLogin extends BaseQuery {
1096
1128
  return !!token;
1097
1129
  }
1098
1130
  async checkTokenValid() {
1099
- return this.cacheStore.getIsExpired();
1131
+ const token = this.storage.getItem("token");
1132
+ if (!token) {
1133
+ return null;
1134
+ }
1135
+ const isExpired = await this.cacheStore.getIsExpired();
1136
+ if (isExpired) {
1137
+ const res = await this.refreshLoginUser();
1138
+ if (res.code === 200) {
1139
+ return res.data?.accessToken || null;
1140
+ }
1141
+ return null;
1142
+ }
1143
+ return token;
1100
1144
  }
1101
1145
  async getToken() {
1102
1146
  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,12 +167,24 @@ 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(opts?: {
176
+ refreshToken?: string;
177
+ accessToken?: string;
178
+ }): Promise<any>;
162
179
  /**
163
180
  * 刷新token
164
181
  * @param refreshToken
165
182
  * @returns
166
183
  */
167
- queryRefreshToken(refreshToken?: string): Promise<any>;
184
+ queryRefreshToken(opts?: {
185
+ refreshToken?: string;
186
+ accessToken?: string;
187
+ }): Promise<any>;
168
188
  /**
169
189
  * 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
170
190
  * 拦截请求,请使用run401Action, 不要直接使用 afterCheck401ToRefreshToken
@@ -221,7 +241,7 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
221
241
  * @returns
222
242
  */
223
243
  checkLocalToken(): Promise<boolean>;
224
- checkTokenValid(): Promise<boolean>;
244
+ checkTokenValid(): Promise<null | string>;
225
245
  /**
226
246
  * 检查本地用户列表
227
247
  * @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,9 +1011,26 @@ class QueryLogin extends BaseQuery {
996
1011
  message: "登录失败"
997
1012
  };
998
1013
  }
999
- async queryRefreshToken(refreshToken) {
1000
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
1001
- let data = { refreshToken: _refreshToken };
1014
+ async refreshLoginUser(opts) {
1015
+ const res = await this.queryRefreshToken(opts);
1016
+ if (res.code === 200) {
1017
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
1018
+ this.storage.setItem("token", accessToken || "");
1019
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
1020
+ }
1021
+ return res;
1022
+ }
1023
+ async queryRefreshToken(opts) {
1024
+ const refreshToken = opts?.refreshToken;
1025
+ let accessToken = opts?.accessToken;
1026
+ const _refreshToken = refreshToken || await this.cacheStore.getRefreshToken();
1027
+ let data = {};
1028
+ if (accessToken) {
1029
+ data.accessToken = accessToken;
1030
+ }
1031
+ if (_refreshToken) {
1032
+ data.refreshToken = _refreshToken;
1033
+ }
1002
1034
  if (!_refreshToken) {
1003
1035
  await this.cacheStore.clearCurrentUser();
1004
1036
  return {
@@ -1018,7 +1050,7 @@ class QueryLogin extends BaseQuery {
1018
1050
  if (response?.code === 401) {
1019
1051
  const hasRefreshToken = await that.cacheStore.getRefreshToken();
1020
1052
  if (hasRefreshToken) {
1021
- const res = await that.queryRefreshToken(hasRefreshToken);
1053
+ const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
1022
1054
  if (res.code === 200) {
1023
1055
  const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
1024
1056
  that.storage.setItem("token", accessToken || "");
@@ -1096,7 +1128,19 @@ class QueryLogin extends BaseQuery {
1096
1128
  return !!token;
1097
1129
  }
1098
1130
  async checkTokenValid() {
1099
- return this.cacheStore.getIsExpired();
1131
+ const token = this.storage.getItem("token");
1132
+ if (!token) {
1133
+ return null;
1134
+ }
1135
+ const isExpired = await this.cacheStore.getIsExpired();
1136
+ if (isExpired) {
1137
+ const res = await this.refreshLoginUser();
1138
+ if (res.code === 200) {
1139
+ return res.data?.accessToken || null;
1140
+ }
1141
+ return null;
1142
+ }
1143
+ return token;
1100
1144
  }
1101
1145
  async getToken() {
1102
1146
  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.59",
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,14 +174,36 @@ 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(opts?: { refreshToken?: string, accessToken?: string }) {
183
+ const res = await this.queryRefreshToken(opts);
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
- async queryRefreshToken(refreshToken?: string) {
163
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
164
- let data = { refreshToken: _refreshToken };
196
+ async queryRefreshToken(opts?: { refreshToken?: string, accessToken?: string }) {
197
+ const refreshToken = opts?.refreshToken;
198
+ let accessToken = opts?.accessToken;
199
+ const _refreshToken = refreshToken || (await this.cacheStore.getRefreshToken());
200
+ let data: any = {};
201
+ if (accessToken) {
202
+ data.accessToken = accessToken;
203
+ }
204
+ if (_refreshToken) {
205
+ data.refreshToken = _refreshToken;
206
+ }
165
207
  if (!_refreshToken) {
166
208
  await this.cacheStore.clearCurrentUser();
167
209
  return {
@@ -192,7 +234,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
192
234
  if (response?.code === 401) {
193
235
  const hasRefreshToken = await that.cacheStore.getRefreshToken();
194
236
  if (hasRefreshToken) {
195
- const res = await that.queryRefreshToken(hasRefreshToken);
237
+ const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
196
238
  if (res.code === 200) {
197
239
  const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
198
240
  that.storage.setItem('token', accessToken || '');
@@ -311,8 +353,21 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
311
353
  const token = this.storage.getItem('token');
312
354
  return !!token;
313
355
  }
314
- async checkTokenValid() {
315
- return this.cacheStore.getIsExpired();
356
+ async checkTokenValid(): Promise<null | string> {
357
+ const token = this.storage.getItem('token');
358
+ if (!token) {
359
+ return null;
360
+ }
361
+ const isExpired = await this.cacheStore.getIsExpired();
362
+ if (isExpired) {
363
+ const res = await this.refreshLoginUser()
364
+ if (res.code === 200) {
365
+ // 刷新成功,返回新的token
366
+ return res.data?.accessToken || null;
367
+ }
368
+ return null;
369
+ }
370
+ return token;
316
371
  }
317
372
  /**
318
373
  * 检查本地用户列表