@kevisual/api 0.0.55 → 0.0.57

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.
@@ -81,7 +81,8 @@ type CacheStore<T extends Cache = Cache> = {
81
81
  getValue(): Promise<CacheLogin>;
82
82
  setValue(value: CacheLogin): Promise<CacheLogin>;
83
83
  delValue(): Promise<void>;
84
- init(): Promise<any>;
84
+ init(): Promise<CacheLogin>;
85
+ getIsExpired(): Promise<boolean>;
85
86
  };
86
87
 
87
88
  type QueryLoginOpts<T extends Cache = Cache> = {
@@ -152,12 +153,12 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
152
153
  * 登陆成功,需要获取用户信息进行缓存
153
154
  * @param param0
154
155
  */
155
- beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: {
156
+ beforeSetLoginUser(opts: {
156
157
  accessTokenExpiresIn?: number;
157
158
  accessToken?: string;
158
159
  refreshToken?: string;
159
160
  check401?: boolean;
160
- }): Promise<void>;
161
+ }): Promise<Result<User>>;
161
162
  /**
162
163
  * 刷新token
163
164
  * @param refreshToken
@@ -214,20 +215,13 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
214
215
  * 检查本地用户,如果本地用户存在,则返回本地用户,否则返回null
215
216
  * @returns
216
217
  */
217
- checkLocalUser(): Promise<{
218
- avatar?: string;
219
- description?: string;
220
- id?: string;
221
- needChangePassword?: boolean;
222
- orgs?: string[];
223
- type?: string;
224
- username?: string;
225
- } | null>;
218
+ checkLocalUser(): Promise<User | null>;
226
219
  /**
227
220
  * 检查本地token是否存在,简单的判断是否已经属于登陆状态
228
221
  * @returns
229
222
  */
230
223
  checkLocalToken(): Promise<boolean>;
224
+ checkTokenValid(): Promise<boolean>;
231
225
  /**
232
226
  * 检查本地用户列表
233
227
  * @returns
@@ -337,6 +337,13 @@ class LoginCacheStore {
337
337
  }
338
338
  async delValue() {
339
339
  await this.cache.del();
340
+ this.cacheData = {
341
+ loginUsers: [],
342
+ user: undefined,
343
+ id: undefined,
344
+ accessToken: undefined,
345
+ refreshToken: undefined
346
+ };
340
347
  }
341
348
  getValue() {
342
349
  return this.cache.get(this.name);
@@ -344,10 +351,12 @@ class LoginCacheStore {
344
351
  async init() {
345
352
  const defaultData = {
346
353
  loginUsers: [],
347
- user: null,
348
- id: null,
349
- accessToken: null,
350
- refreshToken: null
354
+ user: undefined,
355
+ id: undefined,
356
+ accessToken: undefined,
357
+ refreshToken: undefined,
358
+ accessTokenExpiresIn: undefined,
359
+ createdAt: undefined
351
360
  };
352
361
  if (this.cache.init) {
353
362
  try {
@@ -359,6 +368,7 @@ class LoginCacheStore {
359
368
  } else {
360
369
  this.cacheData = await this.getValue() || defaultData;
361
370
  }
371
+ return this.cacheData;
362
372
  }
363
373
  async setLoginUser(user) {
364
374
  const has = this.cacheData.loginUsers.find((u) => u.id === user.id);
@@ -389,6 +399,18 @@ class LoginCacheStore {
389
399
  const cacheData = this.cacheData;
390
400
  return Promise.resolve(cacheData.accessToken || "");
391
401
  }
402
+ getIsExpired() {
403
+ const cacheData = this.cacheData;
404
+ if (!cacheData.accessToken) {
405
+ return Promise.resolve(true);
406
+ }
407
+ if (!cacheData.createdAt || !cacheData.accessTokenExpiresIn) {
408
+ return Promise.resolve(false);
409
+ }
410
+ const now = Date.now();
411
+ const expiresIn = cacheData.createdAt + cacheData.accessTokenExpiresIn * 1000;
412
+ return Promise.resolve(now >= expiresIn);
413
+ }
392
414
  async clearCurrentUser() {
393
415
  const user = await this.getCurrentUser();
394
416
  const has = this.cacheData.loginUsers.find((u) => u.id === user.id);
@@ -399,6 +421,8 @@ class LoginCacheStore {
399
421
  this.cacheData.id = undefined;
400
422
  this.cacheData.accessToken = undefined;
401
423
  this.cacheData.refreshToken = undefined;
424
+ this.cacheData.accessTokenExpiresIn = undefined;
425
+ this.cacheData.createdAt = undefined;
402
426
  await this.setValue(this.cacheData);
403
427
  }
404
428
  async clearAll() {
@@ -407,6 +431,8 @@ class LoginCacheStore {
407
431
  this.cacheData.id = undefined;
408
432
  this.cacheData.accessToken = undefined;
409
433
  this.cacheData.refreshToken = undefined;
434
+ this.cacheData.accessTokenExpiresIn = undefined;
435
+ this.cacheData.createdAt = undefined;
410
436
  await this.setValue(this.cacheData);
411
437
  }
412
438
  }
@@ -944,7 +970,8 @@ class QueryLogin extends BaseQuery {
944
970
  }
945
971
  }
946
972
  }
947
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }) {
973
+ async beforeSetLoginUser(opts) {
974
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
948
975
  if (accessToken && refreshToken) {
949
976
  const resUser = await this.getMe(accessToken, check401);
950
977
  if (resUser.code === 200) {
@@ -962,7 +989,12 @@ class QueryLogin extends BaseQuery {
962
989
  console.error("登录失败");
963
990
  }
964
991
  }
992
+ return resUser;
965
993
  }
994
+ return {
995
+ code: 400,
996
+ message: "登录失败"
997
+ };
966
998
  }
967
999
  async queryRefreshToken(refreshToken) {
968
1000
  const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
@@ -1063,6 +1095,9 @@ class QueryLogin extends BaseQuery {
1063
1095
  const token = this.storage.getItem("token");
1064
1096
  return !!token;
1065
1097
  }
1098
+ async checkTokenValid() {
1099
+ return this.cacheStore.getIsExpired();
1100
+ }
1066
1101
  async getToken() {
1067
1102
  const token = this.storage.getItem("token");
1068
1103
  return token || "";
@@ -81,7 +81,8 @@ type CacheStore<T extends Cache = Cache> = {
81
81
  getValue(): Promise<CacheLogin>;
82
82
  setValue(value: CacheLogin): Promise<CacheLogin>;
83
83
  delValue(): Promise<void>;
84
- init(): Promise<any>;
84
+ init(): Promise<CacheLogin>;
85
+ getIsExpired(): Promise<boolean>;
85
86
  };
86
87
 
87
88
  type QueryLoginOpts<T extends Cache = Cache> = {
@@ -152,12 +153,12 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
152
153
  * 登陆成功,需要获取用户信息进行缓存
153
154
  * @param param0
154
155
  */
