jimeng-cli 0.3.2 → 0.3.3
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/{chunk-FAXTAAQO.js → chunk-ZMTQQZFH.js} +309 -281
- package/dist/{chunk-FAXTAAQO.js.map → chunk-ZMTQQZFH.js.map} +1 -1
- package/dist/cli/index.cjs +389 -343
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +87 -65
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/index.cjs +147 -122
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/package.json +1 -1
package/dist/mcp/index.cjs
CHANGED
|
@@ -5571,7 +5571,6 @@ var import_node_path = __toESM(require("path"), 1);
|
|
|
5571
5571
|
// src/api/consts/common.ts
|
|
5572
5572
|
var BASE_URL_CN = "https://jimeng.jianying.com";
|
|
5573
5573
|
var BASE_URL_US_COMMERCE = "https://commerce.us.capcut.com";
|
|
5574
|
-
var BASE_URL_HK_COMMERCE = "https://commerce-api-sg.capcut.com";
|
|
5575
5574
|
var DEFAULT_ASSISTANT_ID_CN = 513695;
|
|
5576
5575
|
var DEFAULT_ASSISTANT_ID_US = 513641;
|
|
5577
5576
|
var DEFAULT_ASSISTANT_ID_HK = 513641;
|
|
@@ -5587,9 +5586,9 @@ var VERSION_CODE = "8.4.0";
|
|
|
5587
5586
|
var DEFAULT_IMAGE_MODEL = "jimeng-4.5";
|
|
5588
5587
|
var DEFAULT_IMAGE_MODEL_US = "jimeng-4.5";
|
|
5589
5588
|
var DEFAULT_VIDEO_MODEL = "jimeng-video-3.5-pro";
|
|
5590
|
-
var DRAFT_VERSION = "3.3.
|
|
5589
|
+
var DRAFT_VERSION = "3.3.12";
|
|
5591
5590
|
var DRAFT_MIN_VERSION = "3.0.2";
|
|
5592
|
-
var DRAFT_VERSION_OMNI = "3.3.
|
|
5591
|
+
var DRAFT_VERSION_OMNI = "3.3.12";
|
|
5593
5592
|
var OMNI_BENEFIT_TYPE = "dreamina_video_seedance_20_video_add";
|
|
5594
5593
|
var OMNI_BENEFIT_TYPE_FAST = "dreamina_seedance_20_fast_with_video";
|
|
5595
5594
|
var IMAGE_MODEL_MAP = {
|
|
@@ -5605,6 +5604,8 @@ var IMAGE_MODEL_MAP = {
|
|
|
5605
5604
|
"jimeng-lab": "high_aes_general_v50_lab"
|
|
5606
5605
|
};
|
|
5607
5606
|
var IMAGE_MODEL_MAP_US = {
|
|
5607
|
+
"jimeng-5.0": "high_aes_general_v50",
|
|
5608
|
+
"jimeng-4.6": "high_aes_general_v42",
|
|
5608
5609
|
"jimeng-4.5": "high_aes_general_v40l",
|
|
5609
5610
|
"jimeng-4.1": "high_aes_general_v41",
|
|
5610
5611
|
"jimeng-4.0": "high_aes_general_v40",
|
|
@@ -5618,6 +5619,7 @@ var IMAGE_MODEL_MAP_ASIA = {
|
|
|
5618
5619
|
"jimeng-4.5": "high_aes_general_v40l",
|
|
5619
5620
|
"jimeng-4.1": "high_aes_general_v41",
|
|
5620
5621
|
"jimeng-4.0": "high_aes_general_v40",
|
|
5622
|
+
"jimeng-3.1": "high_aes_general_v30l_art:general_v3.0_18b",
|
|
5621
5623
|
"jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b",
|
|
5622
5624
|
"nanobanana": "external_model_gemini_flash_image_v25",
|
|
5623
5625
|
"nanobananapro": "dreamina_image_lib_1"
|
|
@@ -5635,10 +5637,14 @@ var VIDEO_MODEL_MAP = {
|
|
|
5635
5637
|
"jimeng-video-2.0-pro": "dreamina_ic_generate_video_model_vgfm1.0"
|
|
5636
5638
|
};
|
|
5637
5639
|
var VIDEO_MODEL_MAP_US = {
|
|
5640
|
+
"jimeng-video-seedance-2.0": "dreamina_seedance_40_pro",
|
|
5641
|
+
"jimeng-video-seedance-2.0-fast": "dreamina_seedance_40",
|
|
5638
5642
|
"jimeng-video-3.5-pro": "dreamina_ic_generate_video_model_vgfm_3.5_pro",
|
|
5639
5643
|
"jimeng-video-3.0": "dreamina_ic_generate_video_model_vgfm_3.0"
|
|
5640
5644
|
};
|
|
5641
5645
|
var VIDEO_MODEL_MAP_ASIA = {
|
|
5646
|
+
"jimeng-video-seedance-2.0": "dreamina_seedance_40_pro",
|
|
5647
|
+
"jimeng-video-seedance-2.0-fast": "dreamina_seedance_40",
|
|
5642
5648
|
"jimeng-video-veo3": "dreamina_veo3_generate_video",
|
|
5643
5649
|
"jimeng-video-veo3.1": "dreamina_veo3.1_generate_video",
|
|
5644
5650
|
"jimeng-video-sora2": "dreamina_sora2_generate_video",
|
|
@@ -5941,6 +5947,10 @@ var util = {
|
|
|
5941
5947
|
return ((crc ^ -1) >>> 0).toString(16).padStart(8, "0");
|
|
5942
5948
|
}
|
|
5943
5949
|
};
|
|
5950
|
+
function maskToken(token) {
|
|
5951
|
+
if (token.length <= 10) return "***";
|
|
5952
|
+
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
5953
|
+
}
|
|
5944
5954
|
var util_default = util;
|
|
5945
5955
|
|
|
5946
5956
|
// src/lib/logger.ts
|
|
@@ -6140,6 +6150,8 @@ var JimengErrorHandler = class {
|
|
|
6140
6150
|
throw new APIException(exceptions_default.API_IMAGE_GENERATION_FAILED, `[\u751F\u6210\u5931\u8D25]: ${errmsg}`);
|
|
6141
6151
|
case "5002":
|
|
6142
6152
|
throw new APIException(exceptions_default.API_VIDEO_GENERATION_FAILED, `[\u89C6\u9891\u751F\u6210\u5931\u8D25]: ${errmsg}`);
|
|
6153
|
+
case "34010105":
|
|
6154
|
+
throw new APIException(exceptions_default.API_REQUEST_FAILED, `[\u767B\u5F55\u9A8C\u8BC1\u5931\u8D25]: ${errmsg} (\u9519\u8BEF\u7801: ${ret})`);
|
|
6143
6155
|
default:
|
|
6144
6156
|
throw new APIException(exceptions_default.API_REQUEST_FAILED, `[${operation}\u5931\u8D25]: ${errmsg} (\u9519\u8BEF\u7801: ${ret})`);
|
|
6145
6157
|
}
|
|
@@ -6251,6 +6263,7 @@ var DA_VERSION = "3.3.12";
|
|
|
6251
6263
|
var DEVICE_ID = Math.random() * 1e18 + 7e18;
|
|
6252
6264
|
var WEB_ID = Math.random() * 1e18 + 7e18;
|
|
6253
6265
|
var USER_ID = util_default.uuid(false);
|
|
6266
|
+
var INTERNATIONAL_FRONTEND_ORIGIN = "https://dreamina.capcut.com";
|
|
6254
6267
|
var FAKE_HEADERS = {
|
|
6255
6268
|
Accept: "application/json, text/plain, */*",
|
|
6256
6269
|
"Accept-Encoding": "gzip, deflate, br, zstd",
|
|
@@ -6374,8 +6387,7 @@ function parseProxyFromToken(rawToken) {
|
|
|
6374
6387
|
return { token, proxyUrl };
|
|
6375
6388
|
}
|
|
6376
6389
|
function getRefererByRegion(regionInfo, cnPath) {
|
|
6377
|
-
|
|
6378
|
-
return isInternational ? "https://dreamina.capcut.com/" : `https://jimeng.jianying.com${cnPath}`;
|
|
6390
|
+
return regionInfo.isInternational ? `${INTERNATIONAL_FRONTEND_ORIGIN}/` : `${BASE_URL_CN}${cnPath}`;
|
|
6379
6391
|
}
|
|
6380
6392
|
function getAssistantId(regionInfo) {
|
|
6381
6393
|
if (regionInfo.isUS) return DEFAULT_ASSISTANT_ID_US;
|
|
@@ -6406,12 +6418,14 @@ function generateCookie(refreshToken) {
|
|
|
6406
6418
|
}
|
|
6407
6419
|
async function getCredit(refreshToken, regionInfo) {
|
|
6408
6420
|
const referer = getRefererByRegion(regionInfo, "/ai-tool/image/generate");
|
|
6421
|
+
const origin = regionInfo.isInternational ? INTERNATIONAL_FRONTEND_ORIGIN : void 0;
|
|
6409
6422
|
const {
|
|
6410
6423
|
credit: { gift_credit, purchase_credit, vip_credit }
|
|
6411
6424
|
} = await request("POST", "/commerce/v1/benefits/user_credit", refreshToken, regionInfo, {
|
|
6412
6425
|
data: {},
|
|
6413
6426
|
headers: {
|
|
6414
|
-
Referer: referer
|
|
6427
|
+
Referer: referer,
|
|
6428
|
+
...origin ? { Origin: origin } : {}
|
|
6415
6429
|
},
|
|
6416
6430
|
noDefaultParams: true
|
|
6417
6431
|
});
|
|
@@ -6428,13 +6442,15 @@ async function getCredit(refreshToken, regionInfo) {
|
|
|
6428
6442
|
async function receiveCredit(refreshToken, regionInfo) {
|
|
6429
6443
|
logger_default.info("\u6B63\u5728\u5C1D\u8BD5\u6536\u53D6\u4ECA\u65E5\u79EF\u5206...");
|
|
6430
6444
|
const referer = getRefererByRegion(regionInfo, "/ai-tool/home");
|
|
6445
|
+
const origin = regionInfo.isInternational ? INTERNATIONAL_FRONTEND_ORIGIN : void 0;
|
|
6431
6446
|
const timeZone = regionInfo.isUS ? "America/New_York" : regionInfo.isHK ? "Asia/Hong_Kong" : regionInfo.isJP ? "Asia/Tokyo" : regionInfo.isSG ? "Asia/Singapore" : "Asia/Shanghai";
|
|
6432
6447
|
const { receive_quota } = await request("POST", "/commerce/v1/benefits/credit_receive", refreshToken, regionInfo, {
|
|
6433
6448
|
data: {
|
|
6434
6449
|
time_zone: timeZone
|
|
6435
6450
|
},
|
|
6436
6451
|
headers: {
|
|
6437
|
-
Referer: referer
|
|
6452
|
+
Referer: referer,
|
|
6453
|
+
...origin ? { Origin: origin } : {}
|
|
6438
6454
|
}
|
|
6439
6455
|
});
|
|
6440
6456
|
logger_default.info(`\u4ECA\u65E5${receive_quota}\u79EF\u5206\u6536\u53D6\u6210\u529F`);
|
|
@@ -6462,7 +6478,7 @@ async function request(method, uri, refreshToken, regionInfo, options = {}) {
|
|
|
6462
6478
|
region = REGION_US;
|
|
6463
6479
|
} else if (isHK || isJP || isSG) {
|
|
6464
6480
|
if (uri.startsWith("/commerce/")) {
|
|
6465
|
-
baseUrl =
|
|
6481
|
+
baseUrl = BASE_URL_US_COMMERCE;
|
|
6466
6482
|
} else {
|
|
6467
6483
|
baseUrl = BASE_URL_DREAMINA_HK;
|
|
6468
6484
|
}
|
|
@@ -6542,7 +6558,8 @@ async function request(method, uri, refreshToken, regionInfo, options = {}) {
|
|
|
6542
6558
|
});
|
|
6543
6559
|
logger_default.info(`\u54CD\u5E94\u72B6\u6001: ${response.status} ${response.statusText}`);
|
|
6544
6560
|
if (options.responseType == "stream") return response;
|
|
6545
|
-
const
|
|
6561
|
+
const responseJson = JSON.stringify(response.data);
|
|
6562
|
+
const responseDataSummary = responseJson.substring(0, 500) + (responseJson.length > 500 ? "..." : "");
|
|
6546
6563
|
logger_default.info(`\u54CD\u5E94\u6570\u636E\u6458\u8981: ${responseDataSummary}`);
|
|
6547
6564
|
if (response.status >= 400) {
|
|
6548
6565
|
logger_default.warn(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
|
|
@@ -6660,7 +6677,7 @@ async function checkInternationalTokenLive(refreshToken, regionInfo) {
|
|
|
6660
6677
|
const cookie = generateCookie(refreshToken);
|
|
6661
6678
|
try {
|
|
6662
6679
|
const response = await import_axios2.default.get(
|
|
6663
|
-
|
|
6680
|
+
`${INTERNATIONAL_FRONTEND_ORIGIN}/passport/web/account/info/`,
|
|
6664
6681
|
{
|
|
6665
6682
|
params: {
|
|
6666
6683
|
aid,
|
|
@@ -6671,8 +6688,8 @@ async function checkInternationalTokenLive(refreshToken, regionInfo) {
|
|
|
6671
6688
|
headers: {
|
|
6672
6689
|
...FAKE_HEADERS,
|
|
6673
6690
|
Cookie: cookie,
|
|
6674
|
-
Referer:
|
|
6675
|
-
Origin:
|
|
6691
|
+
Referer: `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/home/`,
|
|
6692
|
+
Origin: INTERNATIONAL_FRONTEND_ORIGIN,
|
|
6676
6693
|
Appid: String(aid),
|
|
6677
6694
|
"store-country-code": countryCode,
|
|
6678
6695
|
"store-country-code-src": "uid"
|
|
@@ -7660,7 +7677,7 @@ async function generateImageComposition(_model, prompt, images, {
|
|
|
7660
7677
|
abilityName: "byte_edit",
|
|
7661
7678
|
strength: sampleStrength,
|
|
7662
7679
|
source: {
|
|
7663
|
-
imageUrl: `blob
|
|
7680
|
+
imageUrl: `blob:${INTERNATIONAL_FRONTEND_ORIGIN}/${util_default.uuid()}`
|
|
7664
7681
|
}
|
|
7665
7682
|
}));
|
|
7666
7683
|
const metricsExtra = buildMetricsExtra({
|
|
@@ -7695,7 +7712,7 @@ async function generateImageComposition(_model, prompt, images, {
|
|
|
7695
7712
|
draftContent,
|
|
7696
7713
|
metricsExtra
|
|
7697
7714
|
});
|
|
7698
|
-
const imageReferer = regionInfo.isCN ?
|
|
7715
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
7699
7716
|
const { aigc_data } = await request(
|
|
7700
7717
|
"post",
|
|
7701
7718
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -7859,7 +7876,7 @@ async function generateImagesInternal(_model, prompt, {
|
|
|
7859
7876
|
draftContent,
|
|
7860
7877
|
metricsExtra
|
|
7861
7878
|
});
|
|
7862
|
-
const imageReferer = regionInfo.isCN ?
|
|
7879
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
7863
7880
|
const { aigc_data } = await request(
|
|
7864
7881
|
"post",
|
|
7865
7882
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -7981,7 +7998,7 @@ async function generateJimeng4xMultiImages(_model, prompt, {
|
|
|
7981
7998
|
draftContent,
|
|
7982
7999
|
metricsExtra
|
|
7983
8000
|
});
|
|
7984
|
-
const imageReferer = regionInfo.isCN ?
|
|
8001
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
7985
8002
|
const { aigc_data } = await request(
|
|
7986
8003
|
"post",
|
|
7987
8004
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -8153,7 +8170,7 @@ async function upscaleImage(_model, image, {
|
|
|
8153
8170
|
draftContent,
|
|
8154
8171
|
metricsExtra
|
|
8155
8172
|
});
|
|
8156
|
-
const imageReferer = regionInfo.isCN ?
|
|
8173
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
8157
8174
|
const { aigc_data } = await request(
|
|
8158
8175
|
"post",
|
|
8159
8176
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -8267,10 +8284,14 @@ var TokenPool = class {
|
|
|
8267
8284
|
);
|
|
8268
8285
|
}
|
|
8269
8286
|
getSummary() {
|
|
8270
|
-
|
|
8271
|
-
|
|
8272
|
-
|
|
8273
|
-
const
|
|
8287
|
+
let enabledCount = 0;
|
|
8288
|
+
let liveCount = 0;
|
|
8289
|
+
let missingRegionCount = 0;
|
|
8290
|
+
for (const item of this.entryMap.values()) {
|
|
8291
|
+
if (item.enabled) enabledCount++;
|
|
8292
|
+
if (item.enabled && item.live === true) liveCount++;
|
|
8293
|
+
if (!item.region) missingRegionCount++;
|
|
8294
|
+
}
|
|
8274
8295
|
return {
|
|
8275
8296
|
enabled: this.enabled,
|
|
8276
8297
|
filePath: this.filePath,
|
|
@@ -8279,19 +8300,19 @@ var TokenPool = class {
|
|
|
8279
8300
|
fetchCreditOnCheck: this.fetchCreditOnCheck,
|
|
8280
8301
|
autoDisableEnabled: this.autoDisableEnabled,
|
|
8281
8302
|
autoDisableFailures: this.autoDisableFailures,
|
|
8282
|
-
total:
|
|
8303
|
+
total: this.entryMap.size,
|
|
8283
8304
|
enabledCount,
|
|
8284
8305
|
liveCount,
|
|
8285
8306
|
missingRegionCount,
|
|
8286
8307
|
lastHealthCheckAt: this.lastHealthCheckAt || null
|
|
8287
8308
|
};
|
|
8288
8309
|
}
|
|
8289
|
-
getEntries(
|
|
8310
|
+
getEntries(shouldMask = true) {
|
|
8290
8311
|
const items = Array.from(this.entryMap.values()).map((item) => ({ ...item }));
|
|
8291
|
-
if (!
|
|
8312
|
+
if (!shouldMask) return items;
|
|
8292
8313
|
return items.map((item) => ({
|
|
8293
8314
|
...item,
|
|
8294
|
-
token:
|
|
8315
|
+
token: maskToken(item.token)
|
|
8295
8316
|
}));
|
|
8296
8317
|
}
|
|
8297
8318
|
getAllTokens(options = {}) {
|
|
@@ -8362,7 +8383,7 @@ var TokenPool = class {
|
|
|
8362
8383
|
token: null,
|
|
8363
8384
|
region: null,
|
|
8364
8385
|
error: "prefixed_token_not_supported",
|
|
8365
|
-
reason: `token ${
|
|
8386
|
+
reason: `token ${maskToken(prefixedCandidate.token)} \u4F7F\u7528\u4E86\u5DF2\u5E9F\u5F03\u7684 region \u524D\u7F00`
|
|
8366
8387
|
};
|
|
8367
8388
|
}
|
|
8368
8389
|
const regionLockedCandidates = validCandidates.filter(
|
|
@@ -8468,8 +8489,8 @@ var TokenPool = class {
|
|
|
8468
8489
|
async refreshDynamicCapabilitiesForToken(token) {
|
|
8469
8490
|
if (!this.enabled) throw new Error("Token pool disabled");
|
|
8470
8491
|
const item = this.entryMap.get(token);
|
|
8471
|
-
if (!item) throw new Error(`Token not found in pool: ${
|
|
8472
|
-
if (!item.region) throw new Error(`Token ${
|
|
8492
|
+
if (!item) throw new Error(`Token not found in pool: ${maskToken(token)}`);
|
|
8493
|
+
if (!item.region) throw new Error(`Token ${maskToken(token)} has no region`);
|
|
8473
8494
|
const regionInfo = buildRegionInfo(item.region);
|
|
8474
8495
|
const capabilities = await this.fetchDynamicCapabilities(token, regionInfo);
|
|
8475
8496
|
item.dynamicCapabilities = { ...capabilities, updatedAt: Date.now() };
|
|
@@ -8481,39 +8502,41 @@ var TokenPool = class {
|
|
|
8481
8502
|
* Returns a per-token result summary.
|
|
8482
8503
|
*/
|
|
8483
8504
|
async refreshAllDynamicCapabilities() {
|
|
8484
|
-
var _a, _b;
|
|
8485
8505
|
if (!this.enabled) return [];
|
|
8486
8506
|
const entries = this.getEntries(false).filter(
|
|
8487
8507
|
(item) => item.enabled && item.live !== false && Boolean(item.region)
|
|
8488
8508
|
);
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8494
|
-
|
|
8495
|
-
|
|
8496
|
-
current
|
|
8497
|
-
|
|
8498
|
-
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8507
|
-
|
|
8508
|
-
|
|
8509
|
-
|
|
8510
|
-
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
|
|
8514
|
-
|
|
8515
|
-
|
|
8516
|
-
|
|
8509
|
+
if (entries.length === 0) return [];
|
|
8510
|
+
const results = await Promise.all(
|
|
8511
|
+
entries.map(async (entry) => {
|
|
8512
|
+
var _a, _b;
|
|
8513
|
+
try {
|
|
8514
|
+
const regionInfo = buildRegionInfo(entry.region);
|
|
8515
|
+
const capabilities = await this.fetchDynamicCapabilities(entry.token, regionInfo);
|
|
8516
|
+
const current = this.entryMap.get(entry.token);
|
|
8517
|
+
if (current) {
|
|
8518
|
+
current.dynamicCapabilities = { ...capabilities, updatedAt: Date.now() };
|
|
8519
|
+
}
|
|
8520
|
+
return {
|
|
8521
|
+
token: maskToken(entry.token),
|
|
8522
|
+
region: entry.region,
|
|
8523
|
+
imageModels: ((_a = capabilities.imageModels) == null ? void 0 : _a.length) ?? 0,
|
|
8524
|
+
videoModels: ((_b = capabilities.videoModels) == null ? void 0 : _b.length) ?? 0,
|
|
8525
|
+
capabilityTags: capabilities.capabilityTags ?? []
|
|
8526
|
+
};
|
|
8527
|
+
} catch (err) {
|
|
8528
|
+
return {
|
|
8529
|
+
token: maskToken(entry.token),
|
|
8530
|
+
region: entry.region,
|
|
8531
|
+
imageModels: 0,
|
|
8532
|
+
videoModels: 0,
|
|
8533
|
+
capabilityTags: [],
|
|
8534
|
+
error: err instanceof Error ? err.message : String(err)
|
|
8535
|
+
};
|
|
8536
|
+
}
|
|
8537
|
+
})
|
|
8538
|
+
);
|
|
8539
|
+
await this.persistToDisk();
|
|
8517
8540
|
return results;
|
|
8518
8541
|
}
|
|
8519
8542
|
async runHealthCheck() {
|
|
@@ -8634,14 +8657,10 @@ var TokenPool = class {
|
|
|
8634
8657
|
await import_fs_extra4.default.ensureDir(import_path4.default.dirname(this.filePath));
|
|
8635
8658
|
const payload = {
|
|
8636
8659
|
updatedAt: Date.now(),
|
|
8637
|
-
tokens: this.
|
|
8660
|
+
tokens: Array.from(this.entryMap.values())
|
|
8638
8661
|
};
|
|
8639
8662
|
await import_fs_extra4.default.writeJson(this.filePath, payload, { spaces: 2 });
|
|
8640
8663
|
}
|
|
8641
|
-
maskToken(token) {
|
|
8642
|
-
if (token.length <= 10) return "***";
|
|
8643
|
-
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
8644
|
-
}
|
|
8645
8664
|
parseAuthorizationTokens(authorization) {
|
|
8646
8665
|
if (typeof authorization !== "string" || authorization.trim().length === 0) {
|
|
8647
8666
|
return { tokens: [], error: null };
|
|
@@ -8670,7 +8689,7 @@ var TokenPool = class {
|
|
|
8670
8689
|
if (!token) continue;
|
|
8671
8690
|
const parsedRegion = parseRegionCode(item.region || defaultRegion);
|
|
8672
8691
|
if (!parsedRegion) {
|
|
8673
|
-
throw new Error(`token ${
|
|
8692
|
+
throw new Error(`token ${maskToken(token)} \u7F3A\u5C11\u6709\u6548 region\uFF08\u4EC5\u652F\u6301 cn/us/hk/jp/sg\uFF09`);
|
|
8674
8693
|
}
|
|
8675
8694
|
normalized.push({
|
|
8676
8695
|
token,
|
|
@@ -8778,40 +8797,22 @@ var TokenPool = class {
|
|
|
8778
8797
|
}
|
|
8779
8798
|
async fetchDynamicCapabilities(token, regionInfo) {
|
|
8780
8799
|
const regionCode = regionInfo.isUS ? "us" : regionInfo.isHK ? "hk" : regionInfo.isJP ? "jp" : regionInfo.isSG ? "sg" : "cn";
|
|
8781
|
-
const reverseMap =
|
|
8782
|
-
const
|
|
8783
|
-
|
|
8784
|
-
|
|
8785
|
-
});
|
|
8786
|
-
const videoConfig = await request("post", "/mweb/v1/video_generate/get_common_config", token, regionInfo, {
|
|
8787
|
-
data: { scene: "generate_video", params: {} }
|
|
8788
|
-
});
|
|
8789
|
-
const imageReqKeys = Array.isArray(imageConfig == null ? void 0 : imageConfig.model_list) ? imageConfig.model_list.map((item) => typeof (item == null ? void 0 : item.model_req_key) === "string" ? item.model_req_key : "").filter(Boolean) : [];
|
|
8790
|
-
const videoReqKeys = Array.isArray(videoConfig == null ? void 0 : videoConfig.model_list) ? videoConfig.model_list.map((item) => typeof (item == null ? void 0 : item.model_req_key) === "string" ? item.model_req_key : "").filter(Boolean) : [];
|
|
8791
|
-
const imageModels = imageReqKeys.map((key) => reverseMap[key]).filter(Boolean);
|
|
8792
|
-
const videoModels = videoReqKeys.map((key) => reverseMap[key]).filter(Boolean);
|
|
8800
|
+
const reverseMap = buildReverseMap(regionCode);
|
|
8801
|
+
const { imageModels, videoModels } = await fetchConfigModelReqKeys(token, regionCode);
|
|
8802
|
+
const imageIds = imageModels.map((m) => reverseMap[m.reqKey]).filter(Boolean);
|
|
8803
|
+
const videoIds = videoModels.map((m) => reverseMap[m.reqKey]).filter(Boolean);
|
|
8793
8804
|
const capabilityTags = /* @__PURE__ */ new Set();
|
|
8794
|
-
for (const model of
|
|
8805
|
+
for (const model of videoIds) {
|
|
8795
8806
|
if (model.includes("seedance_40")) capabilityTags.add("omni_reference");
|
|
8796
8807
|
if (model.includes("veo3")) capabilityTags.add("veo3");
|
|
8797
8808
|
if (model.includes("sora2")) capabilityTags.add("sora2");
|
|
8798
8809
|
}
|
|
8799
8810
|
return {
|
|
8800
|
-
imageModels:
|
|
8801
|
-
videoModels:
|
|
8811
|
+
imageModels: imageIds.length ? Array.from(new Set(imageIds)) : void 0,
|
|
8812
|
+
videoModels: videoIds.length ? Array.from(new Set(videoIds)) : void 0,
|
|
8802
8813
|
capabilityTags: capabilityTags.size ? Array.from(capabilityTags) : void 0
|
|
8803
8814
|
};
|
|
8804
8815
|
}
|
|
8805
|
-
getReverseModelMapByRegion(region) {
|
|
8806
|
-
const maps = region === "us" ? [IMAGE_MODEL_MAP_US, VIDEO_MODEL_MAP_US] : region === "hk" || region === "jp" || region === "sg" ? [IMAGE_MODEL_MAP_ASIA, VIDEO_MODEL_MAP_ASIA] : [IMAGE_MODEL_MAP, VIDEO_MODEL_MAP];
|
|
8807
|
-
const reverse = {};
|
|
8808
|
-
for (const map of maps) {
|
|
8809
|
-
for (const [modelId, reqKey] of Object.entries(map)) {
|
|
8810
|
-
reverse[reqKey] = modelId;
|
|
8811
|
-
}
|
|
8812
|
-
}
|
|
8813
|
-
return reverse;
|
|
8814
|
-
}
|
|
8815
8816
|
};
|
|
8816
8817
|
var session_pool_default = new TokenPool();
|
|
8817
8818
|
|
|
@@ -8855,6 +8856,7 @@ function buildModelItem(modelId, meta) {
|
|
|
8855
8856
|
if (meta == null ? void 0 : meta.reqKey) item.model_req_key = meta.reqKey;
|
|
8856
8857
|
if (meta == null ? void 0 : meta.modelName) item.model_name = meta.modelName;
|
|
8857
8858
|
if ((_a = meta == null ? void 0 : meta.capabilities) == null ? void 0 : _a.length) item.capabilities = Array.from(new Set(meta.capabilities)).sort();
|
|
8859
|
+
if ((meta == null ? void 0 : meta.params) && Object.keys(meta.params).length > 0) item.params = meta.params;
|
|
8858
8860
|
if (meta == null ? void 0 : meta.modelTip) {
|
|
8859
8861
|
item.description = meta.modelTip;
|
|
8860
8862
|
} else if (modelType === "video") {
|
|
@@ -8898,13 +8900,17 @@ function resolveRegion(authorization, xRegion) {
|
|
|
8898
8900
|
}
|
|
8899
8901
|
return "cn";
|
|
8900
8902
|
}
|
|
8903
|
+
var reverseMapCache = /* @__PURE__ */ new Map();
|
|
8901
8904
|
function buildReverseMap(region) {
|
|
8905
|
+
const cached = reverseMapCache.get(region);
|
|
8906
|
+
if (cached) return cached;
|
|
8902
8907
|
const reverse = {};
|
|
8903
8908
|
for (const map of getRegionalMaps(region)) {
|
|
8904
8909
|
for (const [modelId, upstreamKey] of Object.entries(map)) {
|
|
8905
8910
|
reverse[upstreamKey] = modelId;
|
|
8906
8911
|
}
|
|
8907
8912
|
}
|
|
8913
|
+
reverseMapCache.set(region, reverse);
|
|
8908
8914
|
return reverse;
|
|
8909
8915
|
}
|
|
8910
8916
|
function buildFallbackModels(region) {
|
|
@@ -8921,43 +8927,62 @@ function resolveFetchToken(token) {
|
|
|
8921
8927
|
assertTokenWithoutRegionPrefix(normalizedToken);
|
|
8922
8928
|
return normalizedToken;
|
|
8923
8929
|
}
|
|
8930
|
+
function extractValidOptions(item) {
|
|
8931
|
+
return (Array.isArray(item.options) ? item.options : []).filter(
|
|
8932
|
+
(opt) => !!opt && typeof opt === "object" && typeof opt.key === "string" && opt.key.length > 0
|
|
8933
|
+
);
|
|
8934
|
+
}
|
|
8924
8935
|
function extractCapabilities(item) {
|
|
8925
|
-
const features = Array.isArray(item.feats) ? item.feats.filter((
|
|
8926
|
-
const
|
|
8927
|
-
|
|
8928
|
-
|
|
8929
|
-
|
|
8936
|
+
const features = Array.isArray(item.feats) ? item.feats.filter((f) => typeof f === "string" && f.length > 0) : [];
|
|
8937
|
+
const optionKeys = extractValidOptions(item).map((o) => o.key);
|
|
8938
|
+
return Array.from(/* @__PURE__ */ new Set([...features, ...optionKeys]));
|
|
8939
|
+
}
|
|
8940
|
+
function extractEnumParams(item) {
|
|
8941
|
+
const params = {};
|
|
8942
|
+
for (const o of extractValidOptions(item)) {
|
|
8943
|
+
const ev = o.enum_val;
|
|
8944
|
+
if (!ev) continue;
|
|
8945
|
+
const sv = ev.string_value;
|
|
8946
|
+
const iv = ev.int_value;
|
|
8947
|
+
const vals = sv || iv;
|
|
8948
|
+
if (vals && vals.length > 0) {
|
|
8949
|
+
params[o.key] = vals;
|
|
8950
|
+
}
|
|
8951
|
+
}
|
|
8952
|
+
const rm = item.resolution_map;
|
|
8953
|
+
if (rm && typeof rm === "object") {
|
|
8954
|
+
params["resolution"] = Object.keys(rm).map(String);
|
|
8955
|
+
}
|
|
8956
|
+
const steps = item.sample_steps;
|
|
8957
|
+
if (steps && typeof steps === "object") {
|
|
8958
|
+
params["steps"] = [steps.min_steps, steps.max_steps];
|
|
8959
|
+
}
|
|
8960
|
+
return params;
|
|
8961
|
+
}
|
|
8962
|
+
function toUpstreamMeta(item) {
|
|
8963
|
+
const reqKey = item == null ? void 0 : item.model_req_key;
|
|
8964
|
+
if (typeof reqKey !== "string" || reqKey.length === 0) return void 0;
|
|
8965
|
+
return {
|
|
8966
|
+
reqKey,
|
|
8967
|
+
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
8968
|
+
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
8969
|
+
capabilities: extractCapabilities(item),
|
|
8970
|
+
params: extractEnumParams(item)
|
|
8971
|
+
};
|
|
8930
8972
|
}
|
|
8931
8973
|
async function fetchConfigModelReqKeys(token, region) {
|
|
8932
8974
|
const regionInfo = buildRegionInfo(region);
|
|
8933
|
-
const imageConfig = await
|
|
8934
|
-
|
|
8935
|
-
|
|
8936
|
-
|
|
8937
|
-
|
|
8938
|
-
|
|
8939
|
-
|
|
8940
|
-
|
|
8941
|
-
|
|
8942
|
-
|
|
8943
|
-
|
|
8944
|
-
reqKey,
|
|
8945
|
-
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
8946
|
-
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
8947
|
-
capabilities: extractCapabilities(item)
|
|
8948
|
-
};
|
|
8949
|
-
}).filter((item) => Boolean(item)) : [];
|
|
8950
|
-
const videoModels = Array.isArray(videoConfig == null ? void 0 : videoConfig.model_list) ? videoConfig.model_list.map((item) => {
|
|
8951
|
-
const reqKey = item == null ? void 0 : item.model_req_key;
|
|
8952
|
-
if (typeof reqKey !== "string" || reqKey.length === 0) return void 0;
|
|
8953
|
-
return {
|
|
8954
|
-
reqKey,
|
|
8955
|
-
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
8956
|
-
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
8957
|
-
capabilities: extractCapabilities(item)
|
|
8958
|
-
};
|
|
8959
|
-
}).filter((item) => Boolean(item)) : [];
|
|
8960
|
-
return { imageModels, videoModels };
|
|
8975
|
+
const [imageConfig, videoConfig] = await Promise.all([
|
|
8976
|
+
request("post", "/mweb/v1/get_common_config", token, regionInfo, {
|
|
8977
|
+
data: {},
|
|
8978
|
+
params: { needCache: true, needRefresh: false }
|
|
8979
|
+
}),
|
|
8980
|
+
request("post", "/mweb/v1/video_generate/get_common_config", token, regionInfo, {
|
|
8981
|
+
data: { scene: "generate_video", params: {} }
|
|
8982
|
+
})
|
|
8983
|
+
]);
|
|
8984
|
+
const toList = (config) => Array.isArray(config == null ? void 0 : config.model_list) ? config.model_list.map(toUpstreamMeta).filter((m) => Boolean(m)) : [];
|
|
8985
|
+
return { imageModels: toList(imageConfig), videoModels: toList(videoConfig) };
|
|
8961
8986
|
}
|
|
8962
8987
|
async function getLiveModels(authorization, xRegion) {
|
|
8963
8988
|
const region = resolveRegion(authorization, xRegion);
|
|
@@ -10170,7 +10195,7 @@ async function generateVideo(_model, prompt, {
|
|
|
10170
10195
|
}
|
|
10171
10196
|
};
|
|
10172
10197
|
}
|
|
10173
|
-
const videoReferer = regionInfo.isCN ?
|
|
10198
|
+
const videoReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=video` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=video`;
|
|
10174
10199
|
const { aigc_data } = await request(
|
|
10175
10200
|
"post",
|
|
10176
10201
|
"/mweb/v1/aigc_draft/generate",
|