jimeng-cli 0.2.0 → 0.2.1

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/cli/index.js CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  receiveCredit,
15
15
  session_pool_default,
16
16
  waitForTaskResponse
17
- } from "../chunk-JZY62VNI.js";
17
+ } from "../chunk-3SUCLOAC.js";
18
18
 
19
19
  // src/cli/app.ts
20
20
  import process2 from "process";
@@ -65,12 +65,6 @@ var Environment = class {
65
65
  envVars;
66
66
  /** 环境名称 */
67
67
  env;
68
- /** 服务名称 */
69
- name;
70
- /** 服务地址 */
71
- host;
72
- /** 服务端口 */
73
- port;
74
68
  /** 包参数 */
75
69
  package;
76
70
  constructor(options = {}) {
@@ -78,9 +72,6 @@ var Environment = class {
78
72
  this.cmdArgs = cmdArgs2;
79
73
  this.envVars = envVars2;
80
74
  this.env = import_lodash.default.defaultTo(cmdArgs2.env || envVars2.SERVER_ENV, "dev");
81
- this.name = cmdArgs2.name || envVars2.SERVER_NAME || void 0;
82
- this.host = cmdArgs2.host || envVars2.SERVER_HOST || void 0;
83
- this.port = Number(cmdArgs2.port || envVars2.SERVER_PORT) ? Number(cmdArgs2.port || envVars2.SERVER_PORT) : void 0;
84
75
  this.package = _package;
85
76
  }
86
77
  };
@@ -238,7 +229,7 @@ var RESOLUTION_OPTIONS_NANOBANANAPRO_4K = {
238
229
  // src/api/controllers/core.ts
239
230
  var import_node_net = __toESM(require("net"), 1);
240
231
  var import_promises = __toESM(require("dns/promises"), 1);
241
- var import_lodash7 = __toESM(require("lodash"), 1);
232
+ var import_lodash6 = __toESM(require("lodash"), 1);
242
233
  var import_mime2 = __toESM(require("mime"), 1);
243
234
  var import_axios2 = __toESM(require("axios"), 1);
244
235
  var import_https_proxy_agent = require("https-proxy-agent");
@@ -313,33 +304,101 @@ var exceptions_default = {
313
304
  };
314
305
 
315
306
  // src/lib/logger.ts
316
- var import_path5 = __toESM(require("path"), 1);
317
- var import_util2 = __toESM(require("util"), 1);
307
+ var import_path4 = __toESM(require("path"), 1);
308
+ var import_util = __toESM(require("util"), 1);
318
309
  var import_colors2 = require("colors");
319
- var import_lodash6 = __toESM(require("lodash"), 1);
320
- var import_fs_extra5 = __toESM(require("fs-extra"), 1);
310
+ var import_lodash5 = __toESM(require("lodash"), 1);
311
+ var import_fs_extra4 = __toESM(require("fs-extra"), 1);
321
312
  var import_date_fns2 = require("date-fns");
322
313
 
323
- // src/lib/configs/service-config.ts
324
- var import_path3 = __toESM(require("path"), 1);
325
- var import_fs_extra3 = __toESM(require("fs-extra"), 1);
314
+ // src/lib/configs/system-config.ts
315
+ var import_path2 = __toESM(require("path"), 1);
316
+ var import_fs_extra2 = __toESM(require("fs-extra"), 1);
326
317
  var import_yaml = __toESM(require("yaml"), 1);
327
- var import_lodash4 = __toESM(require("lodash"), 1);
318
+ var import_lodash3 = __toESM(require("lodash"), 1);
319
+ var CONFIG_PATH = import_path2.default.join(import_path2.default.resolve(), "configs/", environment_default.env, "/system.yml");
320
+ var SystemConfig = class _SystemConfig {
321
+ /** 是否开启请求日志 */
322
+ requestLog;
323
+ /** 临时目录路径 */
324
+ tmpDir;
325
+ /** 日志目录路径 */
326
+ logDir;
327
+ /** 日志写入间隔(毫秒) */
328
+ logWriteInterval;
329
+ /** 日志文件有效期(毫秒) */
330
+ logFileExpires;
331
+ /** 临时文件有效期(毫秒) */
332
+ tmpFileExpires;
333
+ /** 请求体配置 */
334
+ requestBody;
335
+ /** 是否调试模式 */
336
+ debug;
337
+ /** 日志级别 */
338
+ log_level;
339
+ constructor(options) {
340
+ const { requestLog, tmpDir, logDir, logWriteInterval, logFileExpires, tmpFileExpires, requestBody, debug, log_level } = options || {};
341
+ this.requestLog = import_lodash3.default.defaultTo(requestLog, false);
342
+ this.tmpDir = import_lodash3.default.defaultTo(tmpDir, "./tmp");
343
+ this.logDir = import_lodash3.default.defaultTo(logDir, "./logs");
344
+ this.logWriteInterval = import_lodash3.default.defaultTo(logWriteInterval, 200);
345
+ this.logFileExpires = import_lodash3.default.defaultTo(logFileExpires, 262656e4);
346
+ this.tmpFileExpires = import_lodash3.default.defaultTo(tmpFileExpires, 864e5);
347
+ this.requestBody = Object.assign(requestBody || {}, {
348
+ enableTypes: ["form", "text", "xml"],
349
+ // 移除 json,由自定义中间件处理
350
+ encoding: "utf-8",
351
+ formLimit: "100mb",
352
+ jsonLimit: "100mb",
353
+ textLimit: "100mb",
354
+ xmlLimit: "100mb",
355
+ formidable: {
356
+ maxFileSize: "100mb"
357
+ },
358
+ multipart: true,
359
+ parsedMethods: ["POST", "PUT", "PATCH"]
360
+ });
361
+ this.debug = import_lodash3.default.defaultTo(debug, true);
362
+ this.log_level = import_lodash3.default.defaultTo(log_level, "info");
363
+ }
364
+ get rootDirPath() {
365
+ return import_path2.default.resolve();
366
+ }
367
+ get tmpDirPath() {
368
+ return import_path2.default.resolve(this.tmpDir);
369
+ }
370
+ get logDirPath() {
371
+ return import_path2.default.resolve(this.logDir);
372
+ }
373
+ static load() {
374
+ if (!import_fs_extra2.default.pathExistsSync(CONFIG_PATH)) return new _SystemConfig();
375
+ const data = import_yaml.default.parse(import_fs_extra2.default.readFileSync(CONFIG_PATH).toString());
376
+ return new _SystemConfig(data);
377
+ }
378
+ };
379
+ var system_config_default = SystemConfig.load();
380
+
381
+ // src/lib/config.ts
382
+ var Config = class {
383
+ /** 系统配置 */
384
+ system = system_config_default;
385
+ };
386
+ var config_default = new Config();
328
387
 
329
388
  // src/lib/util.ts
330
389
  var import_os = __toESM(require("os"), 1);
331
- var import_path2 = __toESM(require("path"), 1);
390
+ var import_path3 = __toESM(require("path"), 1);
332
391
  var import_crypto = __toESM(require("crypto"), 1);
333
392
  var import_stream = require("stream");
334
393
  var import_colors = require("colors");
335
394
  var import_mime = __toESM(require("mime"), 1);
336
395
  var import_axios = __toESM(require("axios"), 1);
337
- var import_fs_extra2 = __toESM(require("fs-extra"), 1);
396
+ var import_fs_extra3 = __toESM(require("fs-extra"), 1);
338
397
  var import_uuid = require("uuid");
339
398
  var import_date_fns = require("date-fns");
340
399
  var import_crc_32 = __toESM(require("crc-32"), 1);
341
400
  var import_randomstring = __toESM(require("randomstring"), 1);
342
- var import_lodash3 = __toESM(require("lodash"), 1);
401
+ var import_lodash4 = __toESM(require("lodash"), 1);
343
402
  var import_cron = require("cron");
344
403
 
345
404
  // src/lib/http-status-codes.ts
@@ -456,7 +515,7 @@ var http_status_codes_default = {
456
515
  var autoIdMap = /* @__PURE__ */ new Map();
457
516
  var util = {
458
517
  is2DArrays(value) {
459
- return import_lodash3.default.isArray(value) && (!value[0] || import_lodash3.default.isArray(value[0]) && import_lodash3.default.isArray(value[value.length - 1]));
518
+ return import_lodash4.default.isArray(value) && (!value[0] || import_lodash4.default.isArray(value[0]) && import_lodash4.default.isArray(value[value.length - 1]));
460
519
  },
461
520
  uuid: (separator = true) => separator ? (0, import_uuid.v4)() : (0, import_uuid.v4)().replace(/\-/g, ""),
462
521
  autoId: (prefix = "") => {
@@ -466,8 +525,8 @@ var util = {
466
525
  return `${prefix}${index || 1}`;
467
526
  },
468
527
  ignoreJSONParse(value) {
469
- const result = import_lodash3.default.attempt(() => JSON.parse(value));
470
- if (import_lodash3.default.isError(result)) return null;
528
+ const result = import_lodash4.default.attempt(() => JSON.parse(value));
529
+ if (import_lodash4.default.isError(result)) return null;
471
530
  return result;
472
531
  },
473
532
  generateRandomString(options) {
@@ -482,11 +541,11 @@ var util = {
482
541
  return extension;
483
542
  },
484
543
  extractURLExtension(value) {
485
- const extname = import_path2.default.extname(new URL(value).pathname);
544
+ const extname = import_path3.default.extname(new URL(value).pathname);
486
545
  return extname.substring(1).toLowerCase();
487
546
  },
488
547
  createCronJob(cronPatterns, callback) {
489
- if (!import_lodash3.default.isFunction(callback))
548
+ if (!import_lodash4.default.isFunction(callback))
490
549
  throw new Error("callback must be an Function");
491
550
  return new import_cron.CronJob(
492
551
  cronPatterns,
@@ -539,14 +598,14 @@ retry: ${retry || 3e3}
539
598
  return import_os.default.platform() !== "win32";
540
599
  },
541
600
  isIPAddress(value) {
542
- return import_lodash3.default.isString(value) && (/^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/.test(
601
+ return import_lodash4.default.isString(value) && (/^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/.test(
543
602
  value
544
603
  ) || /\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*/.test(
545
604
  value
546
605
  ));
547
606
  },
548
607
  isPort(value) {
549
- return import_lodash3.default.isNumber(value) && value > 0 && value < 65536;
608
+ return import_lodash4.default.isNumber(value) && value > 0 && value < 65536;
550
609
  },
551
610
  isReadStream(value) {
552
611
  return value && (value instanceof import_stream.Readable || "readable" in value || value.readable);
@@ -555,16 +614,16 @@ retry: ${retry || 3e3}
555
614
  return value && (value instanceof import_stream.Writable || "writable" in value || value.writable);
556
615
  },
557
616
  isHttpStatusCode(value) {
558
- return import_lodash3.default.isNumber(value) && Object.values(http_status_codes_default).includes(value);
617
+ return import_lodash4.default.isNumber(value) && Object.values(http_status_codes_default).includes(value);
559
618
  },
560
619
  isURL(value) {
561
- return !import_lodash3.default.isUndefined(value) && /^(http|https)/.test(value);
620
+ return !import_lodash4.default.isUndefined(value) && /^(http|https)/.test(value);
562
621
  },
563
622
  isSrc(value) {
564
- return !import_lodash3.default.isUndefined(value) && /^\/.+\.[0-9a-zA-Z]+(\?.+)?$/.test(value);
623
+ return !import_lodash4.default.isUndefined(value) && /^\/.+\.[0-9a-zA-Z]+(\?.+)?$/.test(value);
565
624
  },
566
625
  isBASE64(value) {
567
- return !import_lodash3.default.isUndefined(value) && /^[a-zA-Z0-9\/\+]+(=?)+$/.test(value);
626
+ return !import_lodash4.default.isUndefined(value) && /^[a-zA-Z0-9\/\+]+(=?)+$/.test(value);
568
627
  },
569
628
  isBASE64Data(value) {
570
629
  return /^data:/.test(value);
@@ -581,7 +640,7 @@ retry: ${retry || 3e3}
581
640
  return /^(base64|json):/.test(value);
582
641
  },
583
642
  isStringNumber(value) {
584
- return import_lodash3.default.isFinite(Number(value));
643
+ return import_lodash4.default.isFinite(Number(value));
585
644
  },
586
645
  isUnixTimestamp(value) {
587
646
  return /^[0-9]{10}$/.test(`${value}`);
@@ -599,7 +658,7 @@ retry: ${retry || 3e3}
599
658
  },
600
659
  async isAPNG(filePath) {
601
660
  let head;
602
- const readStream = import_fs_extra2.default.createReadStream(filePath, { start: 37, end: 40 });
661
+ const readStream = import_fs_extra3.default.createReadStream(filePath, { start: 37, end: 40 });
603
662
  const readPromise = new Promise((resolve, reject) => {
604
663
  readStream.once("end", resolve);
605
664
  readStream.once("error", reject);
@@ -621,7 +680,7 @@ retry: ${retry || 3e3}
621
680
  return url;
622
681
  },
623
682
  millisecondsToHmss(milliseconds) {
624
- if (import_lodash3.default.isString(milliseconds)) return milliseconds;
683
+ if (import_lodash4.default.isString(milliseconds)) return milliseconds;
625
684
  milliseconds = parseInt(milliseconds);
626
685
  const sec = Math.floor(milliseconds / 1e3);
627
686
  const hours = Math.floor(sec / 3600);
@@ -649,10 +708,10 @@ retry: ${retry || 3e3}
649
708
  return import_crypto.default.createHash("md5").update(value).digest("hex");
650
709
  },
651
710
  crc32(value) {
652
- return import_lodash3.default.isBuffer(value) ? import_crc_32.default.buf(value) : import_crc_32.default.str(value);
711
+ return import_lodash4.default.isBuffer(value) ? import_crc_32.default.buf(value) : import_crc_32.default.str(value);
653
712
  },
654
713
  arrayParse(value) {
655
- return import_lodash3.default.isArray(value) ? value : [value];
714
+ return import_lodash4.default.isArray(value) ? value : [value];
656
715
  },
657
716
  booleanParse(value) {
658
717
  return value === "true" || value === true ? true : false;
@@ -693,127 +752,6 @@ retry: ${retry || 3e3}
693
752
  };
694
753
  var util_default = util;
695
754
 
696
- // src/lib/configs/service-config.ts
697
- var CONFIG_PATH = import_path3.default.join(import_path3.default.resolve(), "configs/", environment_default.env, "/service.yml");
698
- var ServiceConfig = class _ServiceConfig {
699
- /** 服务名称 */
700
- name;
701
- /** @type {string} 服务绑定主机地址 */
702
- host;
703
- /** @type {number} 服务绑定端口 */
704
- port;
705
- /** @type {string} 服务路由前缀 */
706
- urlPrefix;
707
- /** @type {string} 服务绑定地址(外部访问地址) */
708
- bindAddress;
709
- constructor(options) {
710
- const { name, host, port, urlPrefix, bindAddress } = options || {};
711
- this.name = import_lodash4.default.defaultTo(name, "jimeng-cli");
712
- this.host = import_lodash4.default.defaultTo(host, "0.0.0.0");
713
- this.port = import_lodash4.default.defaultTo(port, 5566);
714
- this.urlPrefix = import_lodash4.default.defaultTo(urlPrefix, "");
715
- this.bindAddress = bindAddress;
716
- }
717
- get addressHost() {
718
- if (this.bindAddress) return this.bindAddress;
719
- const ipAddresses = util_default.getIPAddressesByIPv4();
720
- for (let ipAddress of ipAddresses) {
721
- if (ipAddress === this.host)
722
- return ipAddress;
723
- }
724
- return ipAddresses[0] || "127.0.0.1";
725
- }
726
- get address() {
727
- return `${this.addressHost}:${this.port}`;
728
- }
729
- get pageDirUrl() {
730
- return `http://127.0.0.1:${this.port}/page`;
731
- }
732
- static load() {
733
- const external = import_lodash4.default.pickBy(environment_default, (v, k) => ["name", "host", "port"].includes(k) && !import_lodash4.default.isUndefined(v));
734
- if (!import_fs_extra3.default.pathExistsSync(CONFIG_PATH)) return new _ServiceConfig(external);
735
- const data = import_yaml.default.parse(import_fs_extra3.default.readFileSync(CONFIG_PATH).toString());
736
- return new _ServiceConfig({ ...data, ...external });
737
- }
738
- };
739
- var service_config_default = ServiceConfig.load();
740
-
741
- // src/lib/configs/system-config.ts
742
- var import_path4 = __toESM(require("path"), 1);
743
- var import_fs_extra4 = __toESM(require("fs-extra"), 1);
744
- var import_yaml2 = __toESM(require("yaml"), 1);
745
- var import_lodash5 = __toESM(require("lodash"), 1);
746
- var CONFIG_PATH2 = import_path4.default.join(import_path4.default.resolve(), "configs/", environment_default.env, "/system.yml");
747
- var SystemConfig = class _SystemConfig {
748
- /** 是否开启请求日志 */
749
- requestLog;
750
- /** 临时目录路径 */
751
- tmpDir;
752
- /** 日志目录路径 */
753
- logDir;
754
- /** 日志写入间隔(毫秒) */
755
- logWriteInterval;
756
- /** 日志文件有效期(毫秒) */
757
- logFileExpires;
758
- /** 临时文件有效期(毫秒) */
759
- tmpFileExpires;
760
- /** 请求体配置 */
761
- requestBody;
762
- /** 是否调试模式 */
763
- debug;
764
- /** 日志级别 */
765
- log_level;
766
- constructor(options) {
767
- const { requestLog, tmpDir, logDir, logWriteInterval, logFileExpires, tmpFileExpires, requestBody, debug, log_level } = options || {};
768
- this.requestLog = import_lodash5.default.defaultTo(requestLog, false);
769
- this.tmpDir = import_lodash5.default.defaultTo(tmpDir, "./tmp");
770
- this.logDir = import_lodash5.default.defaultTo(logDir, "./logs");
771
- this.logWriteInterval = import_lodash5.default.defaultTo(logWriteInterval, 200);
772
- this.logFileExpires = import_lodash5.default.defaultTo(logFileExpires, 262656e4);
773
- this.tmpFileExpires = import_lodash5.default.defaultTo(tmpFileExpires, 864e5);
774
- this.requestBody = Object.assign(requestBody || {}, {
775
- enableTypes: ["form", "text", "xml"],
776
- // 移除 json,由自定义中间件处理
777
- encoding: "utf-8",
778
- formLimit: "100mb",
779
- jsonLimit: "100mb",
780
- textLimit: "100mb",
781
- xmlLimit: "100mb",
782
- formidable: {
783
- maxFileSize: "100mb"
784
- },
785
- multipart: true,
786
- parsedMethods: ["POST", "PUT", "PATCH"]
787
- });
788
- this.debug = import_lodash5.default.defaultTo(debug, true);
789
- this.log_level = import_lodash5.default.defaultTo(log_level, "info");
790
- }
791
- get rootDirPath() {
792
- return import_path4.default.resolve();
793
- }
794
- get tmpDirPath() {
795
- return import_path4.default.resolve(this.tmpDir);
796
- }
797
- get logDirPath() {
798
- return import_path4.default.resolve(this.logDir);
799
- }
800
- static load() {
801
- if (!import_fs_extra4.default.pathExistsSync(CONFIG_PATH2)) return new _SystemConfig();
802
- const data = import_yaml2.default.parse(import_fs_extra4.default.readFileSync(CONFIG_PATH2).toString());
803
- return new _SystemConfig(data);
804
- }
805
- };
806
- var system_config_default = SystemConfig.load();
807
-
808
- // src/lib/config.ts
809
- var Config = class {
810
- /** 服务配置 */
811
- service = service_config_default;
812
- /** 系统配置 */
813
- system = system_config_default;
814
- };
815
- var config_default = new Config();
816
-
817
755
  // src/lib/logger.ts
818
756
  var isVercelEnv = process.env.VERCEL;
819
757
  var isCliSilentLogs = () => process.env.JIMENG_CLI_SILENT_LOGS === "true";
@@ -821,7 +759,7 @@ var LogWriter = class {
821
759
  #buffers = [];
822
760
  #timer = null;
823
761
  constructor() {
824
- !isVercelEnv && import_fs_extra5.default.ensureDirSync(config_default.system.logDirPath);
762
+ !isVercelEnv && import_fs_extra4.default.ensureDirSync(config_default.system.logDirPath);
825
763
  !isVercelEnv && this.work();
826
764
  }
827
765
  push(content) {
@@ -829,14 +767,14 @@ var LogWriter = class {
829
767
  this.#buffers.push(buffer);
830
768
  }
831
769
  writeSync(buffer) {
832
- !isVercelEnv && import_fs_extra5.default.appendFileSync(import_path5.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), buffer);
770
+ !isVercelEnv && import_fs_extra4.default.appendFileSync(import_path4.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), buffer);
833
771
  }
834
772
  async write(buffer) {
835
- !isVercelEnv && await import_fs_extra5.default.appendFile(import_path5.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), buffer);
773
+ !isVercelEnv && await import_fs_extra4.default.appendFile(import_path4.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), buffer);
836
774
  }
837
775
  flush() {
838
776
  if (!this.#buffers.length) return;
839
- !isVercelEnv && import_fs_extra5.default.appendFileSync(import_path5.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), Buffer.concat(this.#buffers));
777
+ !isVercelEnv && import_fs_extra4.default.appendFileSync(import_path4.default.join(config_default.system.logDirPath, `/${util_default.getDateString()}.log`), Buffer.concat(this.#buffers));
840
778
  this.#buffers = [];
841
779
  }
842
780
  destroy() {
@@ -865,7 +803,7 @@ var LogText = class {
865
803
  time = /* @__PURE__ */ new Date();
866
804
  constructor(level, ...params) {
867
805
  this.level = level;
868
- this.text = import_util2.default.format.apply(null, params);
806
+ this.text = import_util.default.format.apply(null, params);
869
807
  this.source = this.#getStackTopCodeInfo();
870
808
  }
871
809
  #getStackTopCodeInfo() {
@@ -875,7 +813,7 @@ var LogText = class {
875
813
  if (!text)
876
814
  return unknownInfo;
877
815
  const match = text.match(/at (.+) \((.+)\)/) || text.match(/at (.+)/);
878
- if (!match || !import_lodash6.default.isString(match[2] || match[1]))
816
+ if (!match || !import_lodash5.default.isString(match[2] || match[1]))
879
817
  return unknownInfo;
880
818
  const temp = match[2] || match[1];
881
819
  const _match = temp.match(/([a-zA-Z0-9_\-\.]+)\:(\d+)\:(\d+)$/);
@@ -1195,7 +1133,7 @@ async function acquireToken(refreshToken) {
1195
1133
  }
1196
1134
  var REGION_PREFIX_PATTERN = /^(us|hk|jp|sg)-/i;
1197
1135
  function parseRegionCode(value) {
1198
- if (!import_lodash7.default.isString(value)) return null;
1136
+ if (!import_lodash6.default.isString(value)) return null;
1199
1137
  const normalized = value.trim().toLowerCase();
1200
1138
  if (normalized === "cn" || normalized === "us" || normalized === "hk" || normalized === "jp" || normalized === "sg") {
1201
1139
  return normalized;
@@ -1396,7 +1334,7 @@ async function request(method, uri, refreshToken, regionInfo, options = {}) {
1396
1334
  // 增加超时时间到45秒
1397
1335
  validateStatus: () => true,
1398
1336
  // 允许任何状态码
1399
- ...import_lodash7.default.omit(options, "params", "headers"),
1337
+ ...import_lodash6.default.omit(options, "params", "headers"),
1400
1338
  ...proxyAgent ? { httpAgent: proxyAgent, httpsAgent: proxyAgent, proxy: false } : {}
1401
1339
  });
1402
1340
  logger_default.info(`\u54CD\u5E94\u72B6\u6001: ${response.status} ${response.statusText}`);
@@ -1483,7 +1421,7 @@ async function checkImageContent(imageUri, refreshToken, regionInfo) {
1483
1421
  }
1484
1422
  function checkResult(result) {
1485
1423
  const { ret, errmsg, data } = result.data;
1486
- if (!import_lodash7.default.isFinite(Number(ret))) return result.data;
1424
+ if (!import_lodash6.default.isFinite(Number(ret))) return result.data;
1487
1425
  if (ret === "0") return data;
1488
1426
  JimengErrorHandler.handleApiResponse(result.data, {
1489
1427
  context: "\u5373\u68A6API\u8BF7\u6C42",
@@ -1747,9 +1685,9 @@ var RegionUtils = class {
1747
1685
  /**
1748
1686
  * 获取Referer路径
1749
1687
  */
1750
- static getRefererPath(regionInfo, path8 = "/ai-tool/generate") {
1688
+ static getRefererPath(regionInfo, path7 = "/ai-tool/generate") {
1751
1689
  const origin = this.getOrigin(regionInfo);
1752
- return `${origin}${path8}`;
1690
+ return `${origin}${path7}`;
1753
1691
  }
1754
1692
  };
1755
1693
 
@@ -2372,7 +2310,7 @@ function buildBlendAbilityList(uploadedImageIds, strength) {
2372
2310
  }));
2373
2311
  }
2374
2312
  function buildPromptPlaceholderList(count) {
2375
- return Array.from({ length: count }, (_9, index) => ({
2313
+ return Array.from({ length: count }, (_8, index) => ({
2376
2314
  type: "",
2377
2315
  id: util_default.uuid(),
2378
2316
  ability_index: index
@@ -2872,9 +2810,9 @@ async function generateJimeng4xMultiImages(_model, prompt, {
2872
2810
  }
2873
2811
 
2874
2812
  // src/lib/session-pool.ts
2875
- var import_path6 = __toESM(require("path"), 1);
2876
- var import_fs_extra6 = __toESM(require("fs-extra"), 1);
2877
- var import_lodash8 = __toESM(require("lodash"), 1);
2813
+ var import_path5 = __toESM(require("path"), 1);
2814
+ var import_fs_extra5 = __toESM(require("fs-extra"), 1);
2815
+ var import_lodash7 = __toESM(require("lodash"), 1);
2878
2816
  var DYNAMIC_CAPABILITY_TTL_MS = 30 * 60 * 1e3;
2879
2817
  var TokenPool = class {
2880
2818
  enabled;
@@ -2892,7 +2830,7 @@ var TokenPool = class {
2892
2830
  roundRobinCursor = 0;
2893
2831
  constructor() {
2894
2832
  this.enabled = process.env.TOKEN_POOL_ENABLED !== "false";
2895
- this.filePath = import_path6.default.resolve(
2833
+ this.filePath = import_path5.default.resolve(
2896
2834
  process.env.TOKEN_POOL_FILE || "configs/token-pool.json"
2897
2835
  );
2898
2836
  this.healthCheckIntervalMs = Number(
@@ -2964,7 +2902,7 @@ var TokenPool = class {
2964
2902
  return this.pickTokenFromAuthorizationDetailed(authorization).token;
2965
2903
  }
2966
2904
  pickTokenFromAuthorizationDetailed(authorization) {
2967
- if (import_lodash8.default.isString(authorization)) {
2905
+ if (import_lodash7.default.isString(authorization)) {
2968
2906
  if (authorization.trim().length === 0) return { token: this.pickToken(), error: null };
2969
2907
  if (!/^Bearer\s+/i.test(authorization)) {
2970
2908
  return { token: null, error: "invalid_authorization_format" };
@@ -2973,7 +2911,7 @@ var TokenPool = class {
2973
2911
  if (tokens.length === 0) {
2974
2912
  return { token: null, error: "empty_authorization_tokens" };
2975
2913
  }
2976
- return { token: import_lodash8.default.sample(tokens) || null, error: null };
2914
+ return { token: import_lodash7.default.sample(tokens) || null, error: null };
2977
2915
  }
2978
2916
  return { token: this.pickToken(), error: null };
2979
2917
  }
@@ -2986,7 +2924,7 @@ var TokenPool = class {
2986
2924
  this.roundRobinCursor++;
2987
2925
  return token;
2988
2926
  }
2989
- return import_lodash8.default.sample(tokens) || null;
2927
+ return import_lodash7.default.sample(tokens) || null;
2990
2928
  }
2991
2929
  pickTokenForRequest({
2992
2930
  authorization,
@@ -2996,7 +2934,7 @@ var TokenPool = class {
2996
2934
  xRegion
2997
2935
  }) {
2998
2936
  const xRegionCode = parseRegionCode(xRegion);
2999
- if (import_lodash8.default.isString(xRegion) && xRegion.trim().length > 0 && !xRegionCode) {
2937
+ if (import_lodash7.default.isString(xRegion) && xRegion.trim().length > 0 && !xRegionCode) {
3000
2938
  return { token: null, region: null, error: "unsupported_region", reason: "X-Region \u4EC5\u652F\u6301 cn/us/hk/jp/sg" };
3001
2939
  }
3002
2940
  const authParseResult = this.parseAuthorizationTokens(authorization);
@@ -3193,14 +3131,14 @@ var TokenPool = class {
3193
3131
  if (typeof this.healthCheckTimer.unref === "function") this.healthCheckTimer.unref();
3194
3132
  }
3195
3133
  async loadFromDisk() {
3196
- await import_fs_extra6.default.ensureDir(import_path6.default.dirname(this.filePath));
3197
- if (!await import_fs_extra6.default.pathExists(this.filePath)) {
3134
+ await import_fs_extra5.default.ensureDir(import_path5.default.dirname(this.filePath));
3135
+ if (!await import_fs_extra5.default.pathExists(this.filePath)) {
3198
3136
  await this.persistToDisk();
3199
3137
  return;
3200
3138
  }
3201
3139
  let data = null;
3202
3140
  try {
3203
- data = await import_fs_extra6.default.readJson(this.filePath);
3141
+ data = await import_fs_extra5.default.readJson(this.filePath);
3204
3142
  } catch (err) {
3205
3143
  logger_default.warn(`Token pool file parse failed, fallback to empty: ${(err == null ? void 0 : err.message) || String(err)}`);
3206
3144
  data = null;
@@ -3215,10 +3153,10 @@ var TokenPool = class {
3215
3153
  token,
3216
3154
  region: parsedRegion || void 0,
3217
3155
  enabled: raw.enabled !== false,
3218
- live: import_lodash8.default.isBoolean(raw.live) ? raw.live : void 0,
3219
- lastCheckedAt: import_lodash8.default.isFinite(Number(raw.lastCheckedAt)) ? Number(raw.lastCheckedAt) : void 0,
3220
- lastError: import_lodash8.default.isString(raw.lastError) ? raw.lastError : void 0,
3221
- lastCredit: import_lodash8.default.isFinite(Number(raw.lastCredit)) ? Number(raw.lastCredit) : void 0,
3156
+ live: import_lodash7.default.isBoolean(raw.live) ? raw.live : void 0,
3157
+ lastCheckedAt: import_lodash7.default.isFinite(Number(raw.lastCheckedAt)) ? Number(raw.lastCheckedAt) : void 0,
3158
+ lastError: import_lodash7.default.isString(raw.lastError) ? raw.lastError : void 0,
3159
+ lastCredit: import_lodash7.default.isFinite(Number(raw.lastCredit)) ? Number(raw.lastCredit) : void 0,
3222
3160
  consecutiveFailures: Math.max(0, Number(raw.consecutiveFailures) || 0),
3223
3161
  allowedModels: this.normalizeStringArray(raw.allowedModels),
3224
3162
  capabilityTags: this.normalizeStringArray(raw.capabilityTags),
@@ -3229,19 +3167,19 @@ var TokenPool = class {
3229
3167
  for (const [token, item] of nextMap.entries()) this.entryMap.set(token, item);
3230
3168
  }
3231
3169
  async persistToDisk() {
3232
- await import_fs_extra6.default.ensureDir(import_path6.default.dirname(this.filePath));
3170
+ await import_fs_extra5.default.ensureDir(import_path5.default.dirname(this.filePath));
3233
3171
  const payload = {
3234
3172
  updatedAt: Date.now(),
3235
3173
  tokens: this.getEntries(false)
3236
3174
  };
3237
- await import_fs_extra6.default.writeJson(this.filePath, payload, { spaces: 2 });
3175
+ await import_fs_extra5.default.writeJson(this.filePath, payload, { spaces: 2 });
3238
3176
  }
3239
3177
  maskToken(token) {
3240
3178
  if (token.length <= 10) return "***";
3241
3179
  return `${token.slice(0, 4)}...${token.slice(-4)}`;
3242
3180
  }
3243
3181
  parseAuthorizationTokens(authorization) {
3244
- if (!import_lodash8.default.isString(authorization) || authorization.trim().length === 0) {
3182
+ if (!import_lodash7.default.isString(authorization) || authorization.trim().length === 0) {
3245
3183
  return { tokens: [], error: null };
3246
3184
  }
3247
3185
  if (!/^Bearer\s+/i.test(authorization)) {
@@ -3254,7 +3192,7 @@ var TokenPool = class {
3254
3192
  normalizeAddTokens(rawTokens, defaultRegion) {
3255
3193
  const normalized = [];
3256
3194
  for (const item of rawTokens) {
3257
- if (import_lodash8.default.isString(item)) {
3195
+ if (import_lodash7.default.isString(item)) {
3258
3196
  const token2 = item.trim();
3259
3197
  if (!token2) continue;
3260
3198
  if (!defaultRegion) {
@@ -3292,7 +3230,7 @@ var TokenPool = class {
3292
3230
  imageModels: this.normalizeStringArray(data.imageModels),
3293
3231
  videoModels: this.normalizeStringArray(data.videoModels),
3294
3232
  capabilityTags: this.normalizeStringArray(data.capabilityTags),
3295
- updatedAt: import_lodash8.default.isFinite(Number(data.updatedAt)) ? Number(data.updatedAt) : void 0
3233
+ updatedAt: import_lodash7.default.isFinite(Number(data.updatedAt)) ? Number(data.updatedAt) : void 0
3296
3234
  };
3297
3235
  if (!dynamic.imageModels && !dynamic.videoModels && !dynamic.capabilityTags && !dynamic.updatedAt) {
3298
3236
  return void 0;
@@ -3337,7 +3275,7 @@ var TokenPool = class {
3337
3275
  this.roundRobinCursor++;
3338
3276
  return item;
3339
3277
  }
3340
- return import_lodash8.default.sample(candidates) || candidates[0];
3278
+ return import_lodash7.default.sample(candidates) || candidates[0];
3341
3279
  }
3342
3280
  matchesModelAndCapabilities(candidate, requestedModel, taskType, requiredCapabilityTags) {
3343
3281
  var _a, _b, _c, _d;
@@ -3717,7 +3655,7 @@ async function waitForTaskResponse(taskId, refreshToken, regionInfo, options = {
3717
3655
  }
3718
3656
 
3719
3657
  // src/api/controllers/videos.ts
3720
- var import_fs_extra7 = __toESM(require("fs-extra"), 1);
3658
+ var import_fs_extra6 = __toESM(require("fs-extra"), 1);
3721
3659
  var import_axios5 = __toESM(require("axios"), 1);
3722
3660
 
3723
3661
  // src/lib/video-uploader.ts
@@ -4009,7 +3947,7 @@ function getVideoBenefitType(model) {
4009
3947
  async function uploadImageFromFile(file, refreshToken, regionInfo) {
4010
3948
  try {
4011
3949
  logger_default.info(`\u5F00\u59CB\u4ECE\u672C\u5730\u6587\u4EF6\u4E0A\u4F20\u89C6\u9891\u56FE\u7247: ${file.originalFilename} (\u8DEF\u5F84: ${file.filepath})`);
4012
- const imageBuffer = await import_fs_extra7.default.readFile(file.filepath);
3950
+ const imageBuffer = await import_fs_extra6.default.readFile(file.filepath);
4013
3951
  return await uploadImageBuffer(imageBuffer, refreshToken, regionInfo);
4014
3952
  } catch (error) {
4015
3953
  logger_default.error(`\u4ECE\u672C\u5730\u6587\u4EF6\u4E0A\u4F20\u89C6\u9891\u56FE\u7247\u5931\u8D25: ${error.message}`);
@@ -4220,7 +4158,7 @@ async function generateVideo(_model, prompt, {
4220
4158
  throw new APIException(exceptions_default.API_REQUEST_FAILED, `${fieldName} \u4E0D\u652F\u6301\u91CD\u590D\u4E0A\u4F20\u591A\u4E2A\u6587\u4EF6`);
4221
4159
  }
4222
4160
  if (imageFile) {
4223
- const buf = await import_fs_extra7.default.readFile(imageFile.filepath);
4161
+ const buf = await import_fs_extra6.default.readFile(imageFile.filepath);
4224
4162
  imgResult = await uploadImageBuffer(buf, refreshToken, regionInfo);
4225
4163
  await checkImageContent(imgResult.uri, refreshToken, regionInfo);
4226
4164
  const entry = {
@@ -4297,7 +4235,7 @@ async function generateVideo(_model, prompt, {
4297
4235
  throw new APIException(exceptions_default.API_REQUEST_FAILED, `${fieldName} \u4E0D\u652F\u6301\u91CD\u590D\u4E0A\u4F20\u591A\u4E2A\u6587\u4EF6`);
4298
4236
  }
4299
4237
  if (videoFile) {
4300
- const buf = await import_fs_extra7.default.readFile(videoFile.filepath);
4238
+ const buf = await import_fs_extra6.default.readFile(videoFile.filepath);
4301
4239
  vResult = await uploadVideoBuffer(buf, refreshToken, regionInfo);
4302
4240
  totalVideoDuration += vResult.videoMeta.duration;
4303
4241
  const entry = {
@@ -5069,7 +5007,7 @@ function assertRunConfirm(config, confirm) {
5069
5007
  var z = __toESM(require("zod"), 1);
5070
5008
  function buildIndexedUrlFields(prefix, max) {
5071
5009
  return Object.fromEntries(
5072
- Array.from({ length: max }, (_9, index) => [
5010
+ Array.from({ length: max }, (_8, index) => [
5073
5011
  `${prefix}_${index + 1}`,
5074
5012
  z.string().url().optional()
5075
5013
  ])
@@ -5147,8 +5085,8 @@ var generateVideoOmniInputSchema = z.object({
5147
5085
  confirm: z.string().optional()
5148
5086
  }).superRefine((value, ctx) => {
5149
5087
  var _a, _b;
5150
- const imageSlotUrls = Array.from({ length: 9 }, (_9, index) => value[`image_file_${index + 1}`]);
5151
- const videoSlotUrls = Array.from({ length: 3 }, (_9, index) => value[`video_file_${index + 1}`]);
5088
+ const imageSlotUrls = Array.from({ length: 9 }, (_8, index) => value[`image_file_${index + 1}`]);
5089
+ const videoSlotUrls = Array.from({ length: 3 }, (_8, index) => value[`video_file_${index + 1}`]);
5152
5090
  const imageCount = normalizeUniqueValues(value.image_urls || []).length + (((_a = value.image_files) == null ? void 0 : _a.length) || 0) + normalizeUniqueValues([...value.file_paths || [], ...value.filePaths || []]).length + normalizeUniqueValues(imageSlotUrls.filter((item) => typeof item === "string")).length;
5153
5091
  const videoCount = normalizeUniqueValues(value.video_urls || []).length + (((_b = value.video_files) == null ? void 0 : _b.length) || 0) + normalizeUniqueValues(videoSlotUrls.filter((item) => typeof item === "string")).length;
5154
5092
  if (imageCount > 9) {