155
- beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: {
156
+ beforeSetLoginUser(opts: {
156
157
  accessTokenExpiresIn?: number;
157
158
  accessToken?: string;
158
159
  refreshToken?: string;
159
160
  check401?: boolean;
160
- }): Promise<void>;
161
+ }): Promise<Result<User>>;
161
162
  /**
162
163
  * 刷新token
163
164
  * @param refreshToken
@@ -214,20 +215,13 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
214
215
  * 检查本地用户,如果本地用户存在,则返回本地用户,否则返回null
215
216
  * @returns
216
217
  */
217
- checkLocalUser(): Promise<{
218
- avatar?: string;
219
- description?: string;
220
- id?: string;
221
- needChangePassword?: boolean;
222
- orgs?: string[];
223
- type?: string;
224
- username?: string;
225
- } | null>;
218
+ checkLocalUser(): Promise<User | null>;
226
219
  /**
227
220
  * 检查本地token是否存在,简单的判断是否已经属于登陆状态
228
221
  * @returns
229
222
  */
230
223
  checkLocalToken(): Promise<boolean>;
224
+ checkTokenValid(): Promise<boolean>;
231
225
  /**
232
226
  * 检查本地用户列表
233
227
  * @returns
@@ -337,6 +337,13 @@ class LoginCacheStore {
337
337
  }
338
338
  async delValue() {
339
339
  await this.cache.del();
340
+ this.cacheData = {
341
+ loginUsers: [],
342
+ user: undefined,
343
+ id: undefined,
344
+ accessToken: undefined,
345
+ refreshToken: undefined
346
+ };
340
347
  }
341
348
  getValue() {
342
349
  return this.cache.get(this.name);
@@ -344,10 +351,12 @@ class LoginCacheStore {
344
351
  async init() {
345
352
  const defaultData = {
346
353
  loginUsers: [],
347
- user: null,
348
- id: null,
349
- accessToken: null,
350
- refreshToken: null
354
+ user: undefined,
355
+ id: undefined,
356
+ accessToken: undefined,
357
+ refreshToken: undefined,
358
+ accessTokenExpiresIn: undefined,
359
+ createdAt: undefined
351
360
  };
352
361
  if (this.cache.init) {
353
362
  try {
@@ -359,6 +368,7 @@ class LoginCacheStore {
359
368
  } else {
360
369
  this.cacheData = await this.getValue() || defaultData;
361
370
  }
371
+ return this.cacheData;
362
372
  }
363
373
  async setLoginUser(user) {
364
374
  const has = this.cacheData.loginUsers.find((u) => u.id === user.id);
@@ -389,6 +399,18 @@ class LoginCacheStore {
389
399
  const cacheData = this.cacheData;
390
400
  return Promise.resolve(cacheData.accessToken || "");
391
401
  }
402
+ getIsExpired() {
403
+ const cacheData = this.cacheData;
404
+ if (!cacheData.accessToken) {
405
+ return Promise.resolve(true);
406
+ }
407
+ if (!cacheData.createdAt || !cacheData.accessTokenExpiresIn) {
408
+ return Promise.resolve(false);
409
+ }
410
+ const now = Date.now();
411
+ const expiresIn = cacheData.createdAt + cacheData.accessTokenExpiresIn * 1000;
412
+ return Promise.resolve(now >= expiresIn);
413
+ }
392
414
  async clearCurrentUser() {
393
415
  const user = await this.getCurrentUser();
394
416
  const has = this.cacheData.loginUsers.find((u) => u.id === user.id);
@@ -399,6 +421,8 @@ class LoginCacheStore {
399
421
  this.cacheData.id = undefined;
400
422
  this.cacheData.accessToken = undefined;
401
423
  this.cacheData.refreshToken = undefined;
424
+ this.cacheData.accessTokenExpiresIn = undefined;
425
+ this.cacheData.createdAt = undefined;
402
426
  await this.setValue(this.cacheData);
403
427
  }
404
428
  async clearAll() {
@@ -407,6 +431,8 @@ class LoginCacheStore {
407
431
  this.cacheData.id = undefined;
408
432
  this.cacheData.accessToken = undefined;
409
433
  this.cacheData.refreshToken = undefined;
434
+ this.cacheData.accessTokenExpiresIn = undefined;
435
+ this.cacheData.createdAt = undefined;
410
436
  await this.setValue(this.cacheData);
411
437
  }
412
438
  }
@@ -944,7 +970,8 @@ class QueryLogin extends BaseQuery {
944
970
  }
945
971
  }
946
972
  }
947
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }) {
973
+ async beforeSetLoginUser(opts) {
974
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
948
975
  if (accessToken && refreshToken) {
949
976
  const resUser = await this.getMe(accessToken, check401);
950
977
  if (resUser.code === 200) {
@@ -962,7 +989,12 @@ class QueryLogin extends BaseQuery {
962
989
  console.error("登录失败");
963
990
  }
964
991
  }
992
+ return resUser;
965
993
  }
994
+ return {
995
+ code: 400,
996
+ message: "登录失败"
997
+ };
966
998
  }
967
999
  async queryRefreshToken(refreshToken) {
968
1000
  const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
@@ -1063,6 +1095,9 @@ class QueryLogin extends BaseQuery {
1063
1095
  const token = this.storage.getItem("token");
1064
1096
  return !!token;
1065
1097
  }
1098
+ async checkTokenValid() {
1099
+ return this.cacheStore.getIsExpired();
1100
+ }
1066
1101
  async getToken() {
1067
1102
  const token = this.storage.getItem("token");
1068
1103
  return token || "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/api",
3
- "version": "0.0.55",
3
+ "version": "0.0.57",
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;
@@ -82,7 +82,8 @@ export type CacheStore<T extends Cache = Cache> = {
82
82
  getValue(): Promise<CacheLogin>;
83
83
  setValue(value: CacheLogin): Promise<CacheLogin>;
84
84
  delValue(): Promise<void>;
85
- init(): Promise<any>;
85
+ init(): Promise<CacheLogin>;
86
+ getIsExpired(): Promise<boolean>;
86
87
  };
87
88
 
88
89
  export type LoginCacheStoreOpts<T extends Cache = Cache> = {
@@ -124,6 +125,13 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
124
125
  */
