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/cli/index.cjs
CHANGED
|
@@ -5691,6 +5691,10 @@ var util = {
|
|
|
5691
5691
|
return ((crc ^ -1) >>> 0).toString(16).padStart(8, "0");
|
|
5692
5692
|
}
|
|
5693
5693
|
};
|
|
5694
|
+
function maskToken(token) {
|
|
5695
|
+
if (token.length <= 10) return "***";
|
|
5696
|
+
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
5697
|
+
}
|
|
5694
5698
|
var util_default = util;
|
|
5695
5699
|
|
|
5696
5700
|
// src/lib/logger.ts
|
|
@@ -5970,6 +5974,8 @@ var JimengErrorHandler = class {
|
|
|
5970
5974
|
throw new APIException(exceptions_default.API_IMAGE_GENERATION_FAILED, `[\u751F\u6210\u5931\u8D25]: ${errmsg}`);
|
|
5971
5975
|
case "5002":
|
|
5972
5976
|
throw new APIException(exceptions_default.API_VIDEO_GENERATION_FAILED, `[\u89C6\u9891\u751F\u6210\u5931\u8D25]: ${errmsg}`);
|
|
5977
|
+
case "34010105":
|
|
5978
|
+
throw new APIException(exceptions_default.API_REQUEST_FAILED, `[\u767B\u5F55\u9A8C\u8BC1\u5931\u8D25]: ${errmsg} (\u9519\u8BEF\u7801: ${ret})`);
|
|
5973
5979
|
default:
|
|
5974
5980
|
throw new APIException(exceptions_default.API_REQUEST_FAILED, `[${operation}\u5931\u8D25]: ${errmsg} (\u9519\u8BEF\u7801: ${ret})`);
|
|
5975
5981
|
}
|
|
@@ -6080,7 +6086,6 @@ var DA_VERSION = "3.3.12";
|
|
|
6080
6086
|
// src/api/consts/common.ts
|
|
6081
6087
|
var BASE_URL_CN = "https://jimeng.jianying.com";
|
|
6082
6088
|
var BASE_URL_US_COMMERCE = "https://commerce.us.capcut.com";
|
|
6083
|
-
var BASE_URL_HK_COMMERCE = "https://commerce-api-sg.capcut.com";
|
|
6084
6089
|
var DEFAULT_ASSISTANT_ID_CN = 513695;
|
|
6085
6090
|
var DEFAULT_ASSISTANT_ID_US = 513641;
|
|
6086
6091
|
var DEFAULT_ASSISTANT_ID_HK = 513641;
|
|
@@ -6096,9 +6101,9 @@ var VERSION_CODE = "8.4.0";
|
|
|
6096
6101
|
var DEFAULT_IMAGE_MODEL = "jimeng-4.5";
|
|
6097
6102
|
var DEFAULT_IMAGE_MODEL_US = "jimeng-4.5";
|
|
6098
6103
|
var DEFAULT_VIDEO_MODEL = "jimeng-video-3.5-pro";
|
|
6099
|
-
var DRAFT_VERSION = "3.3.
|
|
6104
|
+
var DRAFT_VERSION = "3.3.12";
|
|
6100
6105
|
var DRAFT_MIN_VERSION = "3.0.2";
|
|
6101
|
-
var DRAFT_VERSION_OMNI = "3.3.
|
|
6106
|
+
var DRAFT_VERSION_OMNI = "3.3.12";
|
|
6102
6107
|
var OMNI_BENEFIT_TYPE = "dreamina_video_seedance_20_video_add";
|
|
6103
6108
|
var OMNI_BENEFIT_TYPE_FAST = "dreamina_seedance_20_fast_with_video";
|
|
6104
6109
|
var IMAGE_MODEL_MAP = {
|
|
@@ -6114,6 +6119,8 @@ var IMAGE_MODEL_MAP = {
|
|
|
6114
6119
|
"jimeng-lab": "high_aes_general_v50_lab"
|
|
6115
6120
|
};
|
|
6116
6121
|
var IMAGE_MODEL_MAP_US = {
|
|
6122
|
+
"jimeng-5.0": "high_aes_general_v50",
|
|
6123
|
+
"jimeng-4.6": "high_aes_general_v42",
|
|
6117
6124
|
"jimeng-4.5": "high_aes_general_v40l",
|
|
6118
6125
|
"jimeng-4.1": "high_aes_general_v41",
|
|
6119
6126
|
"jimeng-4.0": "high_aes_general_v40",
|
|
@@ -6127,6 +6134,7 @@ var IMAGE_MODEL_MAP_ASIA = {
|
|
|
6127
6134
|
"jimeng-4.5": "high_aes_general_v40l",
|
|
6128
6135
|
"jimeng-4.1": "high_aes_general_v41",
|
|
6129
6136
|
"jimeng-4.0": "high_aes_general_v40",
|
|
6137
|
+
"jimeng-3.1": "high_aes_general_v30l_art:general_v3.0_18b",
|
|
6130
6138
|
"jimeng-3.0": "high_aes_general_v30l:general_v3.0_18b",
|
|
6131
6139
|
"nanobanana": "external_model_gemini_flash_image_v25",
|
|
6132
6140
|
"nanobananapro": "dreamina_image_lib_1"
|
|
@@ -6144,10 +6152,14 @@ var VIDEO_MODEL_MAP = {
|
|
|
6144
6152
|
"jimeng-video-2.0-pro": "dreamina_ic_generate_video_model_vgfm1.0"
|
|
6145
6153
|
};
|
|
6146
6154
|
var VIDEO_MODEL_MAP_US = {
|
|
6155
|
+
"jimeng-video-seedance-2.0": "dreamina_seedance_40_pro",
|
|
6156
|
+
"jimeng-video-seedance-2.0-fast": "dreamina_seedance_40",
|
|
6147
6157
|
"jimeng-video-3.5-pro": "dreamina_ic_generate_video_model_vgfm_3.5_pro",
|
|
6148
6158
|
"jimeng-video-3.0": "dreamina_ic_generate_video_model_vgfm_3.0"
|
|
6149
6159
|
};
|
|
6150
6160
|
var VIDEO_MODEL_MAP_ASIA = {
|
|
6161
|
+
"jimeng-video-seedance-2.0": "dreamina_seedance_40_pro",
|
|
6162
|
+
"jimeng-video-seedance-2.0-fast": "dreamina_seedance_40",
|
|
6151
6163
|
"jimeng-video-veo3": "dreamina_veo3_generate_video",
|
|
6152
6164
|
"jimeng-video-veo3.1": "dreamina_veo3.1_generate_video",
|
|
6153
6165
|
"jimeng-video-sora2": "dreamina_sora2_generate_video",
|
|
@@ -6227,6 +6239,7 @@ var RESOLUTION_OPTIONS_NANOBANANAPRO_4K = {
|
|
|
6227
6239
|
var DEVICE_ID = Math.random() * 1e18 + 7e18;
|
|
6228
6240
|
var WEB_ID = Math.random() * 1e18 + 7e18;
|
|
6229
6241
|
var USER_ID = util_default.uuid(false);
|
|
6242
|
+
var INTERNATIONAL_FRONTEND_ORIGIN = "https://dreamina.capcut.com";
|
|
6230
6243
|
var FAKE_HEADERS = {
|
|
6231
6244
|
Accept: "application/json, text/plain, */*",
|
|
6232
6245
|
"Accept-Encoding": "gzip, deflate, br, zstd",
|
|
@@ -6350,8 +6363,7 @@ function parseProxyFromToken(rawToken) {
|
|
|
6350
6363
|
return { token, proxyUrl };
|
|
6351
6364
|
}
|
|
6352
6365
|
function getRefererByRegion(regionInfo, cnPath) {
|
|
6353
|
-
|
|
6354
|
-
return isInternational ? "https://dreamina.capcut.com/" : `https://jimeng.jianying.com${cnPath}`;
|
|
6366
|
+
return regionInfo.isInternational ? `${INTERNATIONAL_FRONTEND_ORIGIN}/` : `${BASE_URL_CN}${cnPath}`;
|
|
6355
6367
|
}
|
|
6356
6368
|
function getAssistantId(regionInfo) {
|
|
6357
6369
|
if (regionInfo.isUS) return DEFAULT_ASSISTANT_ID_US;
|
|
@@ -6382,12 +6394,14 @@ function generateCookie(refreshToken) {
|
|
|
6382
6394
|
}
|
|
6383
6395
|
async function getCredit(refreshToken, regionInfo) {
|
|
6384
6396
|
const referer = getRefererByRegion(regionInfo, "/ai-tool/image/generate");
|
|
6397
|
+
const origin = regionInfo.isInternational ? INTERNATIONAL_FRONTEND_ORIGIN : void 0;
|
|
6385
6398
|
const {
|
|
6386
6399
|
credit: { gift_credit, purchase_credit, vip_credit }
|
|
6387
6400
|
} = await request("POST", "/commerce/v1/benefits/user_credit", refreshToken, regionInfo, {
|
|
6388
6401
|
data: {},
|
|
6389
6402
|
headers: {
|
|
6390
|
-
Referer: referer
|
|
6403
|
+
Referer: referer,
|
|
6404
|
+
...origin ? { Origin: origin } : {}
|
|
6391
6405
|
},
|
|
6392
6406
|
noDefaultParams: true
|
|
6393
6407
|
});
|
|
@@ -6404,13 +6418,15 @@ async function getCredit(refreshToken, regionInfo) {
|
|
|
6404
6418
|
async function receiveCredit(refreshToken, regionInfo) {
|
|
6405
6419
|
logger_default.info("\u6B63\u5728\u5C1D\u8BD5\u6536\u53D6\u4ECA\u65E5\u79EF\u5206...");
|
|
6406
6420
|
const referer = getRefererByRegion(regionInfo, "/ai-tool/home");
|
|
6421
|
+
const origin = regionInfo.isInternational ? INTERNATIONAL_FRONTEND_ORIGIN : void 0;
|
|
6407
6422
|
const timeZone = regionInfo.isUS ? "America/New_York" : regionInfo.isHK ? "Asia/Hong_Kong" : regionInfo.isJP ? "Asia/Tokyo" : regionInfo.isSG ? "Asia/Singapore" : "Asia/Shanghai";
|
|
6408
6423
|
const { receive_quota } = await request("POST", "/commerce/v1/benefits/credit_receive", refreshToken, regionInfo, {
|
|
6409
6424
|
data: {
|
|
6410
6425
|
time_zone: timeZone
|
|
6411
6426
|
},
|
|
6412
6427
|
headers: {
|
|
6413
|
-
Referer: referer
|
|
6428
|
+
Referer: referer,
|
|
6429
|
+
...origin ? { Origin: origin } : {}
|
|
6414
6430
|
}
|
|
6415
6431
|
});
|
|
6416
6432
|
logger_default.info(`\u4ECA\u65E5${receive_quota}\u79EF\u5206\u6536\u53D6\u6210\u529F`);
|
|
@@ -6438,7 +6454,7 @@ async function request(method, uri, refreshToken, regionInfo, options = {}) {
|
|
|
6438
6454
|
region = REGION_US;
|
|
6439
6455
|
} else if (isHK || isJP || isSG) {
|
|
6440
6456
|
if (uri.startsWith("/commerce/")) {
|
|
6441
|
-
baseUrl =
|
|
6457
|
+
baseUrl = BASE_URL_US_COMMERCE;
|
|
6442
6458
|
} else {
|
|
6443
6459
|
baseUrl = BASE_URL_DREAMINA_HK;
|
|
6444
6460
|
}
|
|
@@ -6518,7 +6534,8 @@ async function request(method, uri, refreshToken, regionInfo, options = {}) {
|
|
|
6518
6534
|
});
|
|
6519
6535
|
logger_default.info(`\u54CD\u5E94\u72B6\u6001: ${response.status} ${response.statusText}`);
|
|
6520
6536
|
if (options.responseType == "stream") return response;
|
|
6521
|
-
const
|
|
6537
|
+
const responseJson = JSON.stringify(response.data);
|
|
6538
|
+
const responseDataSummary = responseJson.substring(0, 500) + (responseJson.length > 500 ? "..." : "");
|
|
6522
6539
|
logger_default.info(`\u54CD\u5E94\u6570\u636E\u6458\u8981: ${responseDataSummary}`);
|
|
6523
6540
|
if (response.status >= 400) {
|
|
6524
6541
|
logger_default.warn(`HTTP\u9519\u8BEF: ${response.status} ${response.statusText}`);
|
|
@@ -6636,7 +6653,7 @@ async function checkInternationalTokenLive(refreshToken, regionInfo) {
|
|
|
6636
6653
|
const cookie = generateCookie(refreshToken);
|
|
6637
6654
|
try {
|
|
6638
6655
|
const response = await import_axios2.default.get(
|
|
6639
|
-
|
|
6656
|
+
`${INTERNATIONAL_FRONTEND_ORIGIN}/passport/web/account/info/`,
|
|
6640
6657
|
{
|
|
6641
6658
|
params: {
|
|
6642
6659
|
aid,
|
|
@@ -6647,8 +6664,8 @@ async function checkInternationalTokenLive(refreshToken, regionInfo) {
|
|
|
6647
6664
|
headers: {
|
|
6648
6665
|
...FAKE_HEADERS,
|
|
6649
6666
|
Cookie: cookie,
|
|
6650
|
-
Referer:
|
|
6651
|
-
Origin:
|
|
6667
|
+
Referer: `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/home/`,
|
|
6668
|
+
Origin: INTERNATIONAL_FRONTEND_ORIGIN,
|
|
6652
6669
|
Appid: String(aid),
|
|
6653
6670
|
"store-country-code": countryCode,
|
|
6654
6671
|
"store-country-code-src": "uid"
|
|
@@ -6669,6 +6686,220 @@ async function checkInternationalTokenLive(refreshToken, regionInfo) {
|
|
|
6669
6686
|
}
|
|
6670
6687
|
}
|
|
6671
6688
|
|
|
6689
|
+
// src/api/controllers/models.ts
|
|
6690
|
+
var CACHE_TTL_MS = 10 * 60 * 1e3;
|
|
6691
|
+
var FALLBACK_TOKEN = "test_token";
|
|
6692
|
+
var modelCache = /* @__PURE__ */ new Map();
|
|
6693
|
+
function mapVideoDescription(id) {
|
|
6694
|
+
if (id.includes("veo3.1")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B veo3.1";
|
|
6695
|
+
if (id.includes("veo3")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B veo3";
|
|
6696
|
+
if (id.includes("sora2")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B sora2";
|
|
6697
|
+
if (id.includes("seedance-2.0-fast")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B seedance 2.0-fast";
|
|
6698
|
+
if (id.includes("seedance-2.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B seedance 2.0";
|
|
6699
|
+
if (id.includes("3.5-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.5 \u4E13\u4E1A\u7248";
|
|
6700
|
+
if (id.includes("3.0-fast")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0 \u6781\u901F\u7248";
|
|
6701
|
+
if (id.includes("3.0-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0 \u4E13\u4E1A\u7248";
|
|
6702
|
+
if (id.includes("3.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0";
|
|
6703
|
+
if (id.includes("2.0-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 2.0 \u4E13\u4E1A\u7248";
|
|
6704
|
+
if (id.includes("2.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 2.0";
|
|
6705
|
+
return void 0;
|
|
6706
|
+
}
|
|
6707
|
+
function mapImageDescription(id) {
|
|
6708
|
+
if (id.includes("5.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 5.0";
|
|
6709
|
+
if (id.includes("4.6")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.6";
|
|
6710
|
+
if (id.includes("4.5")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.5";
|
|
6711
|
+
if (id.includes("4.1")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.1";
|
|
6712
|
+
if (id.includes("4.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.0";
|
|
6713
|
+
if (id.includes("3.1")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 3.1";
|
|
6714
|
+
if (id.includes("3.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 3.0";
|
|
6715
|
+
return `\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B ${id}`;
|
|
6716
|
+
}
|
|
6717
|
+
function buildModelItem(modelId, meta) {
|
|
6718
|
+
var _a;
|
|
6719
|
+
const modelType = modelId.startsWith("jimeng-video-") ? "video" : "image";
|
|
6720
|
+
const item = {
|
|
6721
|
+
id: modelId,
|
|
6722
|
+
object: "model",
|
|
6723
|
+
owned_by: "jimeng-cli",
|
|
6724
|
+
model_type: modelType
|
|
6725
|
+
};
|
|
6726
|
+
if (meta == null ? void 0 : meta.reqKey) item.model_req_key = meta.reqKey;
|
|
6727
|
+
if (meta == null ? void 0 : meta.modelName) item.model_name = meta.modelName;
|
|
6728
|
+
if ((_a = meta == null ? void 0 : meta.capabilities) == null ? void 0 : _a.length) item.capabilities = Array.from(new Set(meta.capabilities)).sort();
|
|
6729
|
+
if ((meta == null ? void 0 : meta.params) && Object.keys(meta.params).length > 0) item.params = meta.params;
|
|
6730
|
+
if (meta == null ? void 0 : meta.modelTip) {
|
|
6731
|
+
item.description = meta.modelTip;
|
|
6732
|
+
} else if (modelType === "video") {
|
|
6733
|
+
item.description = mapVideoDescription(modelId);
|
|
6734
|
+
} else {
|
|
6735
|
+
item.description = mapImageDescription(modelId);
|
|
6736
|
+
}
|
|
6737
|
+
return item;
|
|
6738
|
+
}
|
|
6739
|
+
function parseFirstToken(authorization) {
|
|
6740
|
+
var _a;
|
|
6741
|
+
if (!authorization || !/^Bearer\s+/i.test(authorization)) return void 0;
|
|
6742
|
+
const raw = authorization.replace(/^Bearer\s+/i, "").trim();
|
|
6743
|
+
if (!raw) return void 0;
|
|
6744
|
+
const first = (_a = raw.split(",")[0]) == null ? void 0 : _a.trim();
|
|
6745
|
+
return first || void 0;
|
|
6746
|
+
}
|
|
6747
|
+
function resolveToken(authorization) {
|
|
6748
|
+
const fromAuth = parseFirstToken(authorization);
|
|
6749
|
+
if (fromAuth) return fromAuth;
|
|
6750
|
+
const fromPool = session_pool_default.getAllTokens({ onlyEnabled: true, preferLive: true })[0];
|
|
6751
|
+
return fromPool || void 0;
|
|
6752
|
+
}
|
|
6753
|
+
function getRegionalMaps(region) {
|
|
6754
|
+
if (region === "us") return [IMAGE_MODEL_MAP_US, VIDEO_MODEL_MAP_US];
|
|
6755
|
+
if (region === "hk" || region === "jp" || region === "sg") return [IMAGE_MODEL_MAP_ASIA, VIDEO_MODEL_MAP_ASIA];
|
|
6756
|
+
if (region === "cn") return [IMAGE_MODEL_MAP, VIDEO_MODEL_MAP];
|
|
6757
|
+
return [IMAGE_MODEL_MAP, IMAGE_MODEL_MAP_US, IMAGE_MODEL_MAP_ASIA, VIDEO_MODEL_MAP, VIDEO_MODEL_MAP_US, VIDEO_MODEL_MAP_ASIA];
|
|
6758
|
+
}
|
|
6759
|
+
function resolveRegion(authorization, xRegion) {
|
|
6760
|
+
var _a;
|
|
6761
|
+
const token = resolveToken(authorization);
|
|
6762
|
+
const parsedXRegion = parseRegionCode(xRegion);
|
|
6763
|
+
if (parsedXRegion) return parsedXRegion;
|
|
6764
|
+
if (token) {
|
|
6765
|
+
assertTokenWithoutRegionPrefix(token);
|
|
6766
|
+
const normalizedToken = parseProxyFromToken(token).token;
|
|
6767
|
+
const poolRegion = (_a = session_pool_default.getTokenEntry(normalizedToken)) == null ? void 0 : _a.region;
|
|
6768
|
+
if (poolRegion) return poolRegion;
|
|
6769
|
+
throw new Error("\u7F3A\u5C11 region\u3002token \u672A\u5728 pool \u4E2D\u6CE8\u518C\u65F6\uFF0C/v1/models \u9700\u8981\u63D0\u4F9B\u8BF7\u6C42\u5934 X-Region");
|
|
6770
|
+
}
|
|
6771
|
+
return "cn";
|
|
6772
|
+
}
|
|
6773
|
+
var reverseMapCache = /* @__PURE__ */ new Map();
|
|
6774
|
+
function buildReverseMap(region) {
|
|
6775
|
+
const cached = reverseMapCache.get(region);
|
|
6776
|
+
if (cached) return cached;
|
|
6777
|
+
const reverse = {};
|
|
6778
|
+
for (const map of getRegionalMaps(region)) {
|
|
6779
|
+
for (const [modelId, upstreamKey] of Object.entries(map)) {
|
|
6780
|
+
reverse[upstreamKey] = modelId;
|
|
6781
|
+
}
|
|
6782
|
+
}
|
|
6783
|
+
reverseMapCache.set(region, reverse);
|
|
6784
|
+
return reverse;
|
|
6785
|
+
}
|
|
6786
|
+
function buildFallbackModels(region) {
|
|
6787
|
+
const maps = getRegionalMaps(region);
|
|
6788
|
+
const modelIds = Array.from(new Set(maps.flatMap((item) => Object.keys(item)))).sort();
|
|
6789
|
+
return modelIds.map((id) => buildModelItem(id));
|
|
6790
|
+
}
|
|
6791
|
+
function makeCacheKey(region) {
|
|
6792
|
+
return `models|${region}`;
|
|
6793
|
+
}
|
|
6794
|
+
function resolveFetchToken(token) {
|
|
6795
|
+
if (!token) return FALLBACK_TOKEN;
|
|
6796
|
+
const normalizedToken = parseProxyFromToken(token).token;
|
|
6797
|
+
assertTokenWithoutRegionPrefix(normalizedToken);
|
|
6798
|
+
return normalizedToken;
|
|
6799
|
+
}
|
|
6800
|
+
function extractValidOptions(item) {
|
|
6801
|
+
return (Array.isArray(item.options) ? item.options : []).filter(
|
|
6802
|
+
(opt) => !!opt && typeof opt === "object" && typeof opt.key === "string" && opt.key.length > 0
|
|
6803
|
+
);
|
|
6804
|
+
}
|
|
6805
|
+
function extractCapabilities(item) {
|
|
6806
|
+
const features = Array.isArray(item.feats) ? item.feats.filter((f) => typeof f === "string" && f.length > 0) : [];
|
|
6807
|
+
const optionKeys = extractValidOptions(item).map((o) => o.key);
|
|
6808
|
+
return Array.from(/* @__PURE__ */ new Set([...features, ...optionKeys]));
|
|
6809
|
+
}
|
|
6810
|
+
function extractEnumParams(item) {
|
|
6811
|
+
const params = {};
|
|
6812
|
+
for (const o of extractValidOptions(item)) {
|
|
6813
|
+
const ev = o.enum_val;
|
|
6814
|
+
if (!ev) continue;
|
|
6815
|
+
const sv = ev.string_value;
|
|
6816
|
+
const iv = ev.int_value;
|
|
6817
|
+
const vals = sv || iv;
|
|
6818
|
+
if (vals && vals.length > 0) {
|
|
6819
|
+
params[o.key] = vals;
|
|
6820
|
+
}
|
|
6821
|
+
}
|
|
6822
|
+
const rm = item.resolution_map;
|
|
6823
|
+
if (rm && typeof rm === "object") {
|
|
6824
|
+
params["resolution"] = Object.keys(rm).map(String);
|
|
6825
|
+
}
|
|
6826
|
+
const steps = item.sample_steps;
|
|
6827
|
+
if (steps && typeof steps === "object") {
|
|
6828
|
+
params["steps"] = [steps.min_steps, steps.max_steps];
|
|
6829
|
+
}
|
|
6830
|
+
return params;
|
|
6831
|
+
}
|
|
6832
|
+
function toUpstreamMeta(item) {
|
|
6833
|
+
const reqKey = item == null ? void 0 : item.model_req_key;
|
|
6834
|
+
if (typeof reqKey !== "string" || reqKey.length === 0) return void 0;
|
|
6835
|
+
return {
|
|
6836
|
+
reqKey,
|
|
6837
|
+
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
6838
|
+
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
6839
|
+
capabilities: extractCapabilities(item),
|
|
6840
|
+
params: extractEnumParams(item)
|
|
6841
|
+
};
|
|
6842
|
+
}
|
|
6843
|
+
async function fetchConfigModelReqKeys(token, region) {
|
|
6844
|
+
const regionInfo = buildRegionInfo(region);
|
|
6845
|
+
const [imageConfig, videoConfig] = await Promise.all([
|
|
6846
|
+
request("post", "/mweb/v1/get_common_config", token, regionInfo, {
|
|
6847
|
+
data: {},
|
|
6848
|
+
params: { needCache: true, needRefresh: false }
|
|
6849
|
+
}),
|
|
6850
|
+
request("post", "/mweb/v1/video_generate/get_common_config", token, regionInfo, {
|
|
6851
|
+
data: { scene: "generate_video", params: {} }
|
|
6852
|
+
})
|
|
6853
|
+
]);
|
|
6854
|
+
const toList = (config) => Array.isArray(config == null ? void 0 : config.model_list) ? config.model_list.map(toUpstreamMeta).filter((m) => Boolean(m)) : [];
|
|
6855
|
+
return { imageModels: toList(imageConfig), videoModels: toList(videoConfig) };
|
|
6856
|
+
}
|
|
6857
|
+
async function getLiveModels(authorization, xRegion) {
|
|
6858
|
+
const region = resolveRegion(authorization, xRegion);
|
|
6859
|
+
const token = resolveToken(authorization);
|
|
6860
|
+
const effectiveToken = resolveFetchToken(token);
|
|
6861
|
+
const cacheKey = makeCacheKey(region);
|
|
6862
|
+
const cached = modelCache.get(cacheKey);
|
|
6863
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
6864
|
+
return { source: cached.source, data: cached.data };
|
|
6865
|
+
}
|
|
6866
|
+
try {
|
|
6867
|
+
const reverseMap = buildReverseMap(region);
|
|
6868
|
+
const { imageModels, videoModels } = await fetchConfigModelReqKeys(effectiveToken, region);
|
|
6869
|
+
const upstreamModels = [...imageModels, ...videoModels];
|
|
6870
|
+
const metaByModelId = /* @__PURE__ */ new Map();
|
|
6871
|
+
const mapped = upstreamModels.map((model) => {
|
|
6872
|
+
const modelId = reverseMap[model.reqKey];
|
|
6873
|
+
if (modelId && !metaByModelId.has(modelId)) {
|
|
6874
|
+
metaByModelId.set(modelId, model);
|
|
6875
|
+
}
|
|
6876
|
+
return modelId;
|
|
6877
|
+
}).filter((item) => typeof item === "string" && item.length > 0);
|
|
6878
|
+
const modelIds = Array.from(new Set(mapped)).sort();
|
|
6879
|
+
if (modelIds.length === 0) {
|
|
6880
|
+
throw new Error("model_req_key resolved but none matched local reverse map");
|
|
6881
|
+
}
|
|
6882
|
+
const data = modelIds.map((id) => buildModelItem(id, metaByModelId.get(id)));
|
|
6883
|
+
modelCache.set(cacheKey, {
|
|
6884
|
+
expiresAt: Date.now() + CACHE_TTL_MS,
|
|
6885
|
+
source: "upstream",
|
|
6886
|
+
data
|
|
6887
|
+
});
|
|
6888
|
+
return { source: "upstream", data };
|
|
6889
|
+
} catch {
|
|
6890
|
+
const data = buildFallbackModels(region);
|
|
6891
|
+
modelCache.set(cacheKey, {
|
|
6892
|
+
expiresAt: Date.now() + CACHE_TTL_MS,
|
|
6893
|
+
source: "fallback",
|
|
6894
|
+
data
|
|
6895
|
+
});
|
|
6896
|
+
return { source: "fallback", data };
|
|
6897
|
+
}
|
|
6898
|
+
}
|
|
6899
|
+
async function refreshAllTokenModels() {
|
|
6900
|
+
return session_pool_default.refreshAllDynamicCapabilities();
|
|
6901
|
+
}
|
|
6902
|
+
|
|
6672
6903
|
// src/lib/session-pool.ts
|
|
6673
6904
|
function sample(arr) {
|
|
6674
6905
|
return arr.length > 0 ? arr[Math.floor(Math.random() * arr.length)] : void 0;
|
|
@@ -6718,10 +6949,14 @@ var TokenPool = class {
|
|
|
6718
6949
|
);
|
|
6719
6950
|
}
|
|
6720
6951
|
getSummary() {
|
|
6721
|
-
|
|
6722
|
-
|
|
6723
|
-
|
|
6724
|
-
const
|
|
6952
|
+
let enabledCount = 0;
|
|
6953
|
+
let liveCount = 0;
|
|
6954
|
+
let missingRegionCount = 0;
|
|
6955
|
+
for (const item of this.entryMap.values()) {
|
|
6956
|
+
if (item.enabled) enabledCount++;
|
|
6957
|
+
if (item.enabled && item.live === true) liveCount++;
|
|
6958
|
+
if (!item.region) missingRegionCount++;
|
|
6959
|
+
}
|
|
6725
6960
|
return {
|
|
6726
6961
|
enabled: this.enabled,
|
|
6727
6962
|
filePath: this.filePath,
|
|
@@ -6730,19 +6965,19 @@ var TokenPool = class {
|
|
|
6730
6965
|
fetchCreditOnCheck: this.fetchCreditOnCheck,
|
|
6731
6966
|
autoDisableEnabled: this.autoDisableEnabled,
|
|
6732
6967
|
autoDisableFailures: this.autoDisableFailures,
|
|
6733
|
-
total:
|
|
6968
|
+
total: this.entryMap.size,
|
|
6734
6969
|
enabledCount,
|
|
6735
6970
|
liveCount,
|
|
6736
6971
|
missingRegionCount,
|
|
6737
6972
|
lastHealthCheckAt: this.lastHealthCheckAt || null
|
|
6738
6973
|
};
|
|
6739
6974
|
}
|
|
6740
|
-
getEntries(
|
|
6975
|
+
getEntries(shouldMask = true) {
|
|
6741
6976
|
const items = Array.from(this.entryMap.values()).map((item) => ({ ...item }));
|
|
6742
|
-
if (!
|
|
6977
|
+
if (!shouldMask) return items;
|
|
6743
6978
|
return items.map((item) => ({
|
|
6744
6979
|
...item,
|
|
6745
|
-
token:
|
|
6980
|
+
token: maskToken(item.token)
|
|
6746
6981
|
}));
|
|
6747
6982
|
}
|
|
6748
6983
|
getAllTokens(options = {}) {
|
|
@@ -6813,7 +7048,7 @@ var TokenPool = class {
|
|
|
6813
7048
|
token: null,
|
|
6814
7049
|
region: null,
|
|
6815
7050
|
error: "prefixed_token_not_supported",
|
|
6816
|
-
reason: `token ${
|
|
7051
|
+
reason: `token ${maskToken(prefixedCandidate.token)} \u4F7F\u7528\u4E86\u5DF2\u5E9F\u5F03\u7684 region \u524D\u7F00`
|
|
6817
7052
|
};
|
|
6818
7053
|
}
|
|
6819
7054
|
const regionLockedCandidates = validCandidates.filter(
|
|
@@ -6919,8 +7154,8 @@ var TokenPool = class {
|
|
|
6919
7154
|
async refreshDynamicCapabilitiesForToken(token) {
|
|
6920
7155
|
if (!this.enabled) throw new Error("Token pool disabled");
|
|
6921
7156
|
const item = this.entryMap.get(token);
|
|
6922
|
-
if (!item) throw new Error(`Token not found in pool: ${
|
|
6923
|
-
if (!item.region) throw new Error(`Token ${
|
|
7157
|
+
if (!item) throw new Error(`Token not found in pool: ${maskToken(token)}`);
|
|
7158
|
+
if (!item.region) throw new Error(`Token ${maskToken(token)} has no region`);
|
|
6924
7159
|
const regionInfo = buildRegionInfo(item.region);
|
|
6925
7160
|
const capabilities = await this.fetchDynamicCapabilities(token, regionInfo);
|
|
6926
7161
|
item.dynamicCapabilities = { ...capabilities, updatedAt: Date.now() };
|
|
@@ -6932,39 +7167,41 @@ var TokenPool = class {
|
|
|
6932
7167
|
* Returns a per-token result summary.
|
|
6933
7168
|
*/
|
|
6934
7169
|
async refreshAllDynamicCapabilities() {
|
|
6935
|
-
var _a, _b;
|
|
6936
7170
|
if (!this.enabled) return [];
|
|
6937
7171
|
const entries = this.getEntries(false).filter(
|
|
6938
7172
|
(item) => item.enabled && item.live !== false && Boolean(item.region)
|
|
6939
7173
|
);
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6943
|
-
|
|
6944
|
-
|
|
6945
|
-
|
|
6946
|
-
|
|
6947
|
-
current
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
|
|
6959
|
-
|
|
6960
|
-
|
|
6961
|
-
|
|
6962
|
-
|
|
6963
|
-
|
|
6964
|
-
|
|
6965
|
-
|
|
6966
|
-
|
|
6967
|
-
|
|
7174
|
+
if (entries.length === 0) return [];
|
|
7175
|
+
const results = await Promise.all(
|
|
7176
|
+
entries.map(async (entry) => {
|
|
7177
|
+
var _a, _b;
|
|
7178
|
+
try {
|
|
7179
|
+
const regionInfo = buildRegionInfo(entry.region);
|
|
7180
|
+
const capabilities = await this.fetchDynamicCapabilities(entry.token, regionInfo);
|
|
7181
|
+
const current = this.entryMap.get(entry.token);
|
|
7182
|
+
if (current) {
|
|
7183
|
+
current.dynamicCapabilities = { ...capabilities, updatedAt: Date.now() };
|
|
7184
|
+
}
|
|
7185
|
+
return {
|
|
7186
|
+
token: maskToken(entry.token),
|
|
7187
|
+
region: entry.region,
|
|
7188
|
+
imageModels: ((_a = capabilities.imageModels) == null ? void 0 : _a.length) ?? 0,
|
|
7189
|
+
videoModels: ((_b = capabilities.videoModels) == null ? void 0 : _b.length) ?? 0,
|
|
7190
|
+
capabilityTags: capabilities.capabilityTags ?? []
|
|
7191
|
+
};
|
|
7192
|
+
} catch (err) {
|
|
7193
|
+
return {
|
|
7194
|
+
token: maskToken(entry.token),
|
|
7195
|
+
region: entry.region,
|
|
7196
|
+
imageModels: 0,
|
|
7197
|
+
videoModels: 0,
|
|
7198
|
+
capabilityTags: [],
|
|
7199
|
+
error: err instanceof Error ? err.message : String(err)
|
|
7200
|
+
};
|
|
7201
|
+
}
|
|
7202
|
+
})
|
|
7203
|
+
);
|
|
7204
|
+
await this.persistToDisk();
|
|
6968
7205
|
return results;
|
|
6969
7206
|
}
|
|
6970
7207
|
async runHealthCheck() {
|
|
@@ -7085,14 +7322,10 @@ var TokenPool = class {
|
|
|
7085
7322
|
await import_fs_extra4.default.ensureDir(import_path4.default.dirname(this.filePath));
|
|
7086
7323
|
const payload = {
|
|
7087
7324
|
updatedAt: Date.now(),
|
|
7088
|
-
tokens: this.
|
|
7325
|
+
tokens: Array.from(this.entryMap.values())
|
|
7089
7326
|
};
|
|
7090
7327
|
await import_fs_extra4.default.writeJson(this.filePath, payload, { spaces: 2 });
|
|
7091
7328
|
}
|
|
7092
|
-
maskToken(token) {
|
|
7093
|
-
if (token.length <= 10) return "***";
|
|
7094
|
-
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
7095
|
-
}
|
|
7096
7329
|
parseAuthorizationTokens(authorization) {
|
|
7097
7330
|
if (typeof authorization !== "string" || authorization.trim().length === 0) {
|
|
7098
7331
|
return { tokens: [], error: null };
|
|
@@ -7121,7 +7354,7 @@ var TokenPool = class {
|
|
|
7121
7354
|
if (!token) continue;
|
|
7122
7355
|
const parsedRegion = parseRegionCode(item.region || defaultRegion);
|
|
7123
7356
|
if (!parsedRegion) {
|
|
7124
|
-
throw new Error(`token ${
|
|
7357
|
+
throw new Error(`token ${maskToken(token)} \u7F3A\u5C11\u6709\u6548 region\uFF08\u4EC5\u652F\u6301 cn/us/hk/jp/sg\uFF09`);
|
|
7125
7358
|
}
|
|
7126
7359
|
normalized.push({
|
|
7127
7360
|
token,
|
|
@@ -7229,40 +7462,22 @@ var TokenPool = class {
|
|
|
7229
7462
|
}
|
|
7230
7463
|
async fetchDynamicCapabilities(token, regionInfo) {
|
|
7231
7464
|
const regionCode = regionInfo.isUS ? "us" : regionInfo.isHK ? "hk" : regionInfo.isJP ? "jp" : regionInfo.isSG ? "sg" : "cn";
|
|
7232
|
-
const reverseMap =
|
|
7233
|
-
const
|
|
7234
|
-
|
|
7235
|
-
|
|
7236
|
-
});
|
|
7237
|
-
const videoConfig = await request("post", "/mweb/v1/video_generate/get_common_config", token, regionInfo, {
|
|
7238
|
-
data: { scene: "generate_video", params: {} }
|
|
7239
|
-
});
|
|
7240
|
-
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) : [];
|
|
7241
|
-
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) : [];
|
|
7242
|
-
const imageModels = imageReqKeys.map((key) => reverseMap[key]).filter(Boolean);
|
|
7243
|
-
const videoModels = videoReqKeys.map((key) => reverseMap[key]).filter(Boolean);
|
|
7465
|
+
const reverseMap = buildReverseMap(regionCode);
|
|
7466
|
+
const { imageModels, videoModels } = await fetchConfigModelReqKeys(token, regionCode);
|
|
7467
|
+
const imageIds = imageModels.map((m) => reverseMap[m.reqKey]).filter(Boolean);
|
|
7468
|
+
const videoIds = videoModels.map((m) => reverseMap[m.reqKey]).filter(Boolean);
|
|
7244
7469
|
const capabilityTags = /* @__PURE__ */ new Set();
|
|
7245
|
-
for (const model of
|
|
7470
|
+
for (const model of videoIds) {
|
|
7246
7471
|
if (model.includes("seedance_40")) capabilityTags.add("omni_reference");
|
|
7247
7472
|
if (model.includes("veo3")) capabilityTags.add("veo3");
|
|
7248
7473
|
if (model.includes("sora2")) capabilityTags.add("sora2");
|
|
7249
7474
|
}
|
|
7250
7475
|
return {
|
|
7251
|
-
imageModels:
|
|
7252
|
-
videoModels:
|
|
7476
|
+
imageModels: imageIds.length ? Array.from(new Set(imageIds)) : void 0,
|
|
7477
|
+
videoModels: videoIds.length ? Array.from(new Set(videoIds)) : void 0,
|
|
7253
7478
|
capabilityTags: capabilityTags.size ? Array.from(capabilityTags) : void 0
|
|
7254
7479
|
};
|
|
7255
7480
|
}
|
|
7256
|
-
getReverseModelMapByRegion(region) {
|
|
7257
|
-
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];
|
|
7258
|
-
const reverse = {};
|
|
7259
|
-
for (const map of maps) {
|
|
7260
|
-
for (const [modelId, reqKey] of Object.entries(map)) {
|
|
7261
|
-
reverse[reqKey] = modelId;
|
|
7262
|
-
}
|
|
7263
|
-
}
|
|
7264
|
-
return reverse;
|
|
7265
|
-
}
|
|
7266
7481
|
};
|
|
7267
7482
|
var session_pool_default = new TokenPool();
|
|
7268
7483
|
|
|
@@ -7271,10 +7486,6 @@ var import_node_fs = require("fs");
|
|
|
7271
7486
|
var import_node_path = __toESM(require("path"), 1);
|
|
7272
7487
|
var import_promises2 = require("fs/promises");
|
|
7273
7488
|
var import_minimist2 = __toESM(require("minimist"), 1);
|
|
7274
|
-
function maskToken(token) {
|
|
7275
|
-
if (token.length <= 10) return "***";
|
|
7276
|
-
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
7277
|
-
}
|
|
7278
7489
|
function formatUnixMs(value) {
|
|
7279
7490
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return "-";
|
|
7280
7491
|
return new Date(value).toISOString();
|
|
@@ -7376,29 +7587,28 @@ function createTokenSubcommands(deps) {
|
|
|
7376
7587
|
if (!args.json) {
|
|
7377
7588
|
console.log(`Checking ${pairs.length} token(s)`);
|
|
7378
7589
|
}
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7590
|
+
const results = await Promise.all(
|
|
7591
|
+
pairs.map(async ({ token, region }) => {
|
|
7592
|
+
const masked = maskToken(token);
|
|
7593
|
+
try {
|
|
7594
|
+
const live = await getTokenLiveStatus(token, buildRegionInfo(region));
|
|
7595
|
+
await session_pool_default.syncTokenCheckResult(token, live);
|
|
7596
|
+
if (live) {
|
|
7597
|
+
if (!args.json) console.log(`[OK] ${masked} (${region}) live=true`);
|
|
7598
|
+
return { token_masked: masked, region, live: true };
|
|
7599
|
+
} else {
|
|
7600
|
+
if (!args.json) console.log(`[FAIL] ${masked} (${region}) live=false`);
|
|
7601
|
+
return { token_masked: masked, region, live: false };
|
|
7602
|
+
}
|
|
7603
|
+
} catch (error) {
|
|
7604
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
7605
|
+
if (!args.json) console.log(`[ERROR] ${masked} (${region}) ${message}`);
|
|
7606
|
+
return { token_masked: masked, region, error: message };
|
|
7394
7607
|
}
|
|
7395
|
-
}
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
results.push({ token_masked: masked, region, error: message });
|
|
7400
|
-
}
|
|
7401
|
-
}
|
|
7608
|
+
})
|
|
7609
|
+
);
|
|
7610
|
+
const invalid = results.filter((r) => r.live === false).length;
|
|
7611
|
+
const requestErrors = results.filter((r) => r.error).length;
|
|
7402
7612
|
if (args.json) {
|
|
7403
7613
|
deps.printCommandJson("token.check", results, {
|
|
7404
7614
|
total: pairs.length,
|
|
@@ -7446,27 +7656,37 @@ function createTokenSubcommands(deps) {
|
|
|
7446
7656
|
await deps.ensureTokenPoolReady();
|
|
7447
7657
|
const explicitTokens = await collectTokensFromArgs(args, usage, deps, false);
|
|
7448
7658
|
const pairs = resolveTokenRegionPairs(explicitTokens, regionCode, deps);
|
|
7449
|
-
const
|
|
7450
|
-
|
|
7451
|
-
|
|
7452
|
-
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7659
|
+
const toErrorResult = (token, region, error) => ({
|
|
7660
|
+
token_masked: maskToken(token),
|
|
7661
|
+
region,
|
|
7662
|
+
error: error instanceof Error ? error.message : String(error)
|
|
7663
|
+
});
|
|
7664
|
+
const fetchPoints = async ({ token, region }) => {
|
|
7665
|
+
try {
|
|
7666
|
+
return { token_masked: maskToken(token), region, points: await getCredit(token, buildRegionInfo(region)) };
|
|
7667
|
+
} catch (error) {
|
|
7668
|
+
return toErrorResult(token, region, error);
|
|
7669
|
+
}
|
|
7670
|
+
};
|
|
7671
|
+
const processReceive = async ({ token, region }) => {
|
|
7672
|
+
const regionInfo = buildRegionInfo(region);
|
|
7673
|
+
try {
|
|
7457
7674
|
const currentCredit = await getCredit(token, regionInfo);
|
|
7458
|
-
if (currentCredit.totalCredit
|
|
7459
|
-
|
|
7460
|
-
await receiveCredit(token, regionInfo);
|
|
7461
|
-
const updatedCredit = await getCredit(token, regionInfo);
|
|
7462
|
-
return { token, credits: updatedCredit, received: true };
|
|
7463
|
-
} catch (error) {
|
|
7464
|
-
return { token, credits: currentCredit, received: false, error: (error == null ? void 0 : error.message) || String(error) };
|
|
7465
|
-
}
|
|
7675
|
+
if (currentCredit.totalCredit > 0) {
|
|
7676
|
+
return { token_masked: maskToken(token), region, credits: currentCredit, received: false };
|
|
7466
7677
|
}
|
|
7467
|
-
|
|
7468
|
-
|
|
7469
|
-
|
|
7678
|
+
try {
|
|
7679
|
+
await receiveCredit(token, regionInfo);
|
|
7680
|
+
const updatedCredit = await getCredit(token, regionInfo);
|
|
7681
|
+
return { token_masked: maskToken(token), region, credits: updatedCredit, received: true };
|
|
7682
|
+
} catch (error) {
|
|
7683
|
+
return { token_masked: maskToken(token), region, credits: currentCredit, received: false, ...toErrorResult(token, region, error) };
|
|
7684
|
+
}
|
|
7685
|
+
} catch (error) {
|
|
7686
|
+
return toErrorResult(token, region, error);
|
|
7687
|
+
}
|
|
7688
|
+
};
|
|
7689
|
+
const payload = action === "points" ? await Promise.all(pairs.map(fetchPoints)) : await Promise.all(pairs.map(processReceive));
|
|
7470
7690
|
if (args.json) {
|
|
7471
7691
|
deps.printCommandJson(`token.${action}`, payload);
|
|
7472
7692
|
return;
|
|
@@ -7554,10 +7774,13 @@ function createTokenSubcommands(deps) {
|
|
|
7554
7774
|
return;
|
|
7555
7775
|
}
|
|
7556
7776
|
await deps.ensureTokenPoolReady();
|
|
7557
|
-
|
|
7777
|
+
let payload;
|
|
7778
|
+
if (action === "pool-check") {
|
|
7779
|
+
payload = { ...await session_pool_default.runHealthCheck(), summary: session_pool_default.getSummary() };
|
|
7780
|
+
} else {
|
|
7558
7781
|
session_pool_default.reloadFromDisk();
|
|
7559
|
-
|
|
7560
|
-
}
|
|
7782
|
+
payload = { reloaded: true, summary: session_pool_default.getSummary(), items: buildTokenPoolSnapshot().items };
|
|
7783
|
+
}
|
|
7561
7784
|
if (args.json) {
|
|
7562
7785
|
deps.printCommandJson(`token.${action}`, deps.unwrapBody(payload));
|
|
7563
7786
|
return;
|
|
@@ -7677,196 +7900,6 @@ function createTokenSubcommands(deps) {
|
|
|
7677
7900
|
// src/cli/query-commands.ts
|
|
7678
7901
|
var import_minimist3 = __toESM(require("minimist"), 1);
|
|
7679
7902
|
|
|
7680
|
-
// src/api/controllers/models.ts
|
|
7681
|
-
var CACHE_TTL_MS = 10 * 60 * 1e3;
|
|
7682
|
-
var FALLBACK_TOKEN = "test_token";
|
|
7683
|
-
var modelCache = /* @__PURE__ */ new Map();
|
|
7684
|
-
function mapVideoDescription(id) {
|
|
7685
|
-
if (id.includes("veo3.1")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B veo3.1";
|
|
7686
|
-
if (id.includes("veo3")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B veo3";
|
|
7687
|
-
if (id.includes("sora2")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B sora2";
|
|
7688
|
-
if (id.includes("seedance-2.0-fast")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B seedance 2.0-fast";
|
|
7689
|
-
if (id.includes("seedance-2.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B seedance 2.0";
|
|
7690
|
-
if (id.includes("3.5-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.5 \u4E13\u4E1A\u7248";
|
|
7691
|
-
if (id.includes("3.0-fast")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0 \u6781\u901F\u7248";
|
|
7692
|
-
if (id.includes("3.0-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0 \u4E13\u4E1A\u7248";
|
|
7693
|
-
if (id.includes("3.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 3.0";
|
|
7694
|
-
if (id.includes("2.0-pro")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 2.0 \u4E13\u4E1A\u7248";
|
|
7695
|
-
if (id.includes("2.0")) return "\u5373\u68A6AI\u89C6\u9891\u751F\u6210\u6A21\u578B 2.0";
|
|
7696
|
-
return void 0;
|
|
7697
|
-
}
|
|
7698
|
-
function mapImageDescription(id) {
|
|
7699
|
-
if (id.includes("5.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 5.0";
|
|
7700
|
-
if (id.includes("4.6")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.6";
|
|
7701
|
-
if (id.includes("4.5")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.5";
|
|
7702
|
-
if (id.includes("4.1")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.1";
|
|
7703
|
-
if (id.includes("4.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 4.0";
|
|
7704
|
-
if (id.includes("3.1")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 3.1";
|
|
7705
|
-
if (id.includes("3.0")) return "\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B 3.0";
|
|
7706
|
-
return `\u5373\u68A6AI\u56FE\u50CF\u6A21\u578B ${id}`;
|
|
7707
|
-
}
|
|
7708
|
-
function buildModelItem(modelId, meta) {
|
|
7709
|
-
var _a;
|
|
7710
|
-
const modelType = modelId.startsWith("jimeng-video-") ? "video" : "image";
|
|
7711
|
-
const item = {
|
|
7712
|
-
id: modelId,
|
|
7713
|
-
object: "model",
|
|
7714
|
-
owned_by: "jimeng-cli",
|
|
7715
|
-
model_type: modelType
|
|
7716
|
-
};
|
|
7717
|
-
if (meta == null ? void 0 : meta.reqKey) item.model_req_key = meta.reqKey;
|
|
7718
|
-
if (meta == null ? void 0 : meta.modelName) item.model_name = meta.modelName;
|
|
7719
|
-
if ((_a = meta == null ? void 0 : meta.capabilities) == null ? void 0 : _a.length) item.capabilities = Array.from(new Set(meta.capabilities)).sort();
|
|
7720
|
-
if (meta == null ? void 0 : meta.modelTip) {
|
|
7721
|
-
item.description = meta.modelTip;
|
|
7722
|
-
} else if (modelType === "video") {
|
|
7723
|
-
item.description = mapVideoDescription(modelId);
|
|
7724
|
-
} else {
|
|
7725
|
-
item.description = mapImageDescription(modelId);
|
|
7726
|
-
}
|
|
7727
|
-
return item;
|
|
7728
|
-
}
|
|
7729
|
-
function parseFirstToken(authorization) {
|
|
7730
|
-
var _a;
|
|
7731
|
-
if (!authorization || !/^Bearer\s+/i.test(authorization)) return void 0;
|
|
7732
|
-
const raw = authorization.replace(/^Bearer\s+/i, "").trim();
|
|
7733
|
-
if (!raw) return void 0;
|
|
7734
|
-
const first = (_a = raw.split(",")[0]) == null ? void 0 : _a.trim();
|
|
7735
|
-
return first || void 0;
|
|
7736
|
-
}
|
|
7737
|
-
function resolveToken(authorization) {
|
|
7738
|
-
const fromAuth = parseFirstToken(authorization);
|
|
7739
|
-
if (fromAuth) return fromAuth;
|
|
7740
|
-
const fromPool = session_pool_default.getAllTokens({ onlyEnabled: true, preferLive: true })[0];
|
|
7741
|
-
return fromPool || void 0;
|
|
7742
|
-
}
|
|
7743
|
-
function getRegionalMaps(region) {
|
|
7744
|
-
if (region === "us") return [IMAGE_MODEL_MAP_US, VIDEO_MODEL_MAP_US];
|
|
7745
|
-
if (region === "hk" || region === "jp" || region === "sg") return [IMAGE_MODEL_MAP_ASIA, VIDEO_MODEL_MAP_ASIA];
|
|
7746
|
-
if (region === "cn") return [IMAGE_MODEL_MAP, VIDEO_MODEL_MAP];
|
|
7747
|
-
return [IMAGE_MODEL_MAP, IMAGE_MODEL_MAP_US, IMAGE_MODEL_MAP_ASIA, VIDEO_MODEL_MAP, VIDEO_MODEL_MAP_US, VIDEO_MODEL_MAP_ASIA];
|
|
7748
|
-
}
|
|
7749
|
-
function resolveRegion(authorization, xRegion) {
|
|
7750
|
-
var _a;
|
|
7751
|
-
const token = resolveToken(authorization);
|
|
7752
|
-
const parsedXRegion = parseRegionCode(xRegion);
|
|
7753
|
-
if (parsedXRegion) return parsedXRegion;
|
|
7754
|
-
if (token) {
|
|
7755
|
-
assertTokenWithoutRegionPrefix(token);
|
|
7756
|
-
const normalizedToken = parseProxyFromToken(token).token;
|
|
7757
|
-
const poolRegion = (_a = session_pool_default.getTokenEntry(normalizedToken)) == null ? void 0 : _a.region;
|
|
7758
|
-
if (poolRegion) return poolRegion;
|
|
7759
|
-
throw new Error("\u7F3A\u5C11 region\u3002token \u672A\u5728 pool \u4E2D\u6CE8\u518C\u65F6\uFF0C/v1/models \u9700\u8981\u63D0\u4F9B\u8BF7\u6C42\u5934 X-Region");
|
|
7760
|
-
}
|
|
7761
|
-
return "cn";
|
|
7762
|
-
}
|
|
7763
|
-
function buildReverseMap(region) {
|
|
7764
|
-
const reverse = {};
|
|
7765
|
-
for (const map of getRegionalMaps(region)) {
|
|
7766
|
-
for (const [modelId, upstreamKey] of Object.entries(map)) {
|
|
7767
|
-
reverse[upstreamKey] = modelId;
|
|
7768
|
-
}
|
|
7769
|
-
}
|
|
7770
|
-
return reverse;
|
|
7771
|
-
}
|
|
7772
|
-
function buildFallbackModels(region) {
|
|
7773
|
-
const maps = getRegionalMaps(region);
|
|
7774
|
-
const modelIds = Array.from(new Set(maps.flatMap((item) => Object.keys(item)))).sort();
|
|
7775
|
-
return modelIds.map((id) => buildModelItem(id));
|
|
7776
|
-
}
|
|
7777
|
-
function makeCacheKey(region) {
|
|
7778
|
-
return `models|${region}`;
|
|
7779
|
-
}
|
|
7780
|
-
function resolveFetchToken(token) {
|
|
7781
|
-
if (!token) return FALLBACK_TOKEN;
|
|
7782
|
-
const normalizedToken = parseProxyFromToken(token).token;
|
|
7783
|
-
assertTokenWithoutRegionPrefix(normalizedToken);
|
|
7784
|
-
return normalizedToken;
|
|
7785
|
-
}
|
|
7786
|
-
function extractCapabilities(item) {
|
|
7787
|
-
const features = Array.isArray(item.feats) ? item.feats.filter((feature) => typeof feature === "string" && feature.length > 0) : [];
|
|
7788
|
-
const options = Array.isArray(item.options) ? item.options.map(
|
|
7789
|
-
(option) => option && typeof option === "object" && typeof option.key === "string" ? option.key : void 0
|
|
7790
|
-
).filter((key) => typeof key === "string" && key.length > 0) : [];
|
|
7791
|
-
return Array.from(/* @__PURE__ */ new Set([...features, ...options]));
|
|
7792
|
-
}
|
|
7793
|
-
async function fetchConfigModelReqKeys(token, region) {
|
|
7794
|
-
const regionInfo = buildRegionInfo(region);
|
|
7795
|
-
const imageConfig = await request("post", "/mweb/v1/get_common_config", token, regionInfo, {
|
|
7796
|
-
data: {},
|
|
7797
|
-
params: { needCache: true, needRefresh: false }
|
|
7798
|
-
});
|
|
7799
|
-
const videoConfig = await request("post", "/mweb/v1/video_generate/get_common_config", token, regionInfo, {
|
|
7800
|
-
data: { scene: "generate_video", params: {} }
|
|
7801
|
-
});
|
|
7802
|
-
const imageModels = Array.isArray(imageConfig == null ? void 0 : imageConfig.model_list) ? imageConfig.model_list.map((item) => {
|
|
7803
|
-
const reqKey = item == null ? void 0 : item.model_req_key;
|
|
7804
|
-
if (typeof reqKey !== "string" || reqKey.length === 0) return void 0;
|
|
7805
|
-
return {
|
|
7806
|
-
reqKey,
|
|
7807
|
-
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
7808
|
-
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
7809
|
-
capabilities: extractCapabilities(item)
|
|
7810
|
-
};
|
|
7811
|
-
}).filter((item) => Boolean(item)) : [];
|
|
7812
|
-
const videoModels = Array.isArray(videoConfig == null ? void 0 : videoConfig.model_list) ? videoConfig.model_list.map((item) => {
|
|
7813
|
-
const reqKey = item == null ? void 0 : item.model_req_key;
|
|
7814
|
-
if (typeof reqKey !== "string" || reqKey.length === 0) return void 0;
|
|
7815
|
-
return {
|
|
7816
|
-
reqKey,
|
|
7817
|
-
modelName: typeof (item == null ? void 0 : item.model_name) === "string" ? item.model_name : void 0,
|
|
7818
|
-
modelTip: typeof (item == null ? void 0 : item.model_tip) === "string" ? item.model_tip : void 0,
|
|
7819
|
-
capabilities: extractCapabilities(item)
|
|
7820
|
-
};
|
|
7821
|
-
}).filter((item) => Boolean(item)) : [];
|
|
7822
|
-
return { imageModels, videoModels };
|
|
7823
|
-
}
|
|
7824
|
-
async function getLiveModels(authorization, xRegion) {
|
|
7825
|
-
const region = resolveRegion(authorization, xRegion);
|
|
7826
|
-
const token = resolveToken(authorization);
|
|
7827
|
-
const effectiveToken = resolveFetchToken(token);
|
|
7828
|
-
const cacheKey = makeCacheKey(region);
|
|
7829
|
-
const cached = modelCache.get(cacheKey);
|
|
7830
|
-
if (cached && cached.expiresAt > Date.now()) {
|
|
7831
|
-
return { source: cached.source, data: cached.data };
|
|
7832
|
-
}
|
|
7833
|
-
try {
|
|
7834
|
-
const reverseMap = buildReverseMap(region);
|
|
7835
|
-
const { imageModels, videoModels } = await fetchConfigModelReqKeys(effectiveToken, region);
|
|
7836
|
-
const upstreamModels = [...imageModels, ...videoModels];
|
|
7837
|
-
const metaByModelId = /* @__PURE__ */ new Map();
|
|
7838
|
-
const mapped = upstreamModels.map((model) => {
|
|
7839
|
-
const modelId = reverseMap[model.reqKey];
|
|
7840
|
-
if (modelId && !metaByModelId.has(modelId)) {
|
|
7841
|
-
metaByModelId.set(modelId, model);
|
|
7842
|
-
}
|
|
7843
|
-
return modelId;
|
|
7844
|
-
}).filter((item) => typeof item === "string" && item.length > 0);
|
|
7845
|
-
const modelIds = Array.from(new Set(mapped)).sort();
|
|
7846
|
-
if (modelIds.length === 0) {
|
|
7847
|
-
throw new Error("model_req_key resolved but none matched local reverse map");
|
|
7848
|
-
}
|
|
7849
|
-
const data = modelIds.map((id) => buildModelItem(id, metaByModelId.get(id)));
|
|
7850
|
-
modelCache.set(cacheKey, {
|
|
7851
|
-
expiresAt: Date.now() + CACHE_TTL_MS,
|
|
7852
|
-
source: "upstream",
|
|
7853
|
-
data
|
|
7854
|
-
});
|
|
7855
|
-
return { source: "upstream", data };
|
|
7856
|
-
} catch {
|
|
7857
|
-
const data = buildFallbackModels(region);
|
|
7858
|
-
modelCache.set(cacheKey, {
|
|
7859
|
-
expiresAt: Date.now() + CACHE_TTL_MS,
|
|
7860
|
-
source: "fallback",
|
|
7861
|
-
data
|
|
7862
|
-
});
|
|
7863
|
-
return { source: "fallback", data };
|
|
7864
|
-
}
|
|
7865
|
-
}
|
|
7866
|
-
async function refreshAllTokenModels() {
|
|
7867
|
-
return session_pool_default.refreshAllDynamicCapabilities();
|
|
7868
|
-
}
|
|
7869
|
-
|
|
7870
7903
|
// src/lib/smart-poller.ts
|
|
7871
7904
|
var SmartPoller = class {
|
|
7872
7905
|
pollCount = 0;
|
|
@@ -8408,7 +8441,6 @@ function printModelIds(models) {
|
|
|
8408
8441
|
}
|
|
8409
8442
|
}
|
|
8410
8443
|
function printModelVerbose(models) {
|
|
8411
|
-
console.log("id type desc capabilities");
|
|
8412
8444
|
for (const item of models) {
|
|
8413
8445
|
if (!item || typeof item !== "object") continue;
|
|
8414
8446
|
const m = item;
|
|
@@ -8417,7 +8449,17 @@ function printModelVerbose(models) {
|
|
|
8417
8449
|
const type = typeof m.model_type === "string" ? m.model_type : "-";
|
|
8418
8450
|
const desc = typeof m.description === "string" ? m.description : "-";
|
|
8419
8451
|
const caps = Array.isArray(m.capabilities) ? m.capabilities.filter((c) => typeof c === "string").join(",") : "-";
|
|
8420
|
-
console.log(`${id}
|
|
8452
|
+
console.log(`${id} [${type}] ${desc}`);
|
|
8453
|
+
console.log(` capabilities: ${caps}`);
|
|
8454
|
+
const params = m.params;
|
|
8455
|
+
if (params && typeof params === "object") {
|
|
8456
|
+
for (const [key, vals] of Object.entries(params)) {
|
|
8457
|
+
if (Array.isArray(vals)) {
|
|
8458
|
+
console.log(` ${key}: ${vals.join(", ")}`);
|
|
8459
|
+
}
|
|
8460
|
+
}
|
|
8461
|
+
}
|
|
8462
|
+
console.log("");
|
|
8421
8463
|
}
|
|
8422
8464
|
}
|
|
8423
8465
|
function createQueryCommandHandlers(deps) {
|
|
@@ -8468,20 +8510,22 @@ function createQueryCommandHandlers(deps) {
|
|
|
8468
8510
|
if (entries.length === 0) {
|
|
8469
8511
|
deps.fail("No enabled+live tokens with region found in pool.");
|
|
8470
8512
|
}
|
|
8471
|
-
const results =
|
|
8472
|
-
|
|
8473
|
-
|
|
8474
|
-
|
|
8475
|
-
|
|
8476
|
-
|
|
8477
|
-
|
|
8478
|
-
|
|
8479
|
-
|
|
8480
|
-
|
|
8481
|
-
|
|
8482
|
-
|
|
8483
|
-
|
|
8484
|
-
|
|
8513
|
+
const results = await Promise.all(
|
|
8514
|
+
entries.map(async (entry) => {
|
|
8515
|
+
const masked = maskToken(entry.token);
|
|
8516
|
+
try {
|
|
8517
|
+
const direct2 = await getLiveModels(`Bearer ${entry.token}`, entry.region);
|
|
8518
|
+
return {
|
|
8519
|
+
token: masked,
|
|
8520
|
+
region: entry.region,
|
|
8521
|
+
source: direct2.source,
|
|
8522
|
+
models: isVerbose ? direct2.data : direct2.data.map((m) => m.id)
|
|
8523
|
+
};
|
|
8524
|
+
} catch (error) {
|
|
8525
|
+
return { token: masked, region: entry.region, error: error instanceof Error ? error.message : String(error) };
|
|
8526
|
+
}
|
|
8527
|
+
})
|
|
8528
|
+
);
|
|
8485
8529
|
if (isJson) {
|
|
8486
8530
|
deps.printCommandJson("models.list", results);
|
|
8487
8531
|
return;
|
|
@@ -8490,6 +8534,8 @@ function createQueryCommandHandlers(deps) {
|
|
|
8490
8534
|
console.log(`[${r.region}] ${r.token}`);
|
|
8491
8535
|
if (r.error) {
|
|
8492
8536
|
console.log(` error: ${r.error}`);
|
|
8537
|
+
} else if (isVerbose) {
|
|
8538
|
+
printModelVerbose(r.models);
|
|
8493
8539
|
} else {
|
|
8494
8540
|
for (const id of r.models) console.log(` ${id}`);
|
|
8495
8541
|
}
|
|
@@ -9333,7 +9379,7 @@ async function generateImageComposition(_model, prompt, images, {
|
|
|
9333
9379
|
abilityName: "byte_edit",
|
|
9334
9380
|
strength: sampleStrength,
|
|
9335
9381
|
source: {
|
|
9336
|
-
imageUrl: `blob
|
|
9382
|
+
imageUrl: `blob:${INTERNATIONAL_FRONTEND_ORIGIN}/${util_default.uuid()}`
|
|
9337
9383
|
}
|
|
9338
9384
|
}));
|
|
9339
9385
|
const metricsExtra = buildMetricsExtra({
|
|
@@ -9368,7 +9414,7 @@ async function generateImageComposition(_model, prompt, images, {
|
|
|
9368
9414
|
draftContent,
|
|
9369
9415
|
metricsExtra
|
|
9370
9416
|
});
|
|
9371
|
-
const imageReferer = regionInfo.isCN ?
|
|
9417
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
9372
9418
|
const { aigc_data } = await request(
|
|
9373
9419
|
"post",
|
|
9374
9420
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -9532,7 +9578,7 @@ async function generateImagesInternal(_model, prompt, {
|
|
|
9532
9578
|
draftContent,
|
|
9533
9579
|
metricsExtra
|
|
9534
9580
|
});
|
|
9535
|
-
const imageReferer = regionInfo.isCN ?
|
|
9581
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
9536
9582
|
const { aigc_data } = await request(
|
|
9537
9583
|
"post",
|
|
9538
9584
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -9654,7 +9700,7 @@ async function generateJimeng4xMultiImages(_model, prompt, {
|
|
|
9654
9700
|
draftContent,
|
|
9655
9701
|
metricsExtra
|
|
9656
9702
|
});
|
|
9657
|
-
const imageReferer = regionInfo.isCN ?
|
|
9703
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
9658
9704
|
const { aigc_data } = await request(
|
|
9659
9705
|
"post",
|
|
9660
9706
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -9826,7 +9872,7 @@ async function upscaleImage(_model, image, {
|
|
|
9826
9872
|
draftContent,
|
|
9827
9873
|
metricsExtra
|
|
9828
9874
|
});
|
|
9829
|
-
const imageReferer = regionInfo.isCN ?
|
|
9875
|
+
const imageReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=image` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=image`;
|
|
9830
9876
|
const { aigc_data } = await request(
|
|
9831
9877
|
"post",
|
|
9832
9878
|
"/mweb/v1/aigc_draft/generate",
|
|
@@ -10876,7 +10922,7 @@ async function generateVideo(_model, prompt, {
|
|
|
10876
10922
|
}
|
|
10877
10923
|
};
|
|
10878
10924
|
}
|
|
10879
|
-
const videoReferer = regionInfo.isCN ?
|
|
10925
|
+
const videoReferer = regionInfo.isCN ? `${BASE_URL_CN}/ai-tool/generate?type=video` : `${INTERNATIONAL_FRONTEND_ORIGIN}/ai-tool/generate?type=video`;
|
|
10880
10926
|
const { aigc_data } = await request(
|
|
10881
10927
|
"post",
|
|
10882
10928
|
"/mweb/v1/aigc_draft/generate",
|