@kevisual/cli 0.1.4 → 0.1.6

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/envision.js CHANGED
@@ -21754,7 +21754,8 @@ var {
21754
21754
  // src/program.ts
21755
21755
  import fs from "fs";
21756
21756
 
21757
- // node_modules/.pnpm/@kevisual+context@0.0.6/node_modules/@kevisual/context/dist/app.js
21757
+ // node_modules/.pnpm/@kevisual+context@0.0.8/node_modules/@kevisual/context/dist/app.js
21758
+ var isBrowser2 = typeof window !== "undefined" && typeof window.document !== "undefined";
21758
21759
  function getDefaultExportFromCjs(x) {
21759
21760
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
21760
21761
  }
@@ -22218,7 +22219,7 @@ var useEnv = (initEnv, initKey = "config", isOverwrite) => {
22218
22219
  }
22219
22220
  return gt[initKey];
22220
22221
  };
22221
- var useEnvKey = (key, init, initKey = "config") => {
22222
+ var useEnvKey = (key, init, initKey = "config", opts = {}) => {
22222
22223
  const _env = useEnv({}, initKey);
22223
22224
  if (key && typeof _env[key] !== "undefined") {
22224
22225
  return _env[key];
@@ -22244,12 +22245,13 @@ var useEnvKey = (key, init, initKey = "config") => {
22244
22245
  const voidFn = async () => {
22245
22246
  return _env[key];
22246
22247
  };
22248
+ const timeout = opts.timeout || 5 * 60 * 1000;
22247
22249
  const checkFn = async () => {
22248
22250
  const loadRes = await baseLoad.load(voidFn, {
22249
22251
  key,
22250
22252
  isReRun: true,
22251
22253
  checkSuccess: () => _env[key],
22252
- timeout: 5 * 60 * 1000,
22254
+ timeout,
22253
22255
  interval: 1000
22254
22256
  });
22255
22257
  if (loadRes.code !== 200) {
@@ -22265,27 +22267,28 @@ var useEnvKey = (key, init, initKey = "config") => {
22265
22267
  };
22266
22268
  var useEnvKeyNew = (key, initKey = "config", opts) => {
22267
22269
  const _env = useEnv({}, initKey);
22270
+ const timeout = opts?.timeout;
22268
22271
  if (key) {
22269
22272
  delete _env[key];
22270
22273
  }
22271
22274
  if (opts?.getNew && opts.init) {
22272
- return useEnvKey(key, opts.init, initKey);
22275
+ return useEnvKey(key, opts.init, initKey, { timeout });
22273
22276
  } else if (opts?.getNew) {
22274
- return useEnvKey(key, null, initKey);
22277
+ return useEnvKey(key, null, initKey, { timeout });
22275
22278
  }
22276
22279
  };
22277
- var useContextKey = (key, init, isNew) => {
22278
- if (isNew) {
22279
- return useEnvKeyNew(key, "context", { getNew: true, init });
22280
+ var useContextKey = (key, init, opts) => {
22281
+ if (opts?.isNew) {
22282
+ return useEnvKeyNew(key, "context", { getNew: true, init, ...opts });
22280
22283
  }
22281
- return useEnvKey(key, init, "context");
22284
+ return useEnvKey(key, init, "context", opts);
22282
22285
  };
22283
22286
  var use = useContextKey;
22284
- var useConfigKey = (key, init, isNew) => {
22285
- if (isNew) {
22286
- return useEnvKeyNew(key, "config", { getNew: true, init });
22287
+ var useConfigKey = (key, init, opts) => {
22288
+ if (opts?.isNew) {
22289
+ return useEnvKeyNew(key, "config", { getNew: true, init, ...opts });
22287
22290
  }
22288
- return useEnvKey(key, init, "config");
22291
+ return useEnvKey(key, init, "config", opts);
22289
22292
  };
22290
22293
 
22291
22294
  class InitEnv {
@@ -22309,8 +22312,8 @@ InitEnv.init();
22309
22312
  var version = useContextKey("version", () => {
22310
22313
  let version2 = "0.0.64";
22311
22314
  try {
22312
- if ("0.1.4")
22313
- version2 = "0.1.4";
22315
+ if ("0.1.6")
22316
+ version2 = "0.1.6";
22314
22317
  } catch (e) {}
22315
22318
  return version2;
22316
22319
  });
@@ -25123,23 +25126,17 @@ var dist_default6 = createPrompt((config, done) => {
25123
25126
  var import_md5 = __toESM(require_md5(), 1);
25124
25127
  var import_jsonwebtoken = __toESM(require_jsonwebtoken(), 1);
25125
25128
 
25126
- // node_modules/.pnpm/@kevisual+query@0.0.40/node_modules/@kevisual/query/dist/query.js
25129
+ // node_modules/.pnpm/@kevisual+query@0.0.49/node_modules/@kevisual/query/dist/query.js
25127
25130
  var isTextForContentType = (contentType) => {
25128
25131
  if (!contentType)
25129
25132
  return false;
25130
- const textTypes = ["text/", "xml", "html", "javascript", "css", "csv", "plain", "x-www-form-urlencoded", "md"];
25133
+ const textTypes = ["text/", "xml", "html", "javascript", "css", "csv", "plain", "x-www-form-urlencoded", "md", "json"];
25131
25134
  return textTypes.some((type) => contentType.includes(type));
25132
25135
  };
25133
25136
  var adapter = async (opts = {}, overloadOpts) => {
25134
25137
  const controller = new AbortController;
25135
25138
  const signal = controller.signal;
25136
25139
  const isPostFile = opts.isPostFile || false;
25137
- let responseType = opts.responseType || "json";
25138
- if (opts.isBlob) {
25139
- responseType = "blob";
25140
- } else if (opts.isText) {
25141
- responseType = "text";
25142
- }
25143
25140
  const timeout = opts.timeout || 60000 * 3;
25144
25141
  const timer = setTimeout(() => {
25145
25142
  controller.abort();
@@ -25151,7 +25148,7 @@ var adapter = async (opts = {}, overloadOpts) => {
25151
25148
  if (opts?.url?.startsWith("http")) {
25152
25149
  url = new URL(opts.url);
25153
25150
  } else {
25154
- origin = window?.location?.origin || "http://localhost:51515";
25151
+ origin = globalThis?.location?.origin || "http://localhost:51515";
25155
25152
  url = new URL(opts?.url || "", origin);
25156
25153
  }
25157
25154
  const isGet = method === "GET";
@@ -25198,21 +25195,31 @@ var adapter = async (opts = {}, overloadOpts) => {
25198
25195
  headers
25199
25196
  }).then(async (response) => {
25200
25197
  const contentType = response.headers.get("Content-Type");
25201
- if (responseType === "blob") {
25202
- return await response.blob();
25203
- }
25204
- const isText = responseType === "text";
25205
25198
  const isJson = contentType && contentType.includes("application/json");
25206
- if (isJson && !isText) {
25207
- return await response.json();
25199
+ const isSuccess = response.ok;
25200
+ if (isJson) {
25201
+ const json = await response.json();
25202
+ if (json?.code) {
25203
+ return json;
25204
+ }
25205
+ return {
25206
+ code: isSuccess ? 200 : response.status,
25207
+ status: response.status,
25208
+ data: json
25209
+ };
25208
25210
  } else if (isTextForContentType(contentType)) {
25209
25211
  return {
25210
- code: response.status,
25212
+ code: isSuccess ? 200 : response.status,
25211
25213
  status: response.status,
25212
25214
  data: await response.text()
25213
25215
  };
25214
25216
  } else {
25215
- return response;
25217
+ return {
25218
+ code: isSuccess ? 200 : response.status,
25219
+ status: response.status,
25220
+ data: "非文本非JSON响应, 请手动处理response。",
25221
+ response
25222
+ };
25216
25223
  }
25217
25224
  }).catch((err) => {
25218
25225
  if (err.name === "AbortError") {
@@ -25229,28 +25236,17 @@ var adapter = async (opts = {}, overloadOpts) => {
25229
25236
  clearTimeout(timer);
25230
25237
  });
25231
25238
  };
25232
- var setBaseResponse = (res) => {
25233
- res.success = res.code === 200;
25234
- res.showError = (fn) => {
25235
- if (!res.success && !res.noMsg) {
25236
- fn?.();
25237
- }
25238
- };
25239
- return res;
25240
- };
25241
25239
  var wrapperError = ({ code, message }) => {
25242
25240
  const result = {
25243
25241
  code: code || 500,
25244
- success: false,
25245
- message: message || "api request error",
25246
- showError: (fn) => {},
25247
- noMsg: true
25242
+ message: message || "请求错误"
25248
25243
  };
25249
25244
  return result;
25250
25245
  };
25251
25246
 
25252
25247
  class Query {
25253
25248
  adapter;
25249
+ baseURL;
25254
25250
  url;
25255
25251
  beforeRequest;
25256
25252
  afterResponse;
@@ -25258,11 +25254,20 @@ class Query {
25258
25254
  timeout;
25259
25255
  stop;
25260
25256
  qws;
25261
- isClient = false;
25257
+ tokenName;
25258
+ storage;
25259
+ token;
25262
25260
  constructor(opts) {
25263
25261
  this.adapter = opts?.adapter || adapter;
25262
+ this.tokenName = opts?.tokenName || "token";
25263
+ this.storage = opts?.storage || globalThis?.localStorage;
25264
25264
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
25265
25265
  this.url = opts?.url || defaultURL;
25266
+ if (this.url.startsWith("http")) {
25267
+ const urlObj = new URL(this.url);
25268
+ this.baseURL = urlObj.origin;
25269
+ }
25270
+ this.baseURL = opts?.baseURL || this.baseURL;
25266
25271
  this.headers = opts?.headers || {
25267
25272
  "Content-Type": "application/json"
25268
25273
  };
@@ -25271,7 +25276,7 @@ class Query {
25271
25276
  this.beforeRequest = opts.beforeRequest;
25272
25277
  } else {
25273
25278
  this.beforeRequest = async (opts2) => {
25274
- const token = globalThis?.localStorage?.getItem("token");
25279
+ const token = this.token || this.storage?.getItem?.(this.tokenName);
25275
25280
  if (token) {
25276
25281
  opts2.headers = {
25277
25282
  ...opts2.headers,
@@ -25306,13 +25311,20 @@ class Query {
25306
25311
  timeout: _timeout,
25307
25312
  ...rest
25308
25313
  };
25314
+ const isStartsWithHttp = req.url.startsWith("http");
25315
+ if (!isStartsWithHttp) {
25316
+ if (this.baseURL) {
25317
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
25318
+ req.url = baseURL + req.url;
25319
+ }
25320
+ }
25309
25321
  try {
25310
25322
  if (_beforeRequest) {
25311
25323
  const res = await _beforeRequest(req);
25312
25324
  if (res === false) {
25313
25325
  return wrapperError({
25314
25326
  code: 500,
25315
- message: "request is cancel",
25327
+ message: "请求取消",
25316
25328
  req
25317
25329
  });
25318
25330
  }
@@ -25321,12 +25333,13 @@ class Query {
25321
25333
  console.error("request beforeFn error", e, req);
25322
25334
  return wrapperError({
25323
25335
  code: 500,
25324
- message: "api request beforeFn error"
25336
+ message: "请求在请求前处理时发生错误",
25337
+ req
25325
25338
  });
25326
25339
  }
25327
25340
  if (this.stop && !options?.noStop) {
25328
25341
  const that = this;
25329
- await new Promise((resolve) => {
25342
+ const res = await new Promise((resolve) => {
25330
25343
  let timer = 0;
25331
25344
  const detect = setInterval(() => {
25332
25345
  if (!that.stop) {
@@ -25334,11 +25347,20 @@ class Query {
25334
25347
  resolve(true);
25335
25348
  }
25336
25349
  timer++;
25337
- if (timer > 30) {
25338
- console.error("request stop: timeout", req.url, timer);
25350
+ if (timer > 5) {
25351
+ console.error("等待请求失败:", req.url, timer);
25352
+ clearInterval(detect);
25353
+ resolve(false);
25339
25354
  }
25340
25355
  }, 1000);
25341
25356
  });
25357
+ if (!res) {
25358
+ return wrapperError({
25359
+ code: 500,
25360
+ message: "请求取消,可能是因为用户未登录或者token过期",
25361
+ req
25362
+ });
25363
+ }
25342
25364
  }
25343
25365
  return _adapter(req).then(async (res) => {
25344
25366
  try {
@@ -25351,10 +25373,11 @@ class Query {
25351
25373
  }
25352
25374
  return res;
25353
25375
  } catch (e) {
25354
- console.error("request afterFn error", e, req);
25376
+ console.error("请求在响应后处理时发生错误", e, req);
25355
25377
  return wrapperError({
25356
25378
  code: 500,
25357
- message: "api request afterFn error"
25379
+ message: "请求在响应后处理时发生错误",
25380
+ req
25358
25381
  });
25359
25382
  }
25360
25383
  });
@@ -25391,23 +25414,17 @@ class Query {
25391
25414
  }
25392
25415
  }
25393
25416
 
25394
- // node_modules/.pnpm/@kevisual+query@0.0.40/node_modules/@kevisual/query/dist/query-browser.js
25417
+ // node_modules/.pnpm/@kevisual+query@0.0.49/node_modules/@kevisual/query/dist/query-browser.js
25395
25418
  var isTextForContentType2 = (contentType) => {
25396
25419
  if (!contentType)
25397
25420
  return false;
25398
- const textTypes = ["text/", "xml", "html", "javascript", "css", "csv", "plain", "x-www-form-urlencoded", "md"];
25421
+ const textTypes = ["text/", "xml", "html", "javascript", "css", "csv", "plain", "x-www-form-urlencoded", "md", "json"];
25399
25422
  return textTypes.some((type) => contentType.includes(type));
25400
25423
  };
25401
25424
  var adapter2 = async (opts = {}, overloadOpts) => {
25402
25425
  const controller = new AbortController;
25403
25426
  const signal = controller.signal;
25404
25427
  const isPostFile = opts.isPostFile || false;
25405
- let responseType = opts.responseType || "json";
25406
- if (opts.isBlob) {
25407
- responseType = "blob";
25408
- } else if (opts.isText) {
25409
- responseType = "text";
25410
- }
25411
25428
  const timeout = opts.timeout || 60000 * 3;
25412
25429
  const timer = setTimeout(() => {
25413
25430
  controller.abort();
@@ -25419,7 +25436,7 @@ var adapter2 = async (opts = {}, overloadOpts) => {
25419
25436
  if (opts?.url?.startsWith("http")) {
25420
25437
  url = new URL(opts.url);
25421
25438
  } else {
25422
- origin = window?.location?.origin || "http://localhost:51515";
25439
+ origin = globalThis?.location?.origin || "http://localhost:51515";
25423
25440
  url = new URL(opts?.url || "", origin);
25424
25441
  }
25425
25442
  const isGet = method === "GET";
@@ -25466,21 +25483,31 @@ var adapter2 = async (opts = {}, overloadOpts) => {
25466
25483
  headers
25467
25484
  }).then(async (response) => {
25468
25485
  const contentType = response.headers.get("Content-Type");
25469
- if (responseType === "blob") {
25470
- return await response.blob();
25471
- }
25472
- const isText = responseType === "text";
25473
25486
  const isJson = contentType && contentType.includes("application/json");
25474
- if (isJson && !isText) {
25475
- return await response.json();
25487
+ const isSuccess = response.ok;
25488
+ if (isJson) {
25489
+ const json = await response.json();
25490
+ if (json?.code) {
25491
+ return json;
25492
+ }
25493
+ return {
25494
+ code: isSuccess ? 200 : response.status,
25495
+ status: response.status,
25496
+ data: json
25497
+ };
25476
25498
  } else if (isTextForContentType2(contentType)) {
25477
25499
  return {
25478
- code: response.status,
25500
+ code: isSuccess ? 200 : response.status,
25479
25501
  status: response.status,
25480
25502
  data: await response.text()
25481
25503
  };
25482
25504
  } else {
25483
- return response;
25505
+ return {
25506
+ code: isSuccess ? 200 : response.status,
25507
+ status: response.status,
25508
+ data: "非文本非JSON响应, 请手动处理response。",
25509
+ response
25510
+ };
25484
25511
  }
25485
25512
  }).catch((err) => {
25486
25513
  if (err.name === "AbortError") {
@@ -25500,16 +25527,14 @@ var adapter2 = async (opts = {}, overloadOpts) => {
25500
25527
  var wrapperError2 = ({ code, message }) => {
25501
25528
  const result = {
25502
25529
  code: code || 500,
25503
- success: false,
25504
- message: message || "api request error",
25505
- showError: (fn) => {},
25506
- noMsg: true
25530
+ message: message || "请求错误"
25507
25531
  };
25508
25532
  return result;
25509
25533
  };
25510
25534
 
25511
25535
  class Query2 {
25512
25536
  adapter;
25537
+ baseURL;
25513
25538
  url;
25514
25539
  beforeRequest;
25515
25540
  afterResponse;
@@ -25517,11 +25542,20 @@ class Query2 {
25517
25542
  timeout;
25518
25543
  stop;
25519
25544
  qws;
25520
- isClient = false;
25545
+ tokenName;
25546
+ storage;
25547
+ token;
25521
25548
  constructor(opts) {
25522
25549
  this.adapter = opts?.adapter || adapter2;
25550
+ this.tokenName = opts?.tokenName || "token";
25551
+ this.storage = opts?.storage || globalThis?.localStorage;
25523
25552
  const defaultURL = opts?.isClient ? "/client/router" : "/api/router";
25524
25553
  this.url = opts?.url || defaultURL;
25554
+ if (this.url.startsWith("http")) {
25555
+ const urlObj = new URL(this.url);
25556
+ this.baseURL = urlObj.origin;
25557
+ }
25558
+ this.baseURL = opts?.baseURL || this.baseURL;
25525
25559
  this.headers = opts?.headers || {
25526
25560
  "Content-Type": "application/json"
25527
25561
  };
@@ -25530,7 +25564,7 @@ class Query2 {
25530
25564
  this.beforeRequest = opts.beforeRequest;
25531
25565
  } else {
25532
25566
  this.beforeRequest = async (opts2) => {
25533
- const token = globalThis?.localStorage?.getItem("token");
25567
+ const token = this.token || this.storage?.getItem?.(this.tokenName);
25534
25568
  if (token) {
25535
25569
  opts2.headers = {
25536
25570
  ...opts2.headers,
@@ -25552,9 +25586,9 @@ class Query2 {
25552
25586
  }
25553
25587
  async post(body, options) {
25554
25588
  const url = options?.url || this.url;
25555
- const { headers, adapter: adapter3, beforeRequest, afterResponse, timeout, ...rest } = options || {};
25589
+ const { headers, adapter: adapter22, beforeRequest, afterResponse, timeout, ...rest } = options || {};
25556
25590
  const _headers = { ...this.headers, ...headers };
25557
- const _adapter = adapter3 || this.adapter;
25591
+ const _adapter = adapter22 || this.adapter;
25558
25592
  const _beforeRequest = beforeRequest || this.beforeRequest;
25559
25593
  const _afterResponse = afterResponse || this.afterResponse;
25560
25594
  const _timeout = timeout || this.timeout;
@@ -25565,13 +25599,20 @@ class Query2 {
25565
25599
  timeout: _timeout,
25566
25600
  ...rest
25567
25601
  };
25602
+ const isStartsWithHttp = req.url.startsWith("http");
25603
+ if (!isStartsWithHttp) {
25604
+ if (this.baseURL) {
25605
+ const baseURL = new URL(this.baseURL || globalThis?.location?.origin).origin;
25606
+ req.url = baseURL + req.url;
25607
+ }
25608
+ }
25568
25609
  try {
25569
25610
  if (_beforeRequest) {
25570
25611
  const res = await _beforeRequest(req);
25571
25612
  if (res === false) {
25572
25613
  return wrapperError2({
25573
25614
  code: 500,
25574
- message: "request is cancel",
25615
+ message: "请求取消",
25575
25616
  req
25576
25617
  });
25577
25618
  }
@@ -25580,12 +25621,13 @@ class Query2 {
25580
25621
  console.error("request beforeFn error", e, req);
25581
25622
  return wrapperError2({
25582
25623
  code: 500,
25583
- message: "api request beforeFn error"
25624
+ message: "请求在请求前处理时发生错误",
25625
+ req
25584
25626
  });
25585
25627
  }
25586
25628
  if (this.stop && !options?.noStop) {
25587
25629
  const that = this;
25588
- await new Promise((resolve) => {
25630
+ const res = await new Promise((resolve) => {
25589
25631
  let timer = 0;
25590
25632
  const detect = setInterval(() => {
25591
25633
  if (!that.stop) {
@@ -25593,11 +25635,20 @@ class Query2 {
25593
25635
  resolve(true);
25594
25636
  }
25595
25637
  timer++;
25596
- if (timer > 30) {
25597
- console.error("request stop: timeout", req.url, timer);
25638
+ if (timer > 5) {
25639
+ console.error("等待请求失败:", req.url, timer);
25640
+ clearInterval(detect);
25641
+ resolve(false);
25598
25642
  }
25599
25643
  }, 1000);
25600
25644
  });
25645
+ if (!res) {
25646
+ return wrapperError2({
25647
+ code: 500,
25648
+ message: "请求取消,可能是因为用户未登录或者token过期",
25649
+ req
25650
+ });
25651
+ }
25601
25652
  }
25602
25653
  return _adapter(req).then(async (res) => {
25603
25654
  try {
@@ -25605,15 +25656,16 @@ class Query2 {
25605
25656
  return await _afterResponse(res, {
25606
25657
  req,
25607
25658
  res,
25608
- fetch: adapter3
25659
+ fetch: adapter22
25609
25660
  });
25610
25661
  }
25611
25662
  return res;
25612
25663
  } catch (e) {
25613
- console.error("request afterFn error", e, req);
25664
+ console.error("请求在响应后处理时发生错误", e, req);
25614
25665
  return wrapperError2({
25615
25666
  code: 500,
25616
- message: "api request afterFn error"
25667
+ message: "请求在响应后处理时发生错误",
25668
+ req
25617
25669
  });
25618
25670
  }
25619
25671
  });
@@ -25675,13 +25727,8 @@ class BaseQuery {
25675
25727
  }
25676
25728
  }
25677
25729
 
25678
- // node_modules/.pnpm/@kevisual+query-login@0.0.7_@kevisual+query@0.0.40/node_modules/@kevisual/query-login/dist/query-login-node.js
25679
- import { homedir } from "os";
25680
- import { join, dirname } from "path";
25681
- import fs4 from "fs";
25682
- import { readFileSync, writeFileSync, accessSync } from "fs";
25683
- import { readFile, writeFile, unlink, mkdir } from "fs/promises";
25684
- var LoginCacheStore = class {
25730
+ // node_modules/.pnpm/@kevisual+api@0.0.52_@types+react@19.2.10_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@kevisual/api/query/query-login/login-cache.ts
25731
+ class LoginCacheStore {
25685
25732
  cache;
25686
25733
  name;
25687
25734
  cacheData;
@@ -25739,6 +25786,8 @@ var LoginCacheStore = class {
25739
25786
  this.cacheData.id = user.id;
25740
25787
  this.cacheData.accessToken = user.accessToken;
25741
25788
  this.cacheData.refreshToken = user.refreshToken;
25789
+ this.cacheData.accessTokenExpiresIn = user.accessTokenExpiresIn;
25790
+ this.cacheData.createdAt = user.createdAt;
25742
25791
  await this.setValue(this.cacheData);
25743
25792
  }
25744
25793
  getCurrentUser() {
@@ -25776,268 +25825,738 @@ var LoginCacheStore = class {
25776
25825
  this.cacheData.refreshToken = undefined;
25777
25826
  await this.setValue(this.cacheData);
25778
25827
  }
25779
- };
25780
- var QueryLogin = class extends BaseQuery {
25781
- cacheStore;
25782
- isBrowser;
25783
- load;
25784
- storage;
25785
- onLoad;
25786
- constructor(opts) {
25787
- super({
25788
- query: opts?.query || new Query2
25789
- });
25790
- this.cacheStore = new LoginCacheStore({ name: "login", cache: opts.cache });
25791
- this.isBrowser = opts?.isBrowser ?? true;
25792
- this.init();
25793
- this.onLoad = opts?.onLoad;
25794
- this.storage = opts?.storage || localStorage;
25795
- }
25796
- setQuery(query) {
25797
- this.query = query;
25798
- }
25799
- async init() {
25800
- await this.cacheStore.init();
25801
- this.load = true;
25802
- this.onLoad?.();
25803
- }
25804
- async post(data, opts) {
25805
- try {
25806
- return this.query.post({ path: "user", ...data }, opts);
25807
- } catch (error) {
25808
- console.log("error", error);
25809
- return {
25810
- code: 400
25811
- };
25812
- }
25813
- }
25814
- async login(data) {
25815
- const res = await this.post({ key: "login", ...data });
25816
- if (res.code === 200) {
25817
- const { accessToken, refreshToken } = res?.data || {};
25818
- this.storage.setItem("token", accessToken || "");
25819
- await this.beforeSetLoginUser({ accessToken, refreshToken });
25820
- }
25821
- return res;
25822
- }
25823
- async loginByCode(data) {
25824
- const res = await this.post({ path: "sms", key: "login", data });
25825
- if (res.code === 200) {
25826
- const { accessToken, refreshToken } = res?.data || {};
25827
- this.storage.setItem("token", accessToken || "");
25828
- await this.beforeSetLoginUser({ accessToken, refreshToken });
25828
+ }
25829
+
25830
+ // node_modules/.pnpm/@kevisual+load@0.0.6/node_modules/@kevisual/load/dist/load.js
25831
+ function getDefaultExportFromCjs3(x) {
25832
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
25833
+ }
25834
+ var eventemitter33 = { exports: {} };
25835
+ var hasRequiredEventemitter33;
25836
+ function requireEventemitter33() {
25837
+ if (hasRequiredEventemitter33)
25838
+ return eventemitter33.exports;
25839
+ hasRequiredEventemitter33 = 1;
25840
+ (function(module) {
25841
+ var has = Object.prototype.hasOwnProperty, prefix = "~";
25842
+ function Events() {}
25843
+ if (Object.create) {
25844
+ Events.prototype = Object.create(null);
25845
+ if (!new Events().__proto__)
25846
+ prefix = false;
25829
25847
  }
25830
- return res;
25831
- }
25832
- async setLoginToken(token) {
25833
- const { accessToken, refreshToken } = token;
25834
- this.storage.setItem("token", accessToken || "");
25835
- await this.beforeSetLoginUser({ accessToken, refreshToken });
25836
- }
25837
- async loginByWechat(data) {
25838
- const res = await this.post({ path: "wx", key: "open-login", code: data.code });
25839
- if (res.code === 200) {
25840
- const { accessToken, refreshToken } = res?.data || {};
25841
- this.storage.setItem("token", accessToken || "");
25842
- await this.beforeSetLoginUser({ accessToken, refreshToken });
25848
+ function EE(fn, context, once) {
25849
+ this.fn = fn;
25850
+ this.context = context;
25851
+ this.once = once || false;
25843
25852
  }
25844
- return res;
25845
- }
25846
- async checkWechat({ onSuccess, onError }) {
25847
- const url = new URL(window.location.href);
25848
- const code = url.searchParams.get("code");
25849
- const state = url.searchParams.get("state");
25850
- if (code && state) {
25851
- const res = await this.loginByWechat({ code });
25852
- if (res.code === 200) {
25853
- onSuccess?.(res.data);
25854
- } else {
25855
- onError?.(res);
25853
+ function addListener(emitter, event, fn, context, once) {
25854
+ if (typeof fn !== "function") {
25855
+ throw new TypeError("The listener must be a function");
25856
25856
  }
25857
+ var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
25858
+ if (!emitter._events[evt])
25859
+ emitter._events[evt] = listener, emitter._eventsCount++;
25860
+ else if (!emitter._events[evt].fn)
25861
+ emitter._events[evt].push(listener);
25862
+ else
25863
+ emitter._events[evt] = [emitter._events[evt], listener];
25864
+ return emitter;
25857
25865
  }
25858
- }
25859
- async beforeSetLoginUser({ accessToken, refreshToken, check401 }) {
25860
- if (accessToken && refreshToken) {
25861
- const resUser = await this.getMe(accessToken, check401);
25862
- if (resUser.code === 200) {
25863
- const user = resUser.data;
25864
- if (user) {
25865
- this.cacheStore.setLoginUser({
25866
- user,
25867
- id: user.id,
25868
- accessToken,
25869
- refreshToken
25870
- });
25871
- } else {
25872
- console.error("登录失败");
25873
- }
25874
- }
25866
+ function clearEvent(emitter, evt) {
25867
+ if (--emitter._eventsCount === 0)
25868
+ emitter._events = new Events;
25869
+ else
25870
+ delete emitter._events[evt];
25875
25871
  }
25876
- }
25877
- async queryRefreshToken(refreshToken) {
25878
- const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
25879
- let data = { refreshToken: _refreshToken };
25880
- if (!_refreshToken) {
25881
- await this.cacheStore.clearCurrentUser();
25882
- return {
25883
- code: 401,
25884
- message: "请先登录",
25885
- data: {}
25886
- };
25872
+ function EventEmitter3() {
25873
+ this._events = new Events;
25874
+ this._eventsCount = 0;
25887
25875
  }
25888
- return this.post({ key: "refreshToken", data }, {
25889
- afterResponse: async (response, ctx) => {
25890
- setBaseResponse(response);
25891
- return response;
25876
+ EventEmitter3.prototype.eventNames = function eventNames() {
25877
+ var names = [], events, name;
25878
+ if (this._eventsCount === 0)
25879
+ return names;
25880
+ for (name in events = this._events) {
25881
+ if (has.call(events, name))
25882
+ names.push(prefix ? name.slice(1) : name);
25892
25883
  }
25893
- });
25894
- }
25895
- async afterCheck401ToRefreshToken(response, ctx, refetch) {
25896
- const that = this;
25897
- if (response?.code === 401) {
25898
- const hasRefreshToken = await that.cacheStore.getRefreshToken();
25899
- if (hasRefreshToken) {
25900
- const res = await that.queryRefreshToken(hasRefreshToken);
25901
- if (res.code === 200) {
25902
- const { accessToken, refreshToken } = res?.data || {};
25903
- that.storage.setItem("token", accessToken || "");
25904
- await that.beforeSetLoginUser({ accessToken, refreshToken, check401: false });
25905
- if (refetch && ctx && ctx.req && ctx.req.url && ctx.fetch) {
25906
- await new Promise((resolve) => setTimeout(resolve, 1500));
25907
- const url = ctx.req?.url;
25908
- const body = ctx.req?.body;
25909
- const headers = ctx.req?.headers;
25910
- const res2 = await ctx.fetch(url, {
25911
- method: "POST",
25912
- body,
25913
- headers: { ...headers, Authorization: `Bearer ${accessToken}` }
25914
- });
25915
- setBaseResponse(res2);
25916
- return res2;
25884
+ if (Object.getOwnPropertySymbols) {
25885
+ return names.concat(Object.getOwnPropertySymbols(events));
25886
+ }
25887
+ return names;
25888
+ };
25889
+ EventEmitter3.prototype.listeners = function listeners(event) {
25890
+ var evt = prefix ? prefix + event : event, handlers = this._events[evt];
25891
+ if (!handlers)
25892
+ return [];
25893
+ if (handlers.fn)
25894
+ return [handlers.fn];
25895
+ for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
25896
+ ee[i] = handlers[i].fn;
25897
+ }
25898
+ return ee;
25899
+ };
25900
+ EventEmitter3.prototype.listenerCount = function listenerCount(event) {
25901
+ var evt = prefix ? prefix + event : event, listeners = this._events[evt];
25902
+ if (!listeners)
25903
+ return 0;
25904
+ if (listeners.fn)
25905
+ return 1;
25906
+ return listeners.length;
25907
+ };
25908
+ EventEmitter3.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
25909
+ var evt = prefix ? prefix + event : event;
25910
+ if (!this._events[evt])
25911
+ return false;
25912
+ var listeners = this._events[evt], len = arguments.length, args, i;
25913
+ if (listeners.fn) {
25914
+ if (listeners.once)
25915
+ this.removeListener(event, listeners.fn, undefined, true);
25916
+ switch (len) {
25917
+ case 1:
25918
+ return listeners.fn.call(listeners.context), true;
25919
+ case 2:
25920
+ return listeners.fn.call(listeners.context, a1), true;
25921
+ case 3:
25922
+ return listeners.fn.call(listeners.context, a1, a2), true;
25923
+ case 4:
25924
+ return listeners.fn.call(listeners.context, a1, a2, a3), true;
25925
+ case 5:
25926
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
25927
+ case 6:
25928
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
25929
+ }
25930
+ for (i = 1, args = new Array(len - 1);i < len; i++) {
25931
+ args[i - 1] = arguments[i];
25932
+ }
25933
+ listeners.fn.apply(listeners.context, args);
25934
+ } else {
25935
+ var length = listeners.length, j;
25936
+ for (i = 0;i < length; i++) {
25937
+ if (listeners[i].once)
25938
+ this.removeListener(event, listeners[i].fn, undefined, true);
25939
+ switch (len) {
25940
+ case 1:
25941
+ listeners[i].fn.call(listeners[i].context);
25942
+ break;
25943
+ case 2:
25944
+ listeners[i].fn.call(listeners[i].context, a1);
25945
+ break;
25946
+ case 3:
25947
+ listeners[i].fn.call(listeners[i].context, a1, a2);
25948
+ break;
25949
+ case 4:
25950
+ listeners[i].fn.call(listeners[i].context, a1, a2, a3);
25951
+ break;
25952
+ default:
25953
+ if (!args)
25954
+ for (j = 1, args = new Array(len - 1);j < len; j++) {
25955
+ args[j - 1] = arguments[j];
25956
+ }
25957
+ listeners[i].fn.apply(listeners[i].context, args);
25917
25958
  }
25918
- } else {
25919
- that.storage.removeItem("token");
25920
- await that.cacheStore.clearCurrentUser();
25921
25959
  }
25922
- return res;
25923
25960
  }
25961
+ return true;
25962
+ };
25963
+ EventEmitter3.prototype.on = function on(event, fn, context) {
25964
+ return addListener(this, event, fn, context, false);
25965
+ };
25966
+ EventEmitter3.prototype.once = function once(event, fn, context) {
25967
+ return addListener(this, event, fn, context, true);
25968
+ };
25969
+ EventEmitter3.prototype.removeListener = function removeListener(event, fn, context, once) {
25970
+ var evt = prefix ? prefix + event : event;
25971
+ if (!this._events[evt])
25972
+ return this;
25973
+ if (!fn) {
25974
+ clearEvent(this, evt);
25975
+ return this;
25976
+ }
25977
+ var listeners = this._events[evt];
25978
+ if (listeners.fn) {
25979
+ if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
25980
+ clearEvent(this, evt);
25981
+ }
25982
+ } else {
25983
+ for (var i = 0, events = [], length = listeners.length;i < length; i++) {
25984
+ if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
25985
+ events.push(listeners[i]);
25986
+ }
25987
+ }
25988
+ if (events.length)
25989
+ this._events[evt] = events.length === 1 ? events[0] : events;
25990
+ else
25991
+ clearEvent(this, evt);
25992
+ }
25993
+ return this;
25994
+ };
25995
+ EventEmitter3.prototype.removeAllListeners = function removeAllListeners(event) {
25996
+ var evt;
25997
+ if (event) {
25998
+ evt = prefix ? prefix + event : event;
25999
+ if (this._events[evt])
26000
+ clearEvent(this, evt);
26001
+ } else {
26002
+ this._events = new Events;
26003
+ this._eventsCount = 0;
26004
+ }
26005
+ return this;
26006
+ };
26007
+ EventEmitter3.prototype.off = EventEmitter3.prototype.removeListener;
26008
+ EventEmitter3.prototype.addListener = EventEmitter3.prototype.on;
26009
+ EventEmitter3.prefixed = prefix;
26010
+ EventEmitter3.EventEmitter = EventEmitter3;
26011
+ {
26012
+ module.exports = EventEmitter3;
25924
26013
  }
25925
- return response;
25926
- }
25927
- async run401Action(response, ctx, opts) {
25928
- const that = this;
25929
- const refetch = opts?.refetch ?? false;
25930
- if (response?.code === 401) {
25931
- if (that.query.stop === true) {
25932
- return { code: 500, success: false, message: "refresh token loading..." };
26014
+ })(eventemitter33);
26015
+ return eventemitter33.exports;
26016
+ }
26017
+ var eventemitter3Exports3 = requireEventemitter33();
26018
+ var EventEmitter3 = /* @__PURE__ */ getDefaultExportFromCjs3(eventemitter3Exports3);
26019
+ var reRunFn3 = (promiseOpts) => {
26020
+ const timeout = promiseOpts.timeout || 5 * 60 * 1000;
26021
+ const interval = promiseOpts.interval || 1000;
26022
+ const checkSuccess = promiseOpts?.checkSuccess || (() => true);
26023
+ const signal = promiseOpts.signal;
26024
+ return new Promise(async (resolve, reject) => {
26025
+ let intervalId;
26026
+ let timeoutId = setTimeout(() => {
26027
+ clearTimeout(intervalId);
26028
+ resolve({
26029
+ code: 500,
26030
+ message: "timeout"
26031
+ });
26032
+ }, timeout);
26033
+ const fn = promiseOpts.fn || (() => true);
26034
+ const runFn = async () => {
26035
+ if (signal?.aborted) {
26036
+ clearInterval(intervalId);
26037
+ clearTimeout(timeoutId);
26038
+ return resolve({
26039
+ code: 499,
26040
+ message: "operation cancelled"
26041
+ });
25933
26042
  }
25934
- that.query.stop = true;
25935
- const res = await that.afterCheck401ToRefreshToken(response, ctx, refetch);
25936
- that.query.stop = false;
25937
- opts?.afterCheck?.(res);
25938
- if (res.code === 401) {
25939
- opts?.afterAlso401?.(res);
26043
+ const res = await fn();
26044
+ if (!!checkSuccess(res)) {
26045
+ clearInterval(intervalId);
26046
+ clearTimeout(timeoutId);
26047
+ resolve({
26048
+ code: 200,
26049
+ data: res
26050
+ });
26051
+ } else {
26052
+ setTimeout(() => {
26053
+ runFn();
26054
+ }, interval);
25940
26055
  }
25941
- return res;
25942
- } else {
25943
- return response;
26056
+ };
26057
+ if (signal) {
26058
+ signal.addEventListener("abort", () => {
26059
+ clearInterval(intervalId);
26060
+ clearTimeout(timeoutId);
26061
+ resolve({
26062
+ code: 499,
26063
+ message: "operation cancelled"
26064
+ });
26065
+ });
25944
26066
  }
26067
+ runFn();
26068
+ });
26069
+ };
26070
+
26071
+ class BaseLoad3 {
26072
+ modules = new Map;
26073
+ event;
26074
+ loading;
26075
+ static reRunFn = reRunFn3;
26076
+ timeout = 5 * 60 * 1000;
26077
+ constructor() {
26078
+ this.event = new EventEmitter3;
26079
+ this.loading = false;
25945
26080
  }
25946
- async getMe(token, check401 = true) {
25947
- const _token = token || this.storage.getItem("token");
25948
- const that = this;
25949
- return that.post({ key: "me" }, {
25950
- beforeRequest: async (config) => {
25951
- if (config.headers) {
25952
- config.headers["Authorization"] = `Bearer ${_token}`;
26081
+ listenKey(key, listenOpts) {
26082
+ const timeout = listenOpts?.timeout ?? this.timeout;
26083
+ return new Promise((resolve) => {
26084
+ const timeoutId = setTimeout(() => {
26085
+ this.event.removeListener(key, onEvent);
26086
+ resolve({
26087
+ code: 500,
26088
+ message: "timeout"
26089
+ });
26090
+ }, timeout);
26091
+ const onEvent = (error) => {
26092
+ clearTimeout(timeoutId);
26093
+ if (error) {
26094
+ return resolve({
26095
+ code: 500,
26096
+ message: error
26097
+ });
25953
26098
  }
25954
- if (!_token) {}
25955
- return config;
25956
- },
25957
- afterResponse: async (response, ctx) => {
25958
- if (response?.code === 401 && check401 && !token) {
25959
- return await that.afterCheck401ToRefreshToken(response, ctx);
26099
+ const data = this.modules.get(key);
26100
+ if (data?.loadSuccessClear) {
26101
+ this.remove(key);
25960
26102
  }
25961
- return response;
25962
- }
26103
+ resolve({
26104
+ code: 200,
26105
+ data: data?.modules
26106
+ });
26107
+ };
26108
+ this.event.once(key, onEvent);
25963
26109
  });
25964
26110
  }
25965
- async checkLocalUser() {
25966
- const user = await this.cacheStore.getCurrentUser();
25967
- if (user) {
25968
- return user;
26111
+ async hasLoaded(key, hasLoadOpts) {
26112
+ if (!key) {
26113
+ return {
26114
+ code: 404,
26115
+ message: "key is required"
26116
+ };
25969
26117
  }
25970
- return null;
26118
+ const has = this.modules.has(key);
26119
+ if (!has) {
26120
+ const isExist = hasLoadOpts?.isExist ?? true;
26121
+ const timeout = hasLoadOpts?.timeout ?? this.timeout;
26122
+ if (isExist) {
26123
+ return await this.listenKey(key, { timeout });
26124
+ }
26125
+ return {
26126
+ code: 404
26127
+ };
26128
+ }
26129
+ const data = this.modules.get(key);
26130
+ if (data?.status === "loaded") {
26131
+ return {
26132
+ code: 200,
26133
+ data: data.modules
26134
+ };
26135
+ }
26136
+ if (data?.status === "loading") {
26137
+ return await this.listenKey(key, { timeout: hasLoadOpts?.timeout ?? this.timeout });
26138
+ }
26139
+ if (data?.status === "error") {
26140
+ return {
26141
+ code: 500,
26142
+ message: "load error"
26143
+ };
26144
+ }
26145
+ if (data?.status === "cancel") {
26146
+ return {
26147
+ code: 499,
26148
+ message: "operation cancelled"
26149
+ };
26150
+ }
26151
+ return {
26152
+ code: 404
26153
+ };
25971
26154
  }
25972
- async checkLocalToken() {
25973
- const token = this.storage.getItem("token");
25974
- return !!token;
26155
+ async loadFn(loadContent, opts) {
26156
+ const key = opts.key;
26157
+ if (!key) {
26158
+ return {
26159
+ code: 404,
26160
+ message: "key is required"
26161
+ };
26162
+ }
26163
+ const newModule = {
26164
+ key: opts.key,
26165
+ status: "loading",
26166
+ loading: true,
26167
+ loadSuccessClear: opts.loadSuccessClear ?? true
26168
+ };
26169
+ let errorMessage = "";
26170
+ try {
26171
+ const isReRun = opts.isReRun ?? false;
26172
+ let res;
26173
+ if (!isReRun) {
26174
+ this.modules.set(key, newModule);
26175
+ res = await loadContent();
26176
+ } else {
26177
+ newModule.controller = new AbortController;
26178
+ const signal = newModule.controller.signal;
26179
+ this.modules.set(key, newModule);
26180
+ const data = await reRunFn3({
26181
+ timeout: opts.timeout,
26182
+ interval: opts.interval,
26183
+ checkSuccess: opts.checkSuccess,
26184
+ fn: loadContent,
26185
+ signal
26186
+ });
26187
+ newModule.controller = null;
26188
+ if (data.code === 499) {
26189
+ newModule.status = "cancel";
26190
+ return {
26191
+ code: 499,
26192
+ message: "operation cancelled"
26193
+ };
26194
+ }
26195
+ if (data.code !== 200) {
26196
+ throw new Error(data.message);
26197
+ }
26198
+ res = data.data;
26199
+ }
26200
+ newModule.modules = res;
26201
+ newModule.status = "loaded";
26202
+ return {
26203
+ code: 200,
26204
+ data: res
26205
+ };
26206
+ } catch (error) {
26207
+ errorMessage = error.message;
26208
+ newModule.status = "error";
26209
+ return {
26210
+ code: 500,
26211
+ message: error
26212
+ };
26213
+ } finally {
26214
+ newModule.loading = false;
26215
+ this.modules.set(opts.key, newModule);
26216
+ if (!errorMessage) {
26217
+ this.event.emit(opts.key);
26218
+ } else {
26219
+ this.event.emit(opts.key, errorMessage);
26220
+ }
26221
+ }
25975
26222
  }
25976
- async postSwitchUser(username) {
25977
- return this.post({ key: "switchCheck", data: { username } });
26223
+ async load(loadContent, opts) {
26224
+ this.loading = true;
26225
+ const key = opts.key;
26226
+ if (!key) {
26227
+ return {
26228
+ code: 404,
26229
+ message: "key is required"
26230
+ };
26231
+ }
26232
+ if (opts?.force) {
26233
+ this.remove(key);
26234
+ }
26235
+ const has = this.modules.has(key);
26236
+ if (has) {
26237
+ return await this.hasLoaded(key);
26238
+ }
26239
+ if (typeof loadContent === "function") {
26240
+ return this.loadFn(loadContent, opts);
26241
+ }
26242
+ console.error("loadContent is not a function and not has loaded");
25978
26243
  }
25979
- async switchUser(username) {
25980
- const localUserList = await this.cacheStore.getCurrentUserList();
25981
- const user = localUserList.find((userItem) => userItem.user.username === username);
25982
- if (user) {
25983
- this.storage.setItem("token", user.accessToken || "");
25984
- await this.beforeSetLoginUser({ accessToken: user.accessToken, refreshToken: user.refreshToken });
26244
+ remove(key) {
26245
+ const has = this.modules.has(key);
26246
+ if (has) {
26247
+ this.checkRemoveController(key);
26248
+ this.modules.delete(key);
26249
+ }
26250
+ }
26251
+ emitLoaded(key) {
26252
+ this.checkRemoveController(key);
26253
+ this.event.emit(key);
26254
+ }
26255
+ setModule(key, data, loadData) {
26256
+ const newModule = {
26257
+ key,
26258
+ status: "loaded",
26259
+ loading: false,
26260
+ modules: data || {},
26261
+ ...loadData
26262
+ };
26263
+ this.modules.set(key, newModule);
26264
+ this.emitLoaded(key);
26265
+ return newModule;
26266
+ }
26267
+ cancel(key) {
26268
+ this.checkRemoveController(key);
26269
+ }
26270
+ checkRemoveController(key) {
26271
+ const data = this.modules.get(key);
26272
+ if (data?.controller) {
26273
+ data.controller?.abort?.();
26274
+ delete data.controller;
26275
+ this.modules.set(key, data);
26276
+ }
26277
+ }
26278
+ }
26279
+
26280
+ // node_modules/.pnpm/@kevisual+api@0.0.52_@types+react@19.2.10_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@kevisual/api/query/query-login/query-login.ts
26281
+ class QueryLogin extends BaseQuery {
26282
+ cacheStore;
26283
+ isBrowser;
26284
+ load;
26285
+ storage;
26286
+ onLoad;
26287
+ constructor(opts) {
26288
+ super({
26289
+ query: opts?.query || new Query2
26290
+ });
26291
+ this.cacheStore = new LoginCacheStore({ name: "login", cache: opts?.cache });
26292
+ this.isBrowser = opts?.isBrowser ?? true;
26293
+ this.init();
26294
+ this.onLoad = opts?.onLoad;
26295
+ this.storage = opts?.storage || globalThis?.localStorage;
26296
+ }
26297
+ setQuery(query) {
26298
+ this.query = query;
26299
+ }
26300
+ async init() {
26301
+ await this.cacheStore.init();
26302
+ this.load = true;
26303
+ this.onLoad?.();
26304
+ }
26305
+ async post(data, opts) {
26306
+ try {
26307
+ return this.query.post({ path: "user", ...data }, opts);
26308
+ } catch (error) {
26309
+ console.log("error", error);
25985
26310
  return {
25986
- code: 200,
25987
- data: {
25988
- accessToken: user.accessToken,
25989
- refreshToken: user.refreshToken
25990
- },
25991
- success: true,
25992
- message: "切换用户成功"
26311
+ code: 400
25993
26312
  };
25994
26313
  }
25995
- const res = await this.postSwitchUser(username);
26314
+ }
26315
+ async login(data) {
26316
+ const res = await this.post({ key: "login", ...data });
25996
26317
  if (res.code === 200) {
25997
- const { accessToken, refreshToken } = res?.data || {};
26318
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
25998
26319
  this.storage.setItem("token", accessToken || "");
25999
- await this.beforeSetLoginUser({ accessToken, refreshToken });
26320
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26000
26321
  }
26001
26322
  return res;
26002
26323
  }
26003
- async logout() {
26004
- this.storage.removeItem("token");
26005
- const users = await this.cacheStore.getCurrentUserList();
26006
- const tokens = users.map((user) => {
26007
- return user?.accessToken;
26008
- }).filter(Boolean);
26009
- this.cacheStore.delValue();
26010
- return this.post({ key: "logout", data: { tokens } });
26324
+ async loginByCode(data) {
26325
+ const res = await this.post({ path: "sms", key: "login", data });
26326
+ if (res.code === 200) {
26327
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
26328
+ this.storage.setItem("token", accessToken || "");
26329
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26330
+ }
26331
+ return res;
26011
26332
  }
26012
- async hasUser(username) {
26013
- const that = this;
26014
- return this.post({
26015
- path: "org",
26016
- key: "hasUser",
26017
- data: {
26018
- username
26019
- }
26020
- }, {
26021
- afterResponse: async (response, ctx) => {
26022
- if (response?.code === 401) {
26023
- const res = await that.afterCheck401ToRefreshToken(response, ctx, true);
26024
- return res;
26025
- }
26026
- return response;
26027
- }
26028
- });
26333
+ async setLoginToken(token) {
26334
+ const { accessToken, refreshToken, accessTokenExpiresIn } = token;
26335
+ this.storage.setItem("token", accessToken || "");
26336
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26029
26337
  }
26030
- async checkLoginStatus(token) {
26031
- const res = await this.post({
26032
- path: "user",
26033
- key: "checkLoginStatus",
26034
- loginToken: token
26035
- });
26338
+ async loginByWechat(data) {
26339
+ const res = await this.post({ path: "wx", key: "open-login", code: data.code });
26036
26340
  if (res.code === 200) {
26037
- const accessToken = res.data?.accessToken;
26341
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
26038
26342
  this.storage.setItem("token", accessToken || "");
26039
- await this.beforeSetLoginUser({ accessToken, refreshToken: res.data?.refreshToken });
26040
- return res;
26343
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26344
+ }
26345
+ return res;
26346
+ }
26347
+ async checkWechat({ onSuccess, onError }) {
26348
+ const url = new URL(window.location.href);
26349
+ const code = url.searchParams.get("code");
26350
+ const state = url.searchParams.get("state");
26351
+ if (code && state) {
26352
+ const res = await this.loginByWechat({ code });
26353
+ if (res.code === 200) {
26354
+ onSuccess?.(res.data);
26355
+ } else {
26356
+ onError?.(res);
26357
+ }
26358
+ }
26359
+ }
26360
+ async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }) {
26361
+ if (accessToken && refreshToken) {
26362
+ const resUser = await this.getMe(accessToken, check401);
26363
+ if (resUser.code === 200) {
26364
+ const user = resUser.data;
26365
+ if (user) {
26366
+ this.cacheStore.setLoginUser({
26367
+ user,
26368
+ id: user.id,
26369
+ accessToken,
26370
+ refreshToken,
26371
+ accessTokenExpiresIn,
26372
+ createdAt: Date.now()
26373
+ });
26374
+ } else {
26375
+ console.error("登录失败");
26376
+ }
26377
+ }
26378
+ }
26379
+ }
26380
+ async queryRefreshToken(refreshToken) {
26381
+ const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
26382
+ let data = { refreshToken: _refreshToken };
26383
+ if (!_refreshToken) {
26384
+ await this.cacheStore.clearCurrentUser();
26385
+ return {
26386
+ code: 401,
26387
+ message: "请先登录",
26388
+ data: {}
26389
+ };
26390
+ }
26391
+ return this.post({ key: "refreshToken", data }, {
26392
+ afterResponse: async (response, ctx) => {
26393
+ return response;
26394
+ }
26395
+ });
26396
+ }
26397
+ async afterCheck401ToRefreshToken(response, ctx, refetch) {
26398
+ const that = this;
26399
+ if (response?.code === 401) {
26400
+ const hasRefreshToken = await that.cacheStore.getRefreshToken();
26401
+ if (hasRefreshToken) {
26402
+ const res = await that.queryRefreshToken(hasRefreshToken);
26403
+ if (res.code === 200) {
26404
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
26405
+ that.storage.setItem("token", accessToken || "");
26406
+ await that.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
26407
+ if (refetch && ctx && ctx.req && ctx.req.url && ctx.fetch) {
26408
+ await new Promise((resolve) => setTimeout(resolve, 1500));
26409
+ const url = ctx.req?.url;
26410
+ const body = ctx.req?.body;
26411
+ const headers = ctx.req?.headers;
26412
+ const res2 = await ctx.fetch(url, {
26413
+ method: "POST",
26414
+ body,
26415
+ headers: { ...headers, Authorization: `Bearer ${accessToken}` }
26416
+ });
26417
+ return res2;
26418
+ }
26419
+ } else {
26420
+ that.storage.removeItem("token");
26421
+ await that.cacheStore.clearCurrentUser();
26422
+ }
26423
+ return res;
26424
+ }
26425
+ }
26426
+ return response;
26427
+ }
26428
+ async run401Action(response, ctx, opts) {
26429
+ const that = this;
26430
+ const refetch = opts?.refetch ?? false;
26431
+ if (response?.code === 401) {
26432
+ if (that.query.stop === true) {
26433
+ return { code: 500, success: false, message: "refresh token loading..." };
26434
+ }
26435
+ that.query.stop = true;
26436
+ const res = await that.afterCheck401ToRefreshToken(response, ctx, refetch);
26437
+ that.query.stop = false;
26438
+ opts?.afterCheck?.(res);
26439
+ if (res.code === 401) {
26440
+ opts?.afterAlso401?.(res);
26441
+ }
26442
+ return res;
26443
+ } else {
26444
+ return response;
26445
+ }
26446
+ }
26447
+ async getMe(token, check401 = true) {
26448
+ const _token = token || this.storage.getItem("token");
26449
+ const that = this;
26450
+ return that.post({ key: "me" }, {
26451
+ beforeRequest: async (config) => {
26452
+ if (config.headers) {
26453
+ config.headers["Authorization"] = `Bearer ${_token}`;
26454
+ }
26455
+ if (!_token) {
26456
+ return false;
26457
+ }
26458
+ return config;
26459
+ },
26460
+ afterResponse: async (response, ctx) => {
26461
+ if (response?.code === 401 && check401 && !token) {
26462
+ return await that.afterCheck401ToRefreshToken(response, ctx);
26463
+ }
26464
+ return response;
26465
+ }
26466
+ });
26467
+ }
26468
+ async checkLocalUser() {
26469
+ const user = await this.cacheStore.getCurrentUser();
26470
+ if (user) {
26471
+ return user;
26472
+ }
26473
+ return null;
26474
+ }
26475
+ async checkLocalToken() {
26476
+ const token = this.storage.getItem("token");
26477
+ return !!token;
26478
+ }
26479
+ async getToken() {
26480
+ const token = this.storage.getItem("token");
26481
+ return token || "";
26482
+ }
26483
+ async beforeRequest(opts = {}) {
26484
+ const token = this.storage.getItem("token");
26485
+ if (token) {
26486
+ opts.headers = { ...opts.headers, Authorization: `Bearer ${token}` };
26487
+ }
26488
+ return opts;
26489
+ }
26490
+ async postSwitchUser(username) {
26491
+ return this.post({ key: "switchCheck", data: { username } });
26492
+ }
26493
+ async switchUser(username) {
26494
+ const localUserList = await this.cacheStore.getCurrentUserList();
26495
+ const user = localUserList.find((userItem) => userItem.user.username === username);
26496
+ if (user) {
26497
+ this.storage.setItem("token", user.accessToken || "");
26498
+ await this.beforeSetLoginUser({
26499
+ accessToken: user.accessToken,
26500
+ refreshToken: user.refreshToken,
26501
+ accessTokenExpiresIn: user.accessTokenExpiresIn
26502
+ });
26503
+ return {
26504
+ code: 200,
26505
+ data: {
26506
+ accessToken: user.accessToken,
26507
+ refreshToken: user.refreshToken,
26508
+ accessTokenExpiresIn: user.accessTokenExpiresIn
26509
+ },
26510
+ success: true,
26511
+ message: "切换用户成功"
26512
+ };
26513
+ }
26514
+ const res = await this.postSwitchUser(username);
26515
+ if (res.code === 200) {
26516
+ const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
26517
+ this.storage.setItem("token", accessToken || "");
26518
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26519
+ }
26520
+ return res;
26521
+ }
26522
+ async logout() {
26523
+ this.storage.removeItem("token");
26524
+ const users = await this.cacheStore.getCurrentUserList();
26525
+ const tokens = users.map((user) => {
26526
+ return user?.accessToken;
26527
+ }).filter(Boolean);
26528
+ this.cacheStore.delValue();
26529
+ return this.post({ key: "logout", data: { tokens } });
26530
+ }
26531
+ async hasUser(username) {
26532
+ const that = this;
26533
+ return this.post({
26534
+ path: "org",
26535
+ key: "hasUser",
26536
+ data: {
26537
+ username
26538
+ }
26539
+ }, {
26540
+ afterResponse: async (response, ctx) => {
26541
+ if (response?.code === 401) {
26542
+ const res = await that.afterCheck401ToRefreshToken(response, ctx, true);
26543
+ return res;
26544
+ }
26545
+ return response;
26546
+ }
26547
+ });
26548
+ }
26549
+ async checkLoginStatus(token) {
26550
+ const res = await this.post({
26551
+ path: "user",
26552
+ key: "checkLoginStatus",
26553
+ loginToken: token
26554
+ });
26555
+ if (res.code === 200) {
26556
+ const { accessTokenExpiresIn, accessToken, refreshToken } = res.data;
26557
+ this.storage.setItem("token", accessToken || "");
26558
+ await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
26559
+ return res;
26041
26560
  }
26042
26561
  return false;
26043
26562
  }
@@ -26045,14 +26564,60 @@ var QueryLogin = class extends BaseQuery {
26045
26564
  const randomId = Math.random().toString(36).substring(2, 15);
26046
26565
  const timestamp = Date.now();
26047
26566
  const tokenSecret = "xiao" + randomId;
26048
- const sign = MD5(`${tokenSecret}${timestamp}`).toString();
26049
- const token = jsonwebtoken.sign({ randomId, timestamp, sign }, tokenSecret, {
26050
- expiresIn: 60 * 10
26051
- });
26567
+ let sign = "";
26568
+ if (MD5) {
26569
+ sign = MD5(`${tokenSecret}${timestamp}`).toString();
26570
+ }
26571
+ let token = "";
26572
+ if (jsonwebtoken) {
26573
+ token = jsonwebtoken.sign({ randomId, timestamp, sign }, tokenSecret, {
26574
+ expiresIn: 60 * 10
26575
+ });
26576
+ } else {
26577
+ token = tokenSecret;
26578
+ }
26052
26579
  const url = `${baseURL}/api/router?path=user&key=webLogin&p&loginToken=${token}&sign=${sign}&randomId=${randomId}`;
26053
26580
  return { url, token, tokenSecret };
26054
26581
  }
26055
- };
26582
+ async pollLoginStatus(data) {
26583
+ const token = data.token;
26584
+ const load2 = new BaseLoad3;
26585
+ load2.load(async () => {
26586
+ const res2 = await this.checkLoginStatus(token);
26587
+ if (res2.code === 500) {
26588
+ load2.cancel("check-login-status");
26589
+ }
26590
+ return res2;
26591
+ }, {
26592
+ key: "check-login-status",
26593
+ isReRun: true,
26594
+ checkSuccess: (data2) => {
26595
+ return data2?.code === 200;
26596
+ }
26597
+ });
26598
+ const res = await load2.hasLoaded("check-login-status", {
26599
+ timeout: 60 * 3 * 1000
26600
+ });
26601
+ if (res.code === 200 && res.data?.code === 200) {
26602
+ try {
26603
+ console.log("网页登录成功");
26604
+ return true;
26605
+ } catch (error) {
26606
+ console.log("登录失败", error);
26607
+ return false;
26608
+ }
26609
+ }
26610
+ console.log("登录失败", res);
26611
+ return false;
26612
+ }
26613
+ }
26614
+
26615
+ // node_modules/.pnpm/@kevisual+api@0.0.52_@types+react@19.2.10_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@kevisual/api/query/query-login/login-node-cache.ts
26616
+ import { homedir } from "node:os";
26617
+ import { join, dirname } from "node:path";
26618
+ import fs4 from "node:fs";
26619
+ import { readFileSync, writeFileSync, accessSync } from "node:fs";
26620
+ import { readFile, writeFile, unlink, mkdir } from "node:fs/promises";
26056
26621
  var fileExists = async (filePath, { createIfNotExists = true, isFile = true, isDir = false } = {}) => {
26057
26622
  try {
26058
26623
  accessSync(filePath, fs4.constants.F_OK);
@@ -26088,7 +26653,8 @@ var getHostName = () => {
26088
26653
  const hostname = new URL(baseURL).hostname;
26089
26654
  return hostname;
26090
26655
  };
26091
- var StorageNode = class {
26656
+
26657
+ class StorageNode {
26092
26658
  cacheData;
26093
26659
  filePath;
26094
26660
  constructor() {
@@ -26129,8 +26695,9 @@ var StorageNode = class {
26129
26695
  key(index) {
26130
26696
  return Object.keys(this.cacheData)[index];
26131
26697
  }
26132
- };
26133
- var LoginNodeCache = class {
26698
+ }
26699
+
26700
+ class LoginNodeCache {
26134
26701
  filepath;
26135
26702
  constructor(filepath) {
26136
26703
  this.filepath = filepath || join(homedir(), ".config", "envision", "config", `${getHostName()}-login.json`);
@@ -26173,10 +26740,13 @@ var LoginNodeCache = class {
26173
26740
  async init() {
26174
26741
  return await this.loadCache(this.filepath);
26175
26742
  }
26176
- };
26743
+ }
26744
+
26745
+ // node_modules/.pnpm/@kevisual+api@0.0.52_@types+react@19.2.10_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@kevisual/api/query/query-login/query-login-node.ts
26177
26746
  var storage = new StorageNode;
26178
26747
  await storage.loadCache();
26179
- var QueryLoginNode = class extends QueryLogin {
26748
+
26749
+ class QueryLoginNode extends QueryLogin {
26180
26750
  constructor(opts) {
26181
26751
  super({
26182
26752
  ...opts,
@@ -26184,7 +26754,7 @@ var QueryLoginNode = class extends QueryLogin {
26184
26754
  cache: new LoginNodeCache
26185
26755
  });
26186
26756
  }
26187
- };
26757
+ }
26188
26758
 
26189
26759
  // src/module/query.ts
26190
26760
  var config = getConfig2();
@@ -26572,612 +27142,162 @@ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
26572
27142
  returnValue += string.slice(endIndex);
26573
27143
  return returnValue;
26574
27144
  }
26575
-
26576
- // node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
26577
- var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
26578
- var GENERATOR = Symbol("GENERATOR");
26579
- var STYLER = Symbol("STYLER");
26580
- var IS_EMPTY = Symbol("IS_EMPTY");
26581
- var levelMapping = [
26582
- "ansi",
26583
- "ansi",
26584
- "ansi256",
26585
- "ansi16m"
26586
- ];
26587
- var styles2 = Object.create(null);
26588
- var applyOptions = (object, options = {}) => {
26589
- if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
26590
- throw new Error("The `level` option should be an integer from 0 to 3");
26591
- }
26592
- const colorLevel = stdoutColor ? stdoutColor.level : 0;
26593
- object.level = options.level === undefined ? colorLevel : options.level;
26594
- };
26595
-
26596
- class Chalk {
26597
- constructor(options) {
26598
- return chalkFactory(options);
26599
- }
26600
- }
26601
- var chalkFactory = (options) => {
26602
- const chalk = (...strings) => strings.join(" ");
26603
- applyOptions(chalk, options);
26604
- Object.setPrototypeOf(chalk, createChalk.prototype);
26605
- return chalk;
26606
- };
26607
- function createChalk(options) {
26608
- return chalkFactory(options);
26609
- }
26610
- Object.setPrototypeOf(createChalk.prototype, Function.prototype);
26611
- for (const [styleName, style] of Object.entries(ansi_styles_default)) {
26612
- styles2[styleName] = {
26613
- get() {
26614
- const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
26615
- Object.defineProperty(this, styleName, { value: builder });
26616
- return builder;
26617
- }
26618
- };
26619
- }
26620
- styles2.visible = {
26621
- get() {
26622
- const builder = createBuilder(this, this[STYLER], true);
26623
- Object.defineProperty(this, "visible", { value: builder });
26624
- return builder;
26625
- }
26626
- };
26627
- var getModelAnsi = (model, level, type, ...arguments_) => {
26628
- if (model === "rgb") {
26629
- if (level === "ansi16m") {
26630
- return ansi_styles_default[type].ansi16m(...arguments_);
26631
- }
26632
- if (level === "ansi256") {
26633
- return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
26634
- }
26635
- return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
26636
- }
26637
- if (model === "hex") {
26638
- return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
26639
- }
26640
- return ansi_styles_default[type][model](...arguments_);
26641
- };
26642
- var usedModels = ["rgb", "hex", "ansi256"];
26643
- for (const model of usedModels) {
26644
- styles2[model] = {
26645
- get() {
26646
- const { level } = this;
26647
- return function(...arguments_) {
26648
- const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
26649
- return createBuilder(this, styler, this[IS_EMPTY]);
26650
- };
26651
- }
26652
- };
26653
- const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
26654
- styles2[bgModel] = {
26655
- get() {
26656
- const { level } = this;
26657
- return function(...arguments_) {
26658
- const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
26659
- return createBuilder(this, styler, this[IS_EMPTY]);
26660
- };
26661
- }
26662
- };
26663
- }
26664
- var proto = Object.defineProperties(() => {}, {
26665
- ...styles2,
26666
- level: {
26667
- enumerable: true,
26668
- get() {
26669
- return this[GENERATOR].level;
26670
- },
26671
- set(level) {
26672
- this[GENERATOR].level = level;
26673
- }
26674
- }
26675
- });
26676
- var createStyler = (open, close, parent) => {
26677
- let openAll;
26678
- let closeAll;
26679
- if (parent === undefined) {
26680
- openAll = open;
26681
- closeAll = close;
26682
- } else {
26683
- openAll = parent.openAll + open;
26684
- closeAll = close + parent.closeAll;
26685
- }
26686
- return {
26687
- open,
26688
- close,
26689
- openAll,
26690
- closeAll,
26691
- parent
26692
- };
26693
- };
26694
- var createBuilder = (self2, _styler, _isEmpty) => {
26695
- const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
26696
- Object.setPrototypeOf(builder, proto);
26697
- builder[GENERATOR] = self2;
26698
- builder[STYLER] = _styler;
26699
- builder[IS_EMPTY] = _isEmpty;
26700
- return builder;
26701
- };
26702
- var applyStyle = (self2, string) => {
26703
- if (self2.level <= 0 || !string) {
26704
- return self2[IS_EMPTY] ? "" : string;
26705
- }
26706
- let styler = self2[STYLER];
26707
- if (styler === undefined) {
26708
- return string;
26709
- }
26710
- const { openAll, closeAll } = styler;
26711
- if (string.includes("\x1B")) {
26712
- while (styler !== undefined) {
26713
- string = stringReplaceAll(string, styler.close, styler.open);
26714
- styler = styler.parent;
26715
- }
26716
- }
26717
- const lfIndex = string.indexOf(`
26718
- `);
26719
- if (lfIndex !== -1) {
26720
- string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
26721
- }
26722
- return openAll + string + closeAll;
26723
- };
26724
- Object.defineProperties(createChalk.prototype, styles2);
26725
- var chalk = createChalk();
26726
- var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
26727
- var source_default = chalk;
26728
-
26729
- // src/module/chalk.ts
26730
- var chalk2 = new Chalk({ level: 3 });
26731
-
26732
- // node_modules/.pnpm/@kevisual+load@0.0.6/node_modules/@kevisual/load/dist/load.js
26733
- function getDefaultExportFromCjs3(x) {
26734
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
26735
- }
26736
- var eventemitter33 = { exports: {} };
26737
- var hasRequiredEventemitter33;
26738
- function requireEventemitter33() {
26739
- if (hasRequiredEventemitter33)
26740
- return eventemitter33.exports;
26741
- hasRequiredEventemitter33 = 1;
26742
- (function(module) {
26743
- var has = Object.prototype.hasOwnProperty, prefix = "~";
26744
- function Events() {}
26745
- if (Object.create) {
26746
- Events.prototype = Object.create(null);
26747
- if (!new Events().__proto__)
26748
- prefix = false;
26749
- }
26750
- function EE(fn, context, once) {
26751
- this.fn = fn;
26752
- this.context = context;
26753
- this.once = once || false;
26754
- }
26755
- function addListener(emitter, event, fn, context, once) {
26756
- if (typeof fn !== "function") {
26757
- throw new TypeError("The listener must be a function");
26758
- }
26759
- var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
26760
- if (!emitter._events[evt])
26761
- emitter._events[evt] = listener, emitter._eventsCount++;
26762
- else if (!emitter._events[evt].fn)
26763
- emitter._events[evt].push(listener);
26764
- else
26765
- emitter._events[evt] = [emitter._events[evt], listener];
26766
- return emitter;
26767
- }
26768
- function clearEvent(emitter, evt) {
26769
- if (--emitter._eventsCount === 0)
26770
- emitter._events = new Events;
26771
- else
26772
- delete emitter._events[evt];
26773
- }
26774
- function EventEmitter3() {
26775
- this._events = new Events;
26776
- this._eventsCount = 0;
26777
- }
26778
- EventEmitter3.prototype.eventNames = function eventNames() {
26779
- var names = [], events, name;
26780
- if (this._eventsCount === 0)
26781
- return names;
26782
- for (name in events = this._events) {
26783
- if (has.call(events, name))
26784
- names.push(prefix ? name.slice(1) : name);
26785
- }
26786
- if (Object.getOwnPropertySymbols) {
26787
- return names.concat(Object.getOwnPropertySymbols(events));
26788
- }
26789
- return names;
26790
- };
26791
- EventEmitter3.prototype.listeners = function listeners(event) {
26792
- var evt = prefix ? prefix + event : event, handlers = this._events[evt];
26793
- if (!handlers)
26794
- return [];
26795
- if (handlers.fn)
26796
- return [handlers.fn];
26797
- for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
26798
- ee[i] = handlers[i].fn;
26799
- }
26800
- return ee;
26801
- };
26802
- EventEmitter3.prototype.listenerCount = function listenerCount(event) {
26803
- var evt = prefix ? prefix + event : event, listeners = this._events[evt];
26804
- if (!listeners)
26805
- return 0;
26806
- if (listeners.fn)
26807
- return 1;
26808
- return listeners.length;
26809
- };
26810
- EventEmitter3.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
26811
- var evt = prefix ? prefix + event : event;
26812
- if (!this._events[evt])
26813
- return false;
26814
- var listeners = this._events[evt], len = arguments.length, args, i;
26815
- if (listeners.fn) {
26816
- if (listeners.once)
26817
- this.removeListener(event, listeners.fn, undefined, true);
26818
- switch (len) {
26819
- case 1:
26820
- return listeners.fn.call(listeners.context), true;
26821
- case 2:
26822
- return listeners.fn.call(listeners.context, a1), true;
26823
- case 3:
26824
- return listeners.fn.call(listeners.context, a1, a2), true;
26825
- case 4:
26826
- return listeners.fn.call(listeners.context, a1, a2, a3), true;
26827
- case 5:
26828
- return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
26829
- case 6:
26830
- return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
26831
- }
26832
- for (i = 1, args = new Array(len - 1);i < len; i++) {
26833
- args[i - 1] = arguments[i];
26834
- }
26835
- listeners.fn.apply(listeners.context, args);
26836
- } else {
26837
- var length = listeners.length, j;
26838
- for (i = 0;i < length; i++) {
26839
- if (listeners[i].once)
26840
- this.removeListener(event, listeners[i].fn, undefined, true);
26841
- switch (len) {
26842
- case 1:
26843
- listeners[i].fn.call(listeners[i].context);
26844
- break;
26845
- case 2:
26846
- listeners[i].fn.call(listeners[i].context, a1);
26847
- break;
26848
- case 3:
26849
- listeners[i].fn.call(listeners[i].context, a1, a2);
26850
- break;
26851
- case 4:
26852
- listeners[i].fn.call(listeners[i].context, a1, a2, a3);
26853
- break;
26854
- default:
26855
- if (!args)
26856
- for (j = 1, args = new Array(len - 1);j < len; j++) {
26857
- args[j - 1] = arguments[j];
26858
- }
26859
- listeners[i].fn.apply(listeners[i].context, args);
26860
- }
26861
- }
26862
- }
26863
- return true;
26864
- };
26865
- EventEmitter3.prototype.on = function on(event, fn, context) {
26866
- return addListener(this, event, fn, context, false);
26867
- };
26868
- EventEmitter3.prototype.once = function once(event, fn, context) {
26869
- return addListener(this, event, fn, context, true);
26870
- };
26871
- EventEmitter3.prototype.removeListener = function removeListener(event, fn, context, once) {
26872
- var evt = prefix ? prefix + event : event;
26873
- if (!this._events[evt])
26874
- return this;
26875
- if (!fn) {
26876
- clearEvent(this, evt);
26877
- return this;
26878
- }
26879
- var listeners = this._events[evt];
26880
- if (listeners.fn) {
26881
- if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
26882
- clearEvent(this, evt);
26883
- }
26884
- } else {
26885
- for (var i = 0, events = [], length = listeners.length;i < length; i++) {
26886
- if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
26887
- events.push(listeners[i]);
26888
- }
26889
- }
26890
- if (events.length)
26891
- this._events[evt] = events.length === 1 ? events[0] : events;
26892
- else
26893
- clearEvent(this, evt);
26894
- }
26895
- return this;
26896
- };
26897
- EventEmitter3.prototype.removeAllListeners = function removeAllListeners(event) {
26898
- var evt;
26899
- if (event) {
26900
- evt = prefix ? prefix + event : event;
26901
- if (this._events[evt])
26902
- clearEvent(this, evt);
26903
- } else {
26904
- this._events = new Events;
26905
- this._eventsCount = 0;
26906
- }
26907
- return this;
26908
- };
26909
- EventEmitter3.prototype.off = EventEmitter3.prototype.removeListener;
26910
- EventEmitter3.prototype.addListener = EventEmitter3.prototype.on;
26911
- EventEmitter3.prefixed = prefix;
26912
- EventEmitter3.EventEmitter = EventEmitter3;
26913
- {
26914
- module.exports = EventEmitter3;
26915
- }
26916
- })(eventemitter33);
26917
- return eventemitter33.exports;
26918
- }
26919
- var eventemitter3Exports3 = requireEventemitter33();
26920
- var EventEmitter3 = /* @__PURE__ */ getDefaultExportFromCjs3(eventemitter3Exports3);
26921
- var reRunFn3 = (promiseOpts) => {
26922
- const timeout = promiseOpts.timeout || 5 * 60 * 1000;
26923
- const interval = promiseOpts.interval || 1000;
26924
- const checkSuccess = promiseOpts?.checkSuccess || (() => true);
26925
- const signal = promiseOpts.signal;
26926
- return new Promise(async (resolve, reject) => {
26927
- let intervalId;
26928
- let timeoutId = setTimeout(() => {
26929
- clearTimeout(intervalId);
26930
- resolve({
26931
- code: 500,
26932
- message: "timeout"
26933
- });
26934
- }, timeout);
26935
- const fn = promiseOpts.fn || (() => true);
26936
- const runFn = async () => {
26937
- if (signal?.aborted) {
26938
- clearInterval(intervalId);
26939
- clearTimeout(timeoutId);
26940
- return resolve({
26941
- code: 499,
26942
- message: "operation cancelled"
26943
- });
26944
- }
26945
- const res = await fn();
26946
- if (!!checkSuccess(res)) {
26947
- clearInterval(intervalId);
26948
- clearTimeout(timeoutId);
26949
- resolve({
26950
- code: 200,
26951
- data: res
26952
- });
26953
- } else {
26954
- setTimeout(() => {
26955
- runFn();
26956
- }, interval);
26957
- }
26958
- };
26959
- if (signal) {
26960
- signal.addEventListener("abort", () => {
26961
- clearInterval(intervalId);
26962
- clearTimeout(timeoutId);
26963
- resolve({
26964
- code: 499,
26965
- message: "operation cancelled"
26966
- });
26967
- });
26968
- }
26969
- runFn();
26970
- });
26971
- };
26972
-
26973
- class BaseLoad3 {
26974
- modules = new Map;
26975
- event;
26976
- loading;
26977
- static reRunFn = reRunFn3;
26978
- timeout = 5 * 60 * 1000;
26979
- constructor() {
26980
- this.event = new EventEmitter3;
26981
- this.loading = false;
26982
- }
26983
- listenKey(key, listenOpts) {
26984
- const timeout = listenOpts?.timeout ?? this.timeout;
26985
- return new Promise((resolve) => {
26986
- const timeoutId = setTimeout(() => {
26987
- this.event.removeListener(key, onEvent);
26988
- resolve({
26989
- code: 500,
26990
- message: "timeout"
26991
- });
26992
- }, timeout);
26993
- const onEvent = (error) => {
26994
- clearTimeout(timeoutId);
26995
- if (error) {
26996
- return resolve({
26997
- code: 500,
26998
- message: error
26999
- });
27000
- }
27001
- const data = this.modules.get(key);
27002
- if (data?.loadSuccessClear) {
27003
- this.remove(key);
27004
- }
27005
- resolve({
27006
- code: 200,
27007
- data: data?.modules
27008
- });
27009
- };
27010
- this.event.once(key, onEvent);
27011
- });
27012
- }
27013
- async hasLoaded(key, hasLoadOpts) {
27014
- if (!key) {
27015
- return {
27016
- code: 404,
27017
- message: "key is required"
27018
- };
27019
- }
27020
- const has = this.modules.has(key);
27021
- if (!has) {
27022
- const isExist = hasLoadOpts?.isExist ?? true;
27023
- const timeout = hasLoadOpts?.timeout ?? this.timeout;
27024
- if (isExist) {
27025
- return await this.listenKey(key, { timeout });
27026
- }
27027
- return {
27028
- code: 404
27029
- };
27030
- }
27031
- const data = this.modules.get(key);
27032
- if (data?.status === "loaded") {
27033
- return {
27034
- code: 200,
27035
- data: data.modules
27036
- };
27037
- }
27038
- if (data?.status === "loading") {
27039
- return await this.listenKey(key, { timeout: hasLoadOpts?.timeout ?? this.timeout });
27040
- }
27041
- if (data?.status === "error") {
27042
- return {
27043
- code: 500,
27044
- message: "load error"
27045
- };
27046
- }
27047
- if (data?.status === "cancel") {
27048
- return {
27049
- code: 499,
27050
- message: "operation cancelled"
27051
- };
27145
+
27146
+ // node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
27147
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
27148
+ var GENERATOR = Symbol("GENERATOR");
27149
+ var STYLER = Symbol("STYLER");
27150
+ var IS_EMPTY = Symbol("IS_EMPTY");
27151
+ var levelMapping = [
27152
+ "ansi",
27153
+ "ansi",
27154
+ "ansi256",
27155
+ "ansi16m"
27156
+ ];
27157
+ var styles2 = Object.create(null);
27158
+ var applyOptions = (object, options = {}) => {
27159
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
27160
+ throw new Error("The `level` option should be an integer from 0 to 3");
27161
+ }
27162
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
27163
+ object.level = options.level === undefined ? colorLevel : options.level;
27164
+ };
27165
+
27166
+ class Chalk {
27167
+ constructor(options) {
27168
+ return chalkFactory(options);
27169
+ }
27170
+ }
27171
+ var chalkFactory = (options) => {
27172
+ const chalk = (...strings) => strings.join(" ");
27173
+ applyOptions(chalk, options);
27174
+ Object.setPrototypeOf(chalk, createChalk.prototype);
27175
+ return chalk;
27176
+ };
27177
+ function createChalk(options) {
27178
+ return chalkFactory(options);
27179
+ }
27180
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
27181
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
27182
+ styles2[styleName] = {
27183
+ get() {
27184
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
27185
+ Object.defineProperty(this, styleName, { value: builder });
27186
+ return builder;
27052
27187
  }
27053
- return {
27054
- code: 404
27055
- };
27188
+ };
27189
+ }
27190
+ styles2.visible = {
27191
+ get() {
27192
+ const builder = createBuilder(this, this[STYLER], true);
27193
+ Object.defineProperty(this, "visible", { value: builder });
27194
+ return builder;
27056
27195
  }
27057
- async loadFn(loadContent, opts) {
27058
- const key = opts.key;
27059
- if (!key) {
27060
- return {
27061
- code: 404,
27062
- message: "key is required"
27063
- };
27196
+ };
27197
+ var getModelAnsi = (model, level, type, ...arguments_) => {
27198
+ if (model === "rgb") {
27199
+ if (level === "ansi16m") {
27200
+ return ansi_styles_default[type].ansi16m(...arguments_);
27064
27201
  }
27065
- const newModule = {
27066
- key: opts.key,
27067
- status: "loading",
27068
- loading: true,
27069
- loadSuccessClear: opts.loadSuccessClear ?? true
27070
- };
27071
- let errorMessage = "";
27072
- try {
27073
- const isReRun = opts.isReRun ?? false;
27074
- let res;
27075
- if (!isReRun) {
27076
- this.modules.set(key, newModule);
27077
- res = await loadContent();
27078
- } else {
27079
- newModule.controller = new AbortController;
27080
- const signal = newModule.controller.signal;
27081
- this.modules.set(key, newModule);
27082
- const data = await reRunFn3({
27083
- timeout: opts.timeout,
27084
- interval: opts.interval,
27085
- checkSuccess: opts.checkSuccess,
27086
- fn: loadContent,
27087
- signal
27088
- });
27089
- newModule.controller = null;
27090
- if (data.code === 499) {
27091
- newModule.status = "cancel";
27092
- return {
27093
- code: 499,
27094
- message: "operation cancelled"
27095
- };
27096
- }
27097
- if (data.code !== 200) {
27098
- throw new Error(data.message);
27099
- }
27100
- res = data.data;
27101
- }
27102
- newModule.modules = res;
27103
- newModule.status = "loaded";
27104
- return {
27105
- code: 200,
27106
- data: res
27107
- };
27108
- } catch (error) {
27109
- errorMessage = error.message;
27110
- newModule.status = "error";
27111
- return {
27112
- code: 500,
27113
- message: error
27114
- };
27115
- } finally {
27116
- newModule.loading = false;
27117
- this.modules.set(opts.key, newModule);
27118
- if (!errorMessage) {
27119
- this.event.emit(opts.key);
27120
- } else {
27121
- this.event.emit(opts.key, errorMessage);
27122
- }
27202
+ if (level === "ansi256") {
27203
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
27123
27204
  }
27205
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
27124
27206
  }
27125
- async load(loadContent, opts) {
27126
- this.loading = true;
27127
- const key = opts.key;
27128
- if (!key) {
27129
- return {
27130
- code: 404,
27131
- message: "key is required"
27207
+ if (model === "hex") {
27208
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
27209
+ }
27210
+ return ansi_styles_default[type][model](...arguments_);
27211
+ };
27212
+ var usedModels = ["rgb", "hex", "ansi256"];
27213
+ for (const model of usedModels) {
27214
+ styles2[model] = {
27215
+ get() {
27216
+ const { level } = this;
27217
+ return function(...arguments_) {
27218
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
27219
+ return createBuilder(this, styler, this[IS_EMPTY]);
27132
27220
  };
27133
27221
  }
27134
- if (opts?.force) {
27135
- this.remove(key);
27136
- }
27137
- const has = this.modules.has(key);
27138
- if (has) {
27139
- return await this.hasLoaded(key);
27140
- }
27141
- if (typeof loadContent === "function") {
27142
- return this.loadFn(loadContent, opts);
27222
+ };
27223
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
27224
+ styles2[bgModel] = {
27225
+ get() {
27226
+ const { level } = this;
27227
+ return function(...arguments_) {
27228
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
27229
+ return createBuilder(this, styler, this[IS_EMPTY]);
27230
+ };
27143
27231
  }
27144
- console.error("loadContent is not a function and not has loaded");
27145
- }
27146
- remove(key) {
27147
- const has = this.modules.has(key);
27148
- if (has) {
27149
- this.checkRemoveController(key);
27150
- this.modules.delete(key);
27232
+ };
27233
+ }
27234
+ var proto = Object.defineProperties(() => {}, {
27235
+ ...styles2,
27236
+ level: {
27237
+ enumerable: true,
27238
+ get() {
27239
+ return this[GENERATOR].level;
27240
+ },
27241
+ set(level) {
27242
+ this[GENERATOR].level = level;
27151
27243
  }
27152
27244
  }
27153
- emitLoaded(key) {
27154
- this.checkRemoveController(key);
27155
- this.event.emit(key);
27245
+ });
27246
+ var createStyler = (open, close, parent) => {
27247
+ let openAll;
27248
+ let closeAll;
27249
+ if (parent === undefined) {
27250
+ openAll = open;
27251
+ closeAll = close;
27252
+ } else {
27253
+ openAll = parent.openAll + open;
27254
+ closeAll = close + parent.closeAll;
27156
27255
  }
27157
- setModule(key, data, loadData) {
27158
- const newModule = {
27159
- key,
27160
- status: "loaded",
27161
- loading: false,
27162
- modules: data || {},
27163
- ...loadData
27164
- };
27165
- this.modules.set(key, newModule);
27166
- this.emitLoaded(key);
27167
- return newModule;
27256
+ return {
27257
+ open,
27258
+ close,
27259
+ openAll,
27260
+ closeAll,
27261
+ parent
27262
+ };
27263
+ };
27264
+ var createBuilder = (self2, _styler, _isEmpty) => {
27265
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
27266
+ Object.setPrototypeOf(builder, proto);
27267
+ builder[GENERATOR] = self2;
27268
+ builder[STYLER] = _styler;
27269
+ builder[IS_EMPTY] = _isEmpty;
27270
+ return builder;
27271
+ };
27272
+ var applyStyle = (self2, string) => {
27273
+ if (self2.level <= 0 || !string) {
27274
+ return self2[IS_EMPTY] ? "" : string;
27168
27275
  }
27169
- cancel(key) {
27170
- this.checkRemoveController(key);
27276
+ let styler = self2[STYLER];
27277
+ if (styler === undefined) {
27278
+ return string;
27171
27279
  }
27172
- checkRemoveController(key) {
27173
- const data = this.modules.get(key);
27174
- if (data?.controller) {
27175
- data.controller?.abort?.();
27176
- delete data.controller;
27177
- this.modules.set(key, data);
27280
+ const { openAll, closeAll } = styler;
27281
+ if (string.includes("\x1B")) {
27282
+ while (styler !== undefined) {
27283
+ string = stringReplaceAll(string, styler.close, styler.open);
27284
+ styler = styler.parent;
27178
27285
  }
27179
27286
  }
27180
- }
27287
+ const lfIndex = string.indexOf(`
27288
+ `);
27289
+ if (lfIndex !== -1) {
27290
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
27291
+ }
27292
+ return openAll + string + closeAll;
27293
+ };
27294
+ Object.defineProperties(createChalk.prototype, styles2);
27295
+ var chalk = createChalk();
27296
+ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
27297
+ var source_default = chalk;
27298
+
27299
+ // src/module/chalk.ts
27300
+ var chalk2 = new Chalk({ level: 3 });
27181
27301
 
27182
27302
  // src/module/login/login-by-web.ts
27183
27303
  var pollLoginStatus = async (token, opts) => {
@@ -31179,7 +31299,7 @@ class QueryRouterServer extends QueryRouter {
31179
31299
  }
31180
31300
 
31181
31301
  // node_modules/.pnpm/@kevisual+context@0.0.4/node_modules/@kevisual/context/dist/app.js
31182
- var isBrowser2 = typeof window !== "undefined" && typeof window.document !== "undefined";
31302
+ var isBrowser3 = typeof window !== "undefined" && typeof window.document !== "undefined";
31183
31303
  function getDefaultExportFromCjs4(x) {
31184
31304
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
31185
31305
  }
@@ -33595,7 +33715,7 @@ function mitt_default(n) {
33595
33715
  }
33596
33716
 
33597
33717
  // node_modules/.pnpm/@kevisual+app@0.0.2_dotenv@17.3.1/node_modules/@kevisual/app/src/app.ts
33598
- var isBrowser3 = typeof window !== "undefined";
33718
+ var isBrowser5 = typeof window !== "undefined";
33599
33719
 
33600
33720
  class App {
33601
33721
  #router;
@@ -33614,7 +33734,7 @@ class App {
33614
33734
  if (opts?.storage) {
33615
33735
  this.storage = opts.storage;
33616
33736
  } else {
33617
- if (isBrowser3) {
33737
+ if (isBrowser5) {
33618
33738
  this.storage = sessionStorage;
33619
33739
  } else {
33620
33740
  console.warn("没有提供 storage,某些功能可能无法使用");
@@ -33658,7 +33778,7 @@ class App {
33658
33778
  return this.ai;
33659
33779
  }
33660
33780
  get token() {
33661
- if (isBrowser3 && !this.#token) {
33781
+ if (isBrowser5 && !this.#token) {
33662
33782
  this.#token = localStorage?.getItem("token") || "";
33663
33783
  return this.#token;
33664
33784
  }
@@ -33689,7 +33809,7 @@ class App {
33689
33809
  }
33690
33810
  const data = res.data || {};
33691
33811
  const config2 = data.data || {};
33692
- if (isBrowser3) {
33812
+ if (isBrowser5) {
33693
33813
  this.storage?.setItem?.(`config_${key}`, JSON.stringify(config2));
33694
33814
  }
33695
33815
  return config2;