125
126
  async delValue() {
126
127
  await this.cache.del();
128
+ this.cacheData = {
129
+ loginUsers: [],
130
+ user: undefined,
131
+ id: undefined,
132
+ accessToken: undefined,
133
+ refreshToken: undefined,
134
+ };
127
135
  }
128
136
  getValue(): Promise<CacheLogin> {
129
137
  return this.cache.get(this.name);
@@ -132,12 +140,14 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
132
140
  * 初始化,设置默认值
133
141
  */
134
142
  async init() {
135
- const defaultData = {
143
+ const defaultData: CacheLogin = {
136
144
  loginUsers: [],
137
- user: null,
138
- id: null,
139
- accessToken: null,
140
- refreshToken: null,
145
+ user: undefined,
146
+ id: undefined,
147
+ accessToken: undefined,
148
+ refreshToken: undefined,
149
+ accessTokenExpiresIn: undefined,
150
+ createdAt: undefined,
141
151
  };
142
152
  if (this.cache.init) {
143
153
  try {
@@ -149,6 +159,7 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
149
159
  } else {
150
160
  this.cacheData = (await this.getValue()) || defaultData;
151
161
  }
162
+ return this.cacheData;
152
163
  }
153
164
  /**
154
165
  * 设置当前用户
@@ -184,6 +195,18 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
184
195
  const cacheData = this.cacheData;
185
196
  return Promise.resolve(cacheData.accessToken || '');
186
197
  }
198
+ getIsExpired(): Promise<boolean> {
199
+ const cacheData = this.cacheData;
200
+ if (!cacheData.accessToken) {
201
+ return Promise.resolve(true);
202
+ }
203
+ if (!cacheData.createdAt || !cacheData.accessTokenExpiresIn) {
204
+ return Promise.resolve(false);
205
+ }
206
+ const now = Date.now();
207
+ const expiresIn = cacheData.createdAt + cacheData.accessTokenExpiresIn * 1000;
208
+ return Promise.resolve(now >= expiresIn);
209
+ }
187
210
 
188
211
  async clearCurrentUser() {
189
212
  const user = await this.getCurrentUser();
@@ -195,6 +218,8 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
195
218
  this.cacheData.id = undefined;
196
219
  this.cacheData.accessToken = undefined;
197
220
  this.cacheData.refreshToken = undefined;
221
+ this.cacheData.accessTokenExpiresIn = undefined;
222
+ this.cacheData.createdAt = undefined;
198
223
  await this.setValue(this.cacheData);
199
224
  }
200
225
  async clearAll() {
@@ -203,6 +228,8 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
203
228
  this.cacheData.id = undefined;
204
229
  this.cacheData.accessToken = undefined;
205
230
  this.cacheData.refreshToken = undefined;
231
+ this.cacheData.accessTokenExpiresIn = undefined;
232
+ this.cacheData.createdAt = undefined;
206
233
  await this.setValue(this.cacheData);
207
234
  }
208
235
  }
@@ -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> = {
@@ -128,7 +128,8 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
128
128
  * 登陆成功,需要获取用户信息进行缓存
129
129
  * @param param0
130
130
  */
131
- async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: { accessTokenExpiresIn?: number, accessToken?: string; refreshToken?: string; check401?: boolean }) {
131
+ async beforeSetLoginUser(opts: { accessTokenExpiresIn?: number, accessToken?: string; refreshToken?: string; check401?: boolean }): Promise<Result<User>> {
132
+ const { accessToken, refreshToken, check401, accessTokenExpiresIn } = opts;
132
133
  if (accessToken && refreshToken) {
133
134
  const resUser = await this.getMe(accessToken, check401);
134
135
  if (resUser.code === 200) {
@@ -146,7 +147,12 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
146
147
  console.error('登录失败');
147
148
  }
148
149
  }
150
+ return resUser;
149
151
  }
152
+ return {
153
+ code: 400,
154
+ message: '登录失败',
155
+ };
150
156
  }
151
157
  /**
152
158
  * 刷新token
@@ -305,6 +311,9 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
305
311
  const token = this.storage.getItem('token');
306
312
  return !!token;
307
313
  }
314
+ async checkTokenValid() {
315
+ return this.cacheStore.getIsExpired();
316
+ }
308
317
  /**
309
318
  * 检查本地用户列表
310
319
  * @returns
@@ -313,6 +322,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
313
322
  const token = this.storage.getItem('token');
314
323
  return token || '';
315
324
  }
325
+
316
326
  async beforeRequest(opts: any = {}) {
317
327
  const token = this.storage.getItem('token');
318
328
  if (token) {