@kevisual/api 0.0.52 → 0.0.54

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.
package/dist/query-ai.js CHANGED
@@ -1,4 +1,4 @@
1
- // node_modules/.pnpm/@kevisual+query@0.0.47/node_modules/@kevisual/query/dist/query-browser.js
1
+ // node_modules/@kevisual/query/dist/query-browser.js
2
2
  var isTextForContentType = (contentType) => {
3
3
  if (!contentType)
4
4
  return false;
@@ -118,6 +118,7 @@ var wrapperError = ({ code, message }) => {
118
118
 
119
119
  class Query {
120
120
  adapter;
121
+ baseURL;
121
122
  url;
122
123
  beforeRequest;
123
124
  afterResponse;
@@ -134,6 +135,11 @@ class Query {
134
135
  this.storage = opts?.storage || globalThis?.localStorage;
135
136
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
136
137
  this.url = opts?.url || defaultURL;
138
+ if (this.url.startsWith("http")) {
139
+ const urlObj = new URL(this.url);
140
+ this.baseURL = urlObj.origin;
141
+ }
142
+ this.baseURL = opts?.baseURL || this.baseURL;
137
143
  this.headers = opts?.headers || {
138
144
  "Content-Type": "application/json"
139
145
  };
@@ -177,6 +183,13 @@ class Query {
177
183
  timeout: _timeout,
178
184
  ...rest
179
185
  };
186
+ const isStartsWithHttp = req.url.startsWith("http");
187
+ if (!isStartsWithHttp) {
188
+ if (this.baseURL) {
189
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
190
+ req.url = baseURL + req.url;
191
+ }
192
+ }
180
193
  try {
181
194
  if (_beforeRequest) {
182
195
  const res = await _beforeRequest(req);
@@ -273,7 +286,7 @@ class Query {
273
286
  }
274
287
  }
275
288
 
276
- // node_modules/.pnpm/@kevisual+router@0.0.75/node_modules/@kevisual/router/dist/router-define.js
289
+ // node_modules/@kevisual/router/dist/router-define.js
277
290
  class Chain {
278
291
  object;
279
292
  app;
@@ -407,7 +420,7 @@ var appDefine = QueryUtil.create({
407
420
  }
408
421
  });
409
422
 
410
- // node_modules/.pnpm/@kevisual+query@0.0.47/node_modules/@kevisual/query/dist/query.js
423
+ // node_modules/@kevisual/query/dist/query.js
411
424
  class BaseQuery {
412
425
  query;
413
426
  queryDefine;
package/dist/query-app.js CHANGED
@@ -1,4 +1,4 @@
1
- // node_modules/.pnpm/@kevisual+query@0.0.47/node_modules/@kevisual/query/dist/query-browser.js
1
+ // node_modules/@kevisual/query/dist/query-browser.js
2
2
  var isTextForContentType = (contentType) => {
3
3
  if (!contentType)
4
4
  return false;
@@ -118,6 +118,7 @@ var wrapperError = ({ code, message }) => {
118
118
 
119
119
  class Query {
120
120
  adapter;
121
+ baseURL;
121
122
  url;
122
123
  beforeRequest;
123
124
  afterResponse;
@@ -134,6 +135,11 @@ class Query {
134
135
  this.storage = opts?.storage || globalThis?.localStorage;
135
136
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
136
137
  this.url = opts?.url || defaultURL;
138
+ if (this.url.startsWith("http")) {
139
+ const urlObj = new URL(this.url);
140
+ this.baseURL = urlObj.origin;
141
+ }
142
+ this.baseURL = opts?.baseURL || this.baseURL;
137
143
  this.headers = opts?.headers || {
138
144
  "Content-Type": "application/json"
139
145
  };
@@ -177,6 +183,13 @@ class Query {
177
183
  timeout: _timeout,
178
184
  ...rest
179
185
  };
186
+ const isStartsWithHttp = req.url.startsWith("http");
187
+ if (!isStartsWithHttp) {
188
+ if (this.baseURL) {
189
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
190
+ req.url = baseURL + req.url;
191
+ }
192
+ }
180
193
  try {
181
194
  if (_beforeRequest) {
182
195
  const res = await _beforeRequest(req);
@@ -273,7 +286,7 @@ class Query {
273
286
  }
274
287
  }
275
288
 
276
- // node_modules/.pnpm/@kevisual+router@0.0.75/node_modules/@kevisual/router/dist/router-define.js
289
+ // node_modules/@kevisual/router/dist/router-define.js
277
290
  class Chain {
278
291
  object;
279
292
  app;
@@ -481,7 +494,7 @@ var userAppDefine = QueryUtil.create({
481
494
  }
482
495
  });
483
496
 
484
- // node_modules/.pnpm/@kevisual+query@0.0.47/node_modules/@kevisual/query/dist/query.js
497
+ // node_modules/@kevisual/query/dist/query.js
485
498
  class BaseQuery {
486
499
  query;
487
500
  queryDefine;
@@ -1,4 +1,4 @@
1
- // node_modules/.pnpm/@kevisual+query@0.0.47/node_modules/@kevisual/query/dist/query-browser.js
1
+ // node_modules/@kevisual/query/dist/query-browser.js
2
2
  var isTextForContentType = (contentType) => {
3
3
  if (!contentType)
4
4
  return false;
@@ -118,6 +118,7 @@ var wrapperError = ({ code, message }) => {
118
118
 
119
119
  class Query {
120
120
  adapter;
121
+ baseURL;
121
122
  url;
122
123
  beforeRequest;
123
124
  afterResponse;
@@ -134,6 +135,11 @@ class Query {
134
135
  this.storage = opts?.storage || globalThis?.localStorage;
135
136
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
136
137
  this.url = opts?.url || defaultURL;
138
+ if (this.url.startsWith("http")) {
139
+ const urlObj = new URL(this.url);
140
+ this.baseURL = urlObj.origin;
141
+ }
142
+ this.baseURL = opts?.baseURL || this.baseURL;
137
143
  this.headers = opts?.headers || {
138
144
  "Content-Type": "application/json"
139
145
  };
@@ -177,6 +183,13 @@ class Query {
177
183
  timeout: _timeout,
178
184
  ...rest
179
185
  };
186
+ const isStartsWithHttp = req.url.startsWith("http");
187
+ if (!isStartsWithHttp) {
188
+ if (this.baseURL) {
189
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
190
+ req.url = baseURL + req.url;
191
+ }
192
+ }
180
193
  try {
181
194
  if (_beforeRequest) {
182
195
  const res = await _beforeRequest(req);
@@ -0,0 +1,340 @@
1
+ import { BaseQuery, Query } from '@kevisual/query';
2
+ import { DataOpts, Result } from '@kevisual/query/query';
3
+
4
+ interface Cache {
5
+ /**
6
+ * @update 获取缓存
7
+ */
8
+ get(key: string): Promise<any>;
9
+ /**
10
+ * @update 设置缓存
11
+ */
12
+ set(key: string, value: any): Promise<any>;
13
+ /**
14
+ * @update 删除缓存
15
+ */
16
+ del(): Promise<void>;
17
+ /**
18
+ * 初始化
19
+ */
20
+ init?: () => Promise<any>;
21
+ }
22
+ type User = {
23
+ avatar?: string;
24
+ description?: string;
25
+ id?: string;
26
+ needChangePassword?: boolean;
27
+ orgs?: string[];
28
+ type?: string;
29
+ username?: string;
30
+ };
31
+ type CacheLoginUser = {
32
+ user?: User;
33
+ id?: string;
34
+ accessToken?: string;
35
+ refreshToken?: string;
36
+ accessTokenExpiresIn?: number;
37
+ createdAt?: number;
38
+ };
39
+ type CacheLogin = {
40
+ loginUsers: CacheLoginUser[];
41
+ } & CacheLoginUser;
42
+ type CacheStore<T = Cache> = {
43
+ name: string;
44
+ /**
45
+ * 缓存数据
46
+ * @important 需要先调用init
47
+ */
48
+ cacheData: CacheLogin;
49
+ /**
50
+ * 实际操作的cache, 需要先调用init
51
+ */
52
+ cache: T;
53
+ /**
54
+ * 设置当前用户
55
+ */
56
+ setLoginUser(user: CacheLoginUser): Promise<void>;
57
+ /**
58
+ * 获取当前用户
59
+ */
60
+ getCurrentUser(): Promise<User>;
61
+ /**
62
+ * 获取当前用户列表
63
+ */
64
+ getCurrentUserList(): Promise<CacheLoginUser[]>;
65
+ /**
66
+ * 获取缓存的refreshToken
67
+ */
68
+ getRefreshToken(): Promise<string>;
69
+ /**
70
+ * 获取缓存的accessToken
71
+ */
72
+ getAccessToken(): Promise<string>;
73
+ /**
74
+ * 清除当前用户
75
+ */
76
+ clearCurrentUser(): Promise<void>;
77
+ /**
78
+ * 清除所有用户
79
+ */
80
+ clearAll(): Promise<void>;
81
+ getValue(): Promise<CacheLogin>;
82
+ setValue(value: CacheLogin): Promise<CacheLogin>;
83
+ delValue(): Promise<void>;
84
+ init(): Promise<any>;
85
+ };
86
+
87
+ type QueryLoginOpts = {
88
+ query?: Query;
89
+ isBrowser?: boolean;
90
+ onLoad?: () => void;
91
+ storage?: Storage;
92
+ cache: Cache;
93
+ };
94
+ type QueryLoginData = {
95
+ username?: string;
96
+ password: string;
97
+ email?: string;
98
+ };
99
+ type QueryLoginResult = {
100
+ accessToken: string;
101
+ refreshToken: string;
102
+ };
103
+ declare class QueryLogin extends BaseQuery {
104
+ /**
105
+ * query login cache, 非实际操作, 一个cache的包裹模块
106
+ */
107
+ cacheStore: CacheStore;
108
+ isBrowser: boolean;
109
+ load?: boolean;
110
+ storage: Storage;
111
+ onLoad?: () => void;
112
+ constructor(opts?: QueryLoginOpts);
113
+ setQuery(query: Query): void;
114
+ private init;
115
+ post<T = any>(data: any, opts?: DataOpts): Promise<any>;
116
+ /**
117
+ * 登录,
118
+ * @param data
119
+ * @returns
120
+ */
121
+ login(data: QueryLoginData): Promise<any>;
122
+ /**
123
+ * 手机号登录
124
+ * @param data
125
+ * @returns
126
+ */
127
+ loginByCode(data: {
128
+ phone: string;
129
+ code: string;
130
+ }): Promise<any>;
131
+ /**
132
+ * 设置token
133
+ * @param token
134
+ */
135
+ setLoginToken(token: {
136
+ accessToken: string;
137
+ refreshToken: string;
138
+ accessTokenExpiresIn?: number;
139
+ }): Promise<void>;
140
+ loginByWechat(data: {
141
+ code: string;
142
+ }): Promise<any>;
143
+ /**
144
+ * 检测微信登录,登陆成功后,调用onSuccess,否则调用onError
145
+ * @param param0
146
+ */
147
+ checkWechat({ onSuccess, onError }: {
148
+ onSuccess?: (res: QueryLoginResult) => void;
149
+ onError?: (res: any) => void;
150
+ }): Promise<void>;
151
+ /**
152
+ * 登陆成功,需要获取用户信息进行缓存
153
+ * @param param0
154
+ */
155
+ beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: {
156
+ accessTokenExpiresIn?: number;
157
+ accessToken?: string;
158
+ refreshToken?: string;
159
+ check401?: boolean;
160
+ }): Promise<void>;
161
+ /**
162
+ * 刷新token
163
+ * @param refreshToken
164
+ * @returns
165
+ */
166
+ queryRefreshToken(refreshToken?: string): Promise<any>;
167
+ /**
168
+ * 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
169
+ * 拦截请求,请使用run401Action, 不要直接使用 afterCheck401ToRefreshToken
170
+ * @param response
171
+ * @param ctx
172
+ * @param refetch
173
+ * @returns
174
+ */
175
+ afterCheck401ToRefreshToken(response: Result, ctx?: {
176
+ req?: any;
177
+ res?: any;
178
+ fetch?: any;
179
+ }, refetch?: boolean): Promise<any>;
180
+ /**
181
+ * 一个简单的401处理, 如果401,则刷新token, 如果refreshToken不存在,则返回401
182
+ * refetch 是否重新请求, 会有bug,无限循环,按需要使用
183
+ * TODO:
184
+ * @param response
185
+ * @param ctx
186
+ * @param opts
187
+ * @returns
188
+ */
189
+ run401Action(response: Result, ctx?: {
190
+ req?: any;
191
+ res?: any;
192
+ fetch?: any;
193
+ }, opts?: {
194
+ /**
195
+ * 是否重新请求, 会有bug,无限循环,按需要使用
196
+ */
197
+ refetch?: boolean;
198
+ /**
199
+ * check之后的回调
200
+ */
201
+ afterCheck?: (res: Result) => any;
202
+ /**
203
+ * 401处理后, 还是401, 则回调
204
+ */
205
+ afterAlso401?: (res: Result) => any;
206
+ }): Promise<any>;
207
+ /**
208
+ * 获取用户信息
209
+ * @param token
210
+ * @returns
211
+ */
212
+ getMe(token?: string, check401?: boolean): Promise<any>;
213
+ /**
214
+ * 检查本地用户,如果本地用户存在,则返回本地用户,否则返回null
215
+ * @returns
216
+ */
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>;
226
+ /**
227
+ * 检查本地token是否存在,简单的判断是否已经属于登陆状态
228
+ * @returns
229
+ */
230
+ checkLocalToken(): Promise<boolean>;
231
+ /**
232
+ * 检查本地用户列表
233
+ * @returns
234
+ */
235
+ getToken(): Promise<string>;
236
+ beforeRequest(opts?: any): Promise<any>;
237
+ /**
238
+ * 请求更新,切换用户, 使用switchUser
239
+ * @param username
240
+ * @returns
241
+ */
242
+ private postSwitchUser;
243
+ /**
244
+ * 切换用户
245
+ * @param username
246
+ * @returns
247
+ */
248
+ switchUser(username: string): Promise<any>;
249
+ /**
250
+ * 退出登陆,去掉token, 并删除缓存
251
+ * @returns
252
+ */
253
+ logout(): Promise<any>;
254
+ /**
255
+ * 检查用户名的组,这个用户是否存在
256
+ * @param username
257
+ * @returns
258
+ */
259
+ hasUser(username: string): Promise<any>;
260
+ /**
261
+ * 检查登录状态
262
+ * @param token
263
+ * @returns
264
+ */
265
+ checkLoginStatus(token: string): Promise<any>;
266
+ /**
267
+ * 使用web登录,创建url地址, 需要MD5和jsonwebtoken
268
+ *
269
+ *
270
+
271
+ // import MD5 from 'crypto-js/md5.js';
272
+ import jsonwebtoken from 'jsonwebtoken';
273
+
274
+ */
275
+ loginWithWeb(baseURL: string, { MD5, jsonwebtoken }: {
276
+ MD5?: any;
277
+ jsonwebtoken?: any;
278
+ }): {
279
+ url: string;
280
+ token: string;
281
+ tokenSecret: string;
282
+ };
283
+ /**
284
+ *轮询登录状态
285
+ *
286
+ *
287
+ *
288
+ const res = queryLogin.loginWithWeb(baseURL, { MD5, jsonwebtoken });
289
+ await pollLoginStatus(res.token, { tokenSecret: res.tokenSecret });
290
+ * 轮询登录状态
291
+ */
292
+ pollLoginStatus(data: {
293
+ token: string;
294
+ tokenSecret: string;
295
+ }): Promise<boolean>;
296
+ }
297
+
298
+ declare class StorageNode implements Storage {
299
+ cacheData: any;
300
+ filePath: string;
301
+ hostname: string;
302
+ isLoaded: boolean;
303
+ constructor(opts?: {
304
+ baseURL?: string;
305
+ load?: boolean;
306
+ });
307
+ setHostName(hostname: string, opts?: {
308
+ load?: boolean;
309
+ }): void;
310
+ loadCache(force?: boolean): void;
311
+ get length(): number;
312
+ getItem(key: string): any;
313
+ setItem(key: string, value: any): void;
314
+ removeItem(key: string): void;
315
+ clear(): void;
316
+ key(index: number): string;
317
+ }
318
+ declare class LoginNodeCache implements Cache {
319
+ filepath: string;
320
+ isLoaded: boolean;
321
+ constructor(opts?: {
322
+ baseURL?: string;
323
+ load?: boolean;
324
+ });
325
+ get(_key: string): Promise<any>;
326
+ set(_key: string, value: any): Promise<void>;
327
+ del(): Promise<void>;
328
+ loadCache(filePath: string, force?: boolean): any;
329
+ init(): any;
330
+ }
331
+
332
+ type QueryLoginNodeOptsWithoutCache = Omit<QueryLoginOpts, 'cache'>;
333
+
334
+ declare const cache: LoginNodeCache;
335
+ declare class QueryLoginNode extends QueryLogin {
336
+ storage: StorageNode;
337
+ constructor(opts: QueryLoginNodeOptsWithoutCache);
338
+ }
339
+
340
+ export { QueryLoginNode, StorageNode, cache };