@iflyrpa/actions 4.1.0-beta.0 → 4.1.0-beta.2
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/actions/searchAccountInfo/index.d.ts +1 -1
- package/dist/bundle.js +88 -104
- package/dist/bundle.js.map +1 -1
- package/dist/index.js +86 -100
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -100
- package/dist/index.mjs.map +1 -1
- package/dist/utils/feishuAlarm.d.ts +4 -1
- package/dist/utils/http.d.ts +5 -0
- package/dist/utils/shipinhao/utils.d.ts +10 -0
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="47f14957-3de9-5f22-92f5-89210082b96d")}catch(e){}}();
|
|
3
3
|
import * as __WEBPACK_EXTERNAL_MODULE_crypto__ from "crypto";
|
|
4
4
|
import * as __WEBPACK_EXTERNAL_MODULE_fs__ from "fs";
|
|
5
5
|
import * as __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_package_json_58ae5f06__ from "@iflyrpa/share/package.json";
|
|
@@ -4352,7 +4352,7 @@ function __webpack_require__(moduleId) {
|
|
|
4352
4352
|
return module;
|
|
4353
4353
|
};
|
|
4354
4354
|
})();
|
|
4355
|
-
var package_namespaceObject = JSON.parse('{"i8":"4.1.0-beta.
|
|
4355
|
+
var package_namespaceObject = JSON.parse('{"i8":"4.1.0-beta.2"}');
|
|
4356
4356
|
const USER_MESSAGE = {
|
|
4357
4357
|
PROXY_UNAVAILABLE: "代理暂时不可用,请稍后重试或使用本地IP",
|
|
4358
4358
|
NETWORK_ERROR: "网络异常,请稍后重试",
|
|
@@ -4386,6 +4386,11 @@ function classifyPublishError(handledError) {
|
|
|
4386
4386
|
const RPA_ERROR_WEBHOOK_URL = "https://open.xfchat.iflytek.com/open-apis/bot/v2/hook/d202c0dc-5af5-40bc-83ed-abc677caa4a5";
|
|
4387
4387
|
const ALARM_THROTTLE_MS = 60000;
|
|
4388
4388
|
const lastSentAt = new Map();
|
|
4389
|
+
const THROTTLE_MAP_MAX_KEYS = 500;
|
|
4390
|
+
const pruneThrottleMap = (now)=>{
|
|
4391
|
+
if (lastSentAt.size < THROTTLE_MAP_MAX_KEYS) return;
|
|
4392
|
+
for (const [key, at] of lastSentAt)if (now - at >= ALARM_THROTTLE_MS) lastSentAt.delete(key);
|
|
4393
|
+
};
|
|
4389
4394
|
const postFeishuWebhook = (webhookUrl, payload)=>__WEBPACK_EXTERNAL_MODULE_axios__["default"].post(webhookUrl, payload, {
|
|
4390
4395
|
headers: {
|
|
4391
4396
|
"Content-Type": "application/json"
|
|
@@ -4463,10 +4468,11 @@ const buildFeishuPostMessage = (report)=>{
|
|
|
4463
4468
|
};
|
|
4464
4469
|
const reportFeishuAlarm = (report)=>{
|
|
4465
4470
|
try {
|
|
4466
|
-
const key = `${report.platform}|${report.source}|${report.errorType}|${report.code ?? ""}`;
|
|
4471
|
+
const key = `${report.platform}|${report.source}|${report.stage}|${report.errorType}|${report.code ?? ""}`;
|
|
4467
4472
|
const now = Date.now();
|
|
4468
4473
|
const last = lastSentAt.get(key);
|
|
4469
4474
|
if (last && now - last < ALARM_THROTTLE_MS) return;
|
|
4475
|
+
pruneThrottleMap(now);
|
|
4470
4476
|
lastSentAt.set(key, now);
|
|
4471
4477
|
postFeishuWebhook(RPA_ERROR_WEBHOOK_URL, buildFeishuPostMessage(report)).catch(()=>{});
|
|
4472
4478
|
} catch {}
|
|
@@ -4648,7 +4654,14 @@ const HTTP_STATUS_MESSAGE = {
|
|
|
4648
4654
|
};
|
|
4649
4655
|
class Http {
|
|
4650
4656
|
static handleApiError(error) {
|
|
4651
|
-
if (error && "object" == typeof error && "code" in error && "message" in error)
|
|
4657
|
+
if (error && "object" == typeof error && "code" in error && "message" in error) {
|
|
4658
|
+
const resp = error;
|
|
4659
|
+
if ("string" != typeof resp.message || !resp.message.trim()) return {
|
|
4660
|
+
...resp,
|
|
4661
|
+
message: USER_MESSAGE.SYSTEM_ERROR
|
|
4662
|
+
};
|
|
4663
|
+
return resp;
|
|
4664
|
+
}
|
|
4652
4665
|
return {
|
|
4653
4666
|
code: 500,
|
|
4654
4667
|
message: USER_MESSAGE.SYSTEM_ERROR,
|
|
@@ -4786,21 +4799,35 @@ class Http {
|
|
|
4786
4799
|
errorResponse.message = message;
|
|
4787
4800
|
}
|
|
4788
4801
|
if (error.message.includes("Proxy connection ended")) errorResponse.message = "所在区域代理连接超时,请更换区域或稍后重试!";
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
stage: `${(error.config?.method || "get").toUpperCase()} ${error.config?.url || "-"}`,
|
|
4795
|
-
errorType: status ? `HTTP_${status}` : error.code || "NETWORK_ERROR",
|
|
4796
|
-
code: errorResponse.code,
|
|
4797
|
-
msg: errorResponse.message,
|
|
4798
|
-
url: error.config?.url,
|
|
4799
|
-
title: "RPA接口异常"
|
|
4800
|
-
});
|
|
4802
|
+
errorResponse.extra = {
|
|
4803
|
+
...errorResponse.extra,
|
|
4804
|
+
alarmStatus: error.response?.status,
|
|
4805
|
+
alarmErrorCode: error.code
|
|
4806
|
+
};
|
|
4801
4807
|
throw errorResponse;
|
|
4802
4808
|
});
|
|
4803
4809
|
}
|
|
4810
|
+
reportRequestFailure(config, error, attempts) {
|
|
4811
|
+
const status = error.extra?.alarmStatus;
|
|
4812
|
+
const axiosCode = error.extra?.alarmErrorCode;
|
|
4813
|
+
const method = (config.method || "get").toUpperCase();
|
|
4814
|
+
const baseURL = config.baseURL || this.apiClient.defaults.baseURL || "";
|
|
4815
|
+
const fullUrl = config.url ? /^https?:\/\//.test(config.url) ? config.url : `${baseURL.replace(/\/$/, "")}${config.url}` : baseURL || "-";
|
|
4816
|
+
const rawMsg = "string" == typeof error.message && error.message.trim() ? error.message : "";
|
|
4817
|
+
const baseMsg = rawMsg || `请求失败(无错误文案,code=${error.code ?? "unknown"})`;
|
|
4818
|
+
const retriedSuffix = attempts > 0 ? `(已重试${attempts}次仍失败)` : "";
|
|
4819
|
+
reportFeishuAlarm({
|
|
4820
|
+
level: status && ALARM_STATUS.has(status) ? "alarm" : "warning",
|
|
4821
|
+
platform: "@iflyrpa/playwright",
|
|
4822
|
+
source: "http",
|
|
4823
|
+
stage: `${method} ${fullUrl}`,
|
|
4824
|
+
errorType: status ? `HTTP_${status}` : axiosCode || "NETWORK_ERROR",
|
|
4825
|
+
code: error.code,
|
|
4826
|
+
msg: `${baseMsg}${retriedSuffix}`,
|
|
4827
|
+
url: "-" !== fullUrl ? fullUrl : void 0,
|
|
4828
|
+
title: "RPA接口异常"
|
|
4829
|
+
});
|
|
4830
|
+
}
|
|
4804
4831
|
async api(config, options) {
|
|
4805
4832
|
const retries = options?.retries ?? 0;
|
|
4806
4833
|
const retryDelay = options?.retryDelay ?? 500;
|
|
@@ -4845,10 +4872,12 @@ class Http {
|
|
|
4845
4872
|
].includes(handledError.code);
|
|
4846
4873
|
if (Rtimes < retries && isRetry) {
|
|
4847
4874
|
const url = config.url || "";
|
|
4848
|
-
|
|
4849
|
-
|
|
4875
|
+
const backoff = Math.min(retryDelay * 2 ** Rtimes, 5000);
|
|
4876
|
+
this.logger?.warn(`进入第${Rtimes + 1}次重试!错误码: ${handledError.code}, 等待: ${backoff}ms, 请求地址: ${url}`);
|
|
4877
|
+
await new Promise((resolve)=>setTimeout(resolve, backoff));
|
|
4850
4878
|
return sessionRt(Rtimes + 1);
|
|
4851
4879
|
}
|
|
4880
|
+
this.reportRequestFailure(config, handledError, Rtimes);
|
|
4852
4881
|
return Promise.reject(handledError);
|
|
4853
4882
|
}
|
|
4854
4883
|
};
|
|
@@ -9950,7 +9979,8 @@ const XhsFansExport = async (_task, params)=>{
|
|
|
9950
9979
|
},
|
|
9951
9980
|
_task.logger,
|
|
9952
9981
|
params.proxyLoc,
|
|
9953
|
-
params.accountId
|
|
9982
|
+
params.accountId,
|
|
9983
|
+
"xiaohongshu"
|
|
9954
9984
|
];
|
|
9955
9985
|
const http = new Http(...args);
|
|
9956
9986
|
const fans = {
|
|
@@ -9964,8 +9994,8 @@ const XhsFansExport = async (_task, params)=>{
|
|
|
9964
9994
|
url: "https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info"
|
|
9965
9995
|
}, {
|
|
9966
9996
|
retries: 3,
|
|
9967
|
-
retryDelay:
|
|
9968
|
-
timeout:
|
|
9997
|
+
retryDelay: 300,
|
|
9998
|
+
timeout: 30000
|
|
9969
9999
|
});
|
|
9970
10000
|
fans.fans_count = Number(res.data.fans_count);
|
|
9971
10001
|
fans.digg_count = Number(res.data.faved_count);
|
|
@@ -11102,7 +11132,8 @@ const XhsSessionCheck = async (_task, params)=>{
|
|
|
11102
11132
|
},
|
|
11103
11133
|
_task.logger,
|
|
11104
11134
|
params.proxyLoc,
|
|
11105
|
-
params.accountId
|
|
11135
|
+
params.accountId,
|
|
11136
|
+
"xiaohongshu"
|
|
11106
11137
|
];
|
|
11107
11138
|
const http = new Http(...args);
|
|
11108
11139
|
http.addResponseInterceptor((response)=>{
|
|
@@ -11150,8 +11181,8 @@ const XhsSessionCheck = async (_task, params)=>{
|
|
|
11150
11181
|
headers: loginBaseXsHeader
|
|
11151
11182
|
}, {
|
|
11152
11183
|
retries: 3,
|
|
11153
|
-
retryDelay:
|
|
11154
|
-
timeout:
|
|
11184
|
+
retryDelay: 300,
|
|
11185
|
+
timeout: 30000
|
|
11155
11186
|
}).catch((e)=>{
|
|
11156
11187
|
const clientTimestamp = Date.now();
|
|
11157
11188
|
const serverDate = e?.extra?.serverDate;
|
|
@@ -11183,8 +11214,8 @@ const XhsSessionCheck = async (_task, params)=>{
|
|
|
11183
11214
|
headers: webSessionXsHeader
|
|
11184
11215
|
}, {
|
|
11185
11216
|
retries: 3,
|
|
11186
|
-
retryDelay:
|
|
11187
|
-
timeout:
|
|
11217
|
+
retryDelay: 300,
|
|
11218
|
+
timeout: 30000
|
|
11188
11219
|
});
|
|
11189
11220
|
const [baseInfo, web_session] = await Promise.all([
|
|
11190
11221
|
_baseInfo,
|
|
@@ -11276,6 +11307,10 @@ const ShipinhaoSessionCheck = async (_task, params)=>{
|
|
|
11276
11307
|
};
|
|
11277
11308
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.success)(data, message);
|
|
11278
11309
|
};
|
|
11310
|
+
const extractEncFileKey = (downloadUrl)=>{
|
|
11311
|
+
if (!downloadUrl) return "";
|
|
11312
|
+
return downloadUrl.split("encfilekey=")[1]?.split("&")[0] || "";
|
|
11313
|
+
};
|
|
11279
11314
|
const rid = ()=>`${Math.floor(Date.now() / 1e3).toString(16)}-${[
|
|
11280
11315
|
...Array(8)
|
|
11281
11316
|
].map(()=>Math.floor(16 * Math.random()).toString(16)).join("")}`;
|
|
@@ -15430,7 +15465,8 @@ const getXhsUnreadCount = async (_task, params)=>{
|
|
|
15430
15465
|
},
|
|
15431
15466
|
_task.logger,
|
|
15432
15467
|
params.proxyLoc,
|
|
15433
|
-
params.accountId
|
|
15468
|
+
params.accountId,
|
|
15469
|
+
"xiaohongshu"
|
|
15434
15470
|
];
|
|
15435
15471
|
const http = new Http(...args);
|
|
15436
15472
|
let unreadCount = {
|
|
@@ -15459,8 +15495,8 @@ const getXhsUnreadCount = async (_task, params)=>{
|
|
|
15459
15495
|
headers: xsHeader
|
|
15460
15496
|
}, {
|
|
15461
15497
|
retries: 3,
|
|
15462
|
-
retryDelay:
|
|
15463
|
-
timeout:
|
|
15498
|
+
retryDelay: 300,
|
|
15499
|
+
timeout: 30000
|
|
15464
15500
|
});
|
|
15465
15501
|
const isSuccess = 0 === res.code;
|
|
15466
15502
|
if (isSuccess) unreadCount = res.data;
|
|
@@ -15871,7 +15907,8 @@ async function getXiaohongshuData(_task, params) {
|
|
|
15871
15907
|
},
|
|
15872
15908
|
_task.logger,
|
|
15873
15909
|
params.proxyLoc,
|
|
15874
|
-
params.accountId
|
|
15910
|
+
params.accountId,
|
|
15911
|
+
"xiaohongshu"
|
|
15875
15912
|
];
|
|
15876
15913
|
const http = new Http(...args);
|
|
15877
15914
|
const xsEncrypt = new Xhshow();
|
|
@@ -15887,8 +15924,8 @@ async function getXiaohongshuData(_task, params) {
|
|
|
15887
15924
|
url: "https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info"
|
|
15888
15925
|
}, {
|
|
15889
15926
|
retries: 3,
|
|
15890
|
-
retryDelay:
|
|
15891
|
-
timeout:
|
|
15927
|
+
retryDelay: 300,
|
|
15928
|
+
timeout: 30000
|
|
15892
15929
|
}),
|
|
15893
15930
|
http.api({
|
|
15894
15931
|
method: "get",
|
|
@@ -15897,8 +15934,8 @@ async function getXiaohongshuData(_task, params) {
|
|
|
15897
15934
|
headers: sevenDataXsHeader
|
|
15898
15935
|
}, {
|
|
15899
15936
|
retries: 3,
|
|
15900
|
-
retryDelay:
|
|
15901
|
-
timeout:
|
|
15937
|
+
retryDelay: 300,
|
|
15938
|
+
timeout: 30000
|
|
15902
15939
|
})
|
|
15903
15940
|
]);
|
|
15904
15941
|
const xhsData = {
|
|
@@ -18935,7 +18972,7 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18935
18972
|
const resultMsg = publishResult.data?.baseResp?.errmsg ?? publishResult.errMsg;
|
|
18936
18973
|
if (0 === resultCode) {
|
|
18937
18974
|
task.logger.info("[shipinhaoPublish] 发布成功");
|
|
18938
|
-
const publishId = uploadedImages[0]?.thumbUrl
|
|
18975
|
+
const publishId = extractEncFileKey(uploadedImages[0]?.thumbUrl);
|
|
18939
18976
|
await updateTaskState?.({
|
|
18940
18977
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
18941
18978
|
result: {
|
|
@@ -19830,8 +19867,7 @@ async function uploader_uploadFile(opts) {
|
|
|
19830
19867
|
const partTimeout = tuning?.partTimeout ?? DEFAULT_TUNING.partTimeout;
|
|
19831
19868
|
const partRetries = tuning?.partRetries ?? DEFAULT_TUNING.partRetries;
|
|
19832
19869
|
const completeTimeout = tuning?.completeTimeout ?? DEFAULT_TUNING.completeTimeout;
|
|
19833
|
-
logger?.info(
|
|
19834
|
-
logger?.info(`上传超时策略: 单片 ${partTimeout / 1000}s(重试 ${partRetries} 次)、合并 ${completeTimeout / 1000}s`);
|
|
19870
|
+
logger?.info(`[shipinhaoPublishVideo] 开始上传: ${fileName} (${fileSize} B, filetype=${fileType})`);
|
|
19835
19871
|
const fileMd5 = await computeFileMd5(filePath);
|
|
19836
19872
|
const taskId = generateTaskId(fileName, fileSize, fileMd5);
|
|
19837
19873
|
const baseUrl = "https://finderassistancea.video.qq.com";
|
|
@@ -19842,7 +19878,7 @@ async function uploader_uploadFile(opts) {
|
|
|
19842
19878
|
const chunkCount = Math.ceil(fileSize / CHUNK_SIZE);
|
|
19843
19879
|
const blockPartLength = [];
|
|
19844
19880
|
for(let i = 0; i < chunkCount; i++)blockPartLength.push(Math.min((i + 1) * CHUNK_SIZE, fileSize));
|
|
19845
|
-
logger?.info(
|
|
19881
|
+
logger?.info(`[shipinhaoPublishVideo] 视频分片: ${chunkCount} 片`);
|
|
19846
19882
|
const applyRes = await http.api({
|
|
19847
19883
|
method: "PUT",
|
|
19848
19884
|
url: `${baseUrl}/applyuploaddfs`,
|
|
@@ -19863,7 +19899,6 @@ async function uploader_uploadFile(opts) {
|
|
|
19863
19899
|
let uploadId = applyRes.UploadID;
|
|
19864
19900
|
const uploadedParts = new Set();
|
|
19865
19901
|
if (applyRes.ListPartsResult) {
|
|
19866
|
-
logger?.info("检测到已上传分片,执行续传");
|
|
19867
19902
|
const parts = Array.isArray(applyRes.ListPartsResult.Part) ? applyRes.ListPartsResult.Part : applyRes.ListPartsResult.Part ? [
|
|
19868
19903
|
applyRes.ListPartsResult.Part
|
|
19869
19904
|
] : [];
|
|
@@ -19899,7 +19934,6 @@ async function uploader_uploadFile(opts) {
|
|
|
19899
19934
|
PartNumber: partNumber,
|
|
19900
19935
|
ETag: existing.ETag
|
|
19901
19936
|
});
|
|
19902
|
-
logger?.info(`分片 ${partNumber}/${chunkCount} 已存在,跳过`);
|
|
19903
19937
|
continue;
|
|
19904
19938
|
}
|
|
19905
19939
|
}
|
|
@@ -19924,18 +19958,15 @@ async function uploader_uploadFile(opts) {
|
|
|
19924
19958
|
retries: partRetries,
|
|
19925
19959
|
retryDelay: 2000
|
|
19926
19960
|
});
|
|
19927
|
-
|
|
19928
|
-
const throughput = Math.round(chunkSize / (partElapsed / 1000));
|
|
19961
|
+
Date.now();
|
|
19929
19962
|
partInfo.push({
|
|
19930
19963
|
PartNumber: partNumber,
|
|
19931
19964
|
ETag: `"${chunkMd5}"`
|
|
19932
19965
|
});
|
|
19933
|
-
logger?.info(`分片 ${partNumber}/${chunkCount} 完成 (${chunkSize} B, ${partElapsed}ms, ${Math.round(throughput / 1024)}KB/s)`);
|
|
19934
19966
|
}
|
|
19935
19967
|
} finally{
|
|
19936
19968
|
__WEBPACK_EXTERNAL_MODULE_node_fs_5ea92f0c__["default"].closeSync(fd);
|
|
19937
19969
|
}
|
|
19938
|
-
logger?.info("合并分片...");
|
|
19939
19970
|
const completeRes = await http.api({
|
|
19940
19971
|
method: "POST",
|
|
19941
19972
|
url: `${baseUrl}/completepartuploaddfs?UploadID=${encodeURIComponent(uploadId)}`,
|
|
@@ -19953,7 +19984,7 @@ async function uploader_uploadFile(opts) {
|
|
|
19953
19984
|
retryDelay: 3000
|
|
19954
19985
|
});
|
|
19955
19986
|
if (!completeRes.DownloadURL) throw new Error("合并分片失败: " + JSON.stringify(completeRes));
|
|
19956
|
-
logger?.info(
|
|
19987
|
+
logger?.info(`[shipinhaoPublishVideo] ${fileName} 上传成功`);
|
|
19957
19988
|
return {
|
|
19958
19989
|
downloadUrl: completeRes.DownloadURL,
|
|
19959
19990
|
md5: fileMd5,
|
|
@@ -20347,7 +20378,6 @@ function buildCommonBody(finderUsername) {
|
|
|
20347
20378
|
};
|
|
20348
20379
|
}
|
|
20349
20380
|
async function getTraceKey(auth, client, http, logger) {
|
|
20350
|
-
logger.info("[getTraceKey] 开始获取 traceKey...");
|
|
20351
20381
|
const res = await http.api({
|
|
20352
20382
|
method: "POST",
|
|
20353
20383
|
url: `${MICRO_CONTENT_BASE}/post/get-finder-post-trace-key`,
|
|
@@ -20362,11 +20392,9 @@ async function getTraceKey(auth, client, http, logger) {
|
|
|
20362
20392
|
logger.error("[getTraceKey] 获取失败:", JSON.stringify(res));
|
|
20363
20393
|
throw new Error(`获取 traceKey 失败: ${JSON.stringify(res)}`);
|
|
20364
20394
|
}
|
|
20365
|
-
logger.info(`[getTraceKey] 获取成功: ${res.data.traceKey}`);
|
|
20366
20395
|
return res.data.traceKey;
|
|
20367
20396
|
}
|
|
20368
20397
|
async function getObjectTagKey(auth, client, http, logger) {
|
|
20369
|
-
logger.info("[getObjectTagKey] 获取内容声明 tagKey...");
|
|
20370
20398
|
try {
|
|
20371
20399
|
const res = await http.api({
|
|
20372
20400
|
method: "POST",
|
|
@@ -20382,7 +20410,6 @@ async function getObjectTagKey(auth, client, http, logger) {
|
|
|
20382
20410
|
logger.warn(`[getObjectTagKey] 未取到 tagKey: ${JSON.stringify(res)}`);
|
|
20383
20411
|
return null;
|
|
20384
20412
|
}
|
|
20385
|
-
logger.info(`[getObjectTagKey] tagKey: ${res.data.tagKey}`);
|
|
20386
20413
|
return res.data.tagKey;
|
|
20387
20414
|
} catch (error) {
|
|
20388
20415
|
logger.warn(`[getObjectTagKey] 获取 tagKey 异常: ${stringifyError(error)}`);
|
|
@@ -20391,7 +20418,6 @@ async function getObjectTagKey(auth, client, http, logger) {
|
|
|
20391
20418
|
}
|
|
20392
20419
|
async function submitAndPollTranscode(opts) {
|
|
20393
20420
|
const { videoUrl, videoMeta, traceKey, uploadStartTime, uploadEndTime, finderUsername, client, http, logger } = opts;
|
|
20394
|
-
logger.info("[submitAndPollTranscode] 开始提交转码任务...");
|
|
20395
20421
|
const finderUrl = videoUrl.includes("wxapp.tc.qq.com") ? `https://finder.video.qq.com${videoUrl.split("qq.com")[1]}` : videoUrl;
|
|
20396
20422
|
logger.info(`[submitAndPollTranscode] 视频尺寸: ${videoMeta.width}x${videoMeta.height}, 时长: ${videoMeta.duration}s`);
|
|
20397
20423
|
const submitRes = await http.api({
|
|
@@ -20430,12 +20456,10 @@ async function submitAndPollTranscode(opts) {
|
|
|
20430
20456
|
throw new Error(`提交转码失败: ${JSON.stringify(submitRes)}`);
|
|
20431
20457
|
}
|
|
20432
20458
|
const { clipKey, draftId } = submitRes.data;
|
|
20433
|
-
logger.info(`[submitAndPollTranscode] 转码任务已提交,clipKey: ${clipKey}, draftId: ${draftId}`);
|
|
20434
20459
|
const pollInterval = 5000;
|
|
20435
20460
|
const pollBudget = Math.min(1800000, 300000 + 1000 * Math.ceil(1.5 * videoMeta.duration));
|
|
20436
20461
|
const maxPolls = Math.ceil(pollBudget / pollInterval);
|
|
20437
20462
|
let pollCount = 0;
|
|
20438
|
-
logger.info(`[submitAndPollTranscode] 开始轮询转码结果,最多 ${maxPolls} 次(${Math.round(pollBudget / 1000)}s),间隔 ${pollInterval / 1000}s`);
|
|
20439
20463
|
while(pollCount < maxPolls){
|
|
20440
20464
|
await sleep(pollInterval);
|
|
20441
20465
|
pollCount++;
|
|
@@ -20459,14 +20483,12 @@ async function submitAndPollTranscode(opts) {
|
|
|
20459
20483
|
throw new Error(`转码轮询失败 (poll ${pollCount}): ${JSON.stringify(pollRes)}`);
|
|
20460
20484
|
}
|
|
20461
20485
|
const { flag, url, width, height, duration, md5, fileSize } = pollRes.data || {};
|
|
20462
|
-
logger.info(`[submitAndPollTranscode] 轮询第 ${pollCount} 次,flag=${flag}`);
|
|
20463
20486
|
if (1 === flag) {
|
|
20464
20487
|
if (!url || !width || !height || !duration || !md5 || !fileSize) {
|
|
20465
20488
|
logger.error("[submitAndPollTranscode] 转码完成但返回数据不完整:", JSON.stringify(pollRes.data));
|
|
20466
20489
|
throw new Error(`转码完成但返回数据不完整: ${JSON.stringify(pollRes.data)}`);
|
|
20467
20490
|
}
|
|
20468
20491
|
logger.info(`[submitAndPollTranscode] 转码完成! 用时: ${pollCount * pollInterval / 1000}s`);
|
|
20469
|
-
logger.info(`[submitAndPollTranscode] 视频信息: ${width}x${height}, 时长: ${duration}s, 大小: ${fileSize}`);
|
|
20470
20492
|
return {
|
|
20471
20493
|
clipKey,
|
|
20472
20494
|
url,
|
|
@@ -20477,7 +20499,7 @@ async function submitAndPollTranscode(opts) {
|
|
|
20477
20499
|
fileSize
|
|
20478
20500
|
};
|
|
20479
20501
|
}
|
|
20480
|
-
if (2 === flag)
|
|
20502
|
+
if (2 === flag) ;
|
|
20481
20503
|
else {
|
|
20482
20504
|
logger.error(`[submitAndPollTranscode] 转码失败,未知 flag=${flag}:`, JSON.stringify(pollRes.data));
|
|
20483
20505
|
throw new Error(`转码失败,未知 flag=${flag}: ${JSON.stringify(pollRes.data)}`);
|
|
@@ -20488,16 +20510,11 @@ async function submitAndPollTranscode(opts) {
|
|
|
20488
20510
|
}
|
|
20489
20511
|
async function publishVideo(opts) {
|
|
20490
20512
|
const { params, auth, client, clipResult, videoUpload, coverUpload, verticalCoverUpload, videoMeta, traceKey, tagKey, uploadStartTime, uploadEndTime, proxyHttp, logger } = opts;
|
|
20491
|
-
logger.info("[publishVideo] 开始构建发布请求...");
|
|
20492
20513
|
const toFinderUrl = (url)=>url.includes("wxapp.tc.qq.com") ? `https://finder.video.qq.com${url.split("qq.com")[1]}` : url;
|
|
20493
20514
|
const thumbFinderUrl = toFinderUrl(coverUpload.downloadUrl);
|
|
20494
20515
|
const coverFinderUrl = toFinderUrl(verticalCoverUpload.downloadUrl);
|
|
20495
20516
|
const md5sumUuid = __WEBPACK_EXTERNAL_MODULE_node_crypto_9ba42079__["default"].randomUUID();
|
|
20496
20517
|
const description = params.description;
|
|
20497
|
-
logger.info("[publishVideo] 发布参数:");
|
|
20498
|
-
logger.info(` - 短标题: ${params.title || "(无)"}`);
|
|
20499
|
-
logger.info(` - 描述: ${description.substring(0, 50)}${description.length > 50 ? "..." : ""}`);
|
|
20500
|
-
logger.info(` - 定时发布: ${params.scheduledTime ? new Date(1000 * params.scheduledTime).toLocaleString() : "立即发布"}`);
|
|
20501
20518
|
const objectDesc = {
|
|
20502
20519
|
mpTitle: "",
|
|
20503
20520
|
description,
|
|
@@ -20571,7 +20588,6 @@ async function publishVideo(opts) {
|
|
|
20571
20588
|
};
|
|
20572
20589
|
if (params.scheduledTime) publishData.effectiveTime = params.scheduledTime;
|
|
20573
20590
|
if (params.tagInfo && tagKey) publishData.tagInfo = buildTagInfo(params.tagInfo, tagKey);
|
|
20574
|
-
logger.info("[publishVideo] 开始发布视频,全部参数:" + JSON.stringify(publishData));
|
|
20575
20591
|
const publishRes = await proxyHttp.api({
|
|
20576
20592
|
method: "POST",
|
|
20577
20593
|
url: `${MICRO_CONTENT_BASE}/post/post_create`,
|
|
@@ -20579,7 +20595,7 @@ async function publishVideo(opts) {
|
|
|
20579
20595
|
data: publishData,
|
|
20580
20596
|
defaultErrorMsg: "发布视频失败"
|
|
20581
20597
|
});
|
|
20582
|
-
logger.info(`[publishVideo]
|
|
20598
|
+
logger.info(`[publishVideo] 发布结果: errCode=${publishRes.errCode}, baseResp.errcode=${publishRes.data?.baseResp?.errcode}`);
|
|
20583
20599
|
return publishRes;
|
|
20584
20600
|
}
|
|
20585
20601
|
function sleep(ms) {
|
|
@@ -20593,11 +20609,9 @@ async function resolveLocalCoverPath(coverPath, label, tmpCachePath, logger) {
|
|
|
20593
20609
|
return savePath;
|
|
20594
20610
|
}
|
|
20595
20611
|
const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
20596
|
-
task.logger.info("[shipinhaoPublishVideo] 开始执行视频号视频发布 - Mock API 方式");
|
|
20597
20612
|
const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
|
|
20598
20613
|
let currentStep = "初始化";
|
|
20599
20614
|
try {
|
|
20600
|
-
task.logger.info(`[shipinhaoPublishVideo] 发布方式: ${params.scheduledTime ? `定时 ${new Date(1000 * params.scheduledTime).toLocaleString()}` : "立即发布"}`);
|
|
20601
20615
|
currentStep = "解析认证信息";
|
|
20602
20616
|
const cookieString = params.cookies.map((c)=>`${c.name}=${c.value}`).join("; ");
|
|
20603
20617
|
const http = new Http({
|
|
@@ -20609,11 +20623,8 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20609
20623
|
if (!params.videoPath) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "视频文件路径不能为空", "");
|
|
20610
20624
|
if (!params.coverPath) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "横屏封面图片路径不能为空", "");
|
|
20611
20625
|
currentStep = "获取上传认证";
|
|
20612
|
-
task.logger.info("[shipinhaoPublishVideo] 获取上传认证...");
|
|
20613
20626
|
const auth = await getShipinhaoUploadAuth(cookieString, http);
|
|
20614
20627
|
const client = resolveClientContext(params, auth.uin);
|
|
20615
|
-
if (!client.aId) task.logger.warn("[shipinhaoPublishVideo] extraParam.aId 缺失,query 将不带 _aid");
|
|
20616
|
-
if (!client.fingerPrintDeviceId) task.logger.warn("[shipinhaoPublishVideo] extraParam.fingerPrintDeviceId 缺失,请求将不带 finger-print-device-id");
|
|
20617
20628
|
const publishHeaders = buildPublishHeaders(cookieString, client);
|
|
20618
20629
|
const microHttp = new Http({
|
|
20619
20630
|
headers: publishHeaders
|
|
@@ -20629,25 +20640,20 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20629
20640
|
];
|
|
20630
20641
|
const proxyHttp = new Http(...args);
|
|
20631
20642
|
currentStep = "组装视频元数据";
|
|
20632
|
-
task.logger.info("[shipinhaoPublishVideo] 组装视频元数据...");
|
|
20633
20643
|
const videoMeta = buildVideoMetaFromParams(params.videoPath, params.videoMetadata);
|
|
20634
20644
|
task.logger.info(`[shipinhaoPublishVideo] 视频: ${videoMeta.width}×${videoMeta.height}, ${videoMeta.duration.toFixed(2)}s, ${(videoMeta.fileSize / 1024 / 1024).toFixed(2)}MB, codec=${videoMeta.codec || "unknown"}`);
|
|
20635
|
-
if (!videoMeta.codec) task.logger.warn("[shipinhaoPublishVideo] 未能读取视频编码格式,跳过 H.264 预检,交由服务端判断");
|
|
20636
20645
|
currentStep = "校验视频限制";
|
|
20637
20646
|
const validationError = validateShipinhaoVideo(params.videoPath, videoMeta);
|
|
20638
20647
|
if (validationError) {
|
|
20639
|
-
task.logger.error(`[shipinhaoPublishVideo] 视频校验未通过: ${validationError}`);
|
|
20640
20648
|
await updateTaskState?.({
|
|
20641
20649
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
20642
20650
|
error: validationError
|
|
20643
20651
|
});
|
|
20644
20652
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, validationError, "");
|
|
20645
20653
|
}
|
|
20646
|
-
task.logger.info("[shipinhaoPublishVideo] 视频校验通过");
|
|
20647
20654
|
currentStep = "校验标题";
|
|
20648
20655
|
const titleError = validateShipinhaoTitle(params.title);
|
|
20649
20656
|
if (titleError) {
|
|
20650
|
-
task.logger.error(`[shipinhaoPublishVideo] 标题校验未通过: ${titleError}`);
|
|
20651
20657
|
await updateTaskState?.({
|
|
20652
20658
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
20653
20659
|
error: titleError
|
|
@@ -20655,7 +20661,6 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20655
20661
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, titleError, "");
|
|
20656
20662
|
}
|
|
20657
20663
|
currentStep = "获取 traceKey";
|
|
20658
|
-
task.logger.info("[shipinhaoPublishVideo] 获取 traceKey...");
|
|
20659
20664
|
const traceKey = await getTraceKey(auth, client, microHttp, task.logger);
|
|
20660
20665
|
let tagKey = null;
|
|
20661
20666
|
if (params.tagInfo) {
|
|
@@ -20663,11 +20668,7 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20663
20668
|
tagKey = await getObjectTagKey(auth, client, microHttp, task.logger);
|
|
20664
20669
|
}
|
|
20665
20670
|
const uploadStartTime = Math.floor(Date.now() / 1000);
|
|
20666
|
-
task.logger.info(`[shipinhaoPublishVideo] 上传开始时间: ${uploadStartTime}`);
|
|
20667
20671
|
currentStep = "上传视频";
|
|
20668
|
-
task.logger.info("[shipinhaoPublishVideo] 上传视频...");
|
|
20669
|
-
task.logger.info(`[shipinhaoPublishVideo] 视频路径: ${params.videoPath}`);
|
|
20670
|
-
task.logger.info(`[shipinhaoPublishVideo] 视频文件类型: ${auth.videoFileType}`);
|
|
20671
20672
|
const videoUpload = await uploader_uploadFile({
|
|
20672
20673
|
filePath: params.videoPath,
|
|
20673
20674
|
fileType: auth.videoFileType,
|
|
@@ -20676,12 +20677,10 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20676
20677
|
http,
|
|
20677
20678
|
logger: task.logger
|
|
20678
20679
|
});
|
|
20679
|
-
task.logger.info("[shipinhaoPublishVideo] 视频上传完成");
|
|
20680
20680
|
const uploadEndTime = Math.floor(Date.now() / 1000);
|
|
20681
|
-
task.logger.info(`[shipinhaoPublishVideo]
|
|
20681
|
+
task.logger.info(`[shipinhaoPublishVideo] 耗时: ${uploadEndTime - uploadStartTime}s`);
|
|
20682
20682
|
currentStep = "上传横屏封面";
|
|
20683
20683
|
const localCoverPath = await resolveLocalCoverPath(params.coverPath, "横屏封面", task.getTmpPath(), task.logger);
|
|
20684
|
-
task.logger.info("[shipinhaoPublishVideo] 上传横屏封面...");
|
|
20685
20684
|
const coverUpload = await uploader_uploadFile({
|
|
20686
20685
|
filePath: localCoverPath,
|
|
20687
20686
|
fileType: auth.pictureFileType,
|
|
@@ -20690,12 +20689,10 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20690
20689
|
http,
|
|
20691
20690
|
logger: task.logger
|
|
20692
20691
|
});
|
|
20693
|
-
task.logger.info("[shipinhaoPublishVideo] 横屏封面上传完成");
|
|
20694
20692
|
let verticalCoverUpload = coverUpload;
|
|
20695
20693
|
if (params.verticalCoverPath) {
|
|
20696
20694
|
currentStep = "上传竖屏封面";
|
|
20697
20695
|
const localVerticalPath = await resolveLocalCoverPath(params.verticalCoverPath, "竖屏封面", task.getTmpPath(), task.logger);
|
|
20698
|
-
task.logger.info("[shipinhaoPublishVideo] 上传竖屏封面");
|
|
20699
20696
|
verticalCoverUpload = await uploader_uploadFile({
|
|
20700
20697
|
filePath: localVerticalPath,
|
|
20701
20698
|
fileType: auth.pictureFileType,
|
|
@@ -20704,10 +20701,8 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20704
20701
|
http,
|
|
20705
20702
|
logger: task.logger
|
|
20706
20703
|
});
|
|
20707
|
-
|
|
20708
|
-
} else task.logger.info("[shipinhaoPublishVideo] 未传竖屏封面,复用横屏封面");
|
|
20704
|
+
}
|
|
20709
20705
|
currentStep = "提交转码";
|
|
20710
|
-
task.logger.info("[shipinhaoPublishVideo] 提交转码...");
|
|
20711
20706
|
const clipResult = await submitAndPollTranscode({
|
|
20712
20707
|
videoUrl: videoUpload.downloadUrl,
|
|
20713
20708
|
videoMeta,
|
|
@@ -20720,8 +20715,6 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20720
20715
|
logger: task.logger
|
|
20721
20716
|
});
|
|
20722
20717
|
currentStep = "发布视频";
|
|
20723
|
-
task.logger.info("[shipinhaoPublishVideo] 发布视频...");
|
|
20724
|
-
task.logger.info(`[shipinhaoPublishVideo] clipKey: ${clipResult.clipKey}`);
|
|
20725
20718
|
let publishResult;
|
|
20726
20719
|
try {
|
|
20727
20720
|
publishResult = await publishVideo({
|
|
@@ -20746,7 +20739,6 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20746
20739
|
const classified = classifyPublishError(handledError);
|
|
20747
20740
|
if (classified) {
|
|
20748
20741
|
const message = `${classified.userMessage}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
20749
|
-
task.logger.error(`[shipinhaoPublishVideo] ${classified.category},直接返回: ${handledError.message} (code=${handledError.code})`, stringifyError(handledError));
|
|
20750
20742
|
await updateTaskState?.({
|
|
20751
20743
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
20752
20744
|
error: message
|
|
@@ -20763,11 +20755,8 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20763
20755
|
const resultCode = publishResult.data?.baseResp?.errcode ?? publishResult.errCode;
|
|
20764
20756
|
const resultMsg = publishResult.data?.baseResp?.errmsg ?? (0 === resultCode ? "发布成功" : `发布失败(errCode=${resultCode})`);
|
|
20765
20757
|
if (0 === resultCode) {
|
|
20766
|
-
|
|
20767
|
-
task.logger.
|
|
20768
|
-
task.logger.info(`[shipinhaoPublishVideo] 视频URL: ${clipResult.url}`);
|
|
20769
|
-
task.logger.info(`[shipinhaoPublishVideo] 横屏封面URL: ${coverUpload.downloadUrl}`);
|
|
20770
|
-
task.logger.info(`[shipinhaoPublishVideo] 竖屏封面URL: ${verticalCoverUpload.downloadUrl}`);
|
|
20758
|
+
const publishId = extractEncFileKey(verticalCoverUpload.downloadUrl);
|
|
20759
|
+
if (!publishId) task.logger.error(`[shipinhaoPublishVideo] 封面 DownloadURL 中未解析到 encfilekey,关联 id 为空: ${verticalCoverUpload.downloadUrl}`);
|
|
20771
20760
|
await updateTaskState?.({
|
|
20772
20761
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
20773
20762
|
result: {
|
|
@@ -20797,8 +20786,7 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20797
20786
|
},
|
|
20798
20787
|
platform: "shipinhao"
|
|
20799
20788
|
});
|
|
20800
|
-
|
|
20801
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(0, "发布成功", clipResult.clipKey);
|
|
20789
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(0, "发布成功", publishId);
|
|
20802
20790
|
}
|
|
20803
20791
|
let errorMessage = resultMsg;
|
|
20804
20792
|
if (-11224 === resultCode) errorMessage = "视频号管理员完成实名且绑定手机号后才可以发表";
|
|
@@ -20810,18 +20798,16 @@ const shipinhaoPublishVideo_mock_mockAction = async (task, params)=>{
|
|
|
20810
20798
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
20811
20799
|
error: errorMessage
|
|
20812
20800
|
});
|
|
20813
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(
|
|
20801
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, errorMessage, "");
|
|
20814
20802
|
} catch (error) {
|
|
20815
20803
|
const handledError = Http.handleApiError(error);
|
|
20816
20804
|
const errorMsg = handledError.message || "发布失败,请稍后重试";
|
|
20817
|
-
const errorCode = handledError.code || 414;
|
|
20818
20805
|
task.logger.error(`[shipinhaoPublishVideo] 发布流程异常 [${currentStep}]: ${errorMsg}`, stringifyError(error), handledError.extra);
|
|
20819
|
-
task.logger.error(`[shipinhaoPublishVideo] 错误码: ${errorCode}, 当前步骤: ${currentStep}`);
|
|
20820
20806
|
await updateTaskState?.({
|
|
20821
20807
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
20822
20808
|
error: errorMsg
|
|
20823
20809
|
});
|
|
20824
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(
|
|
20810
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, errorMsg, "");
|
|
20825
20811
|
}
|
|
20826
20812
|
};
|
|
20827
20813
|
const shipinhaoPublishVideo_rpa_rpaAction = async (task, params)=>{
|
|
@@ -27389,4 +27375,4 @@ var __webpack_exports__version = package_namespaceObject.i8;
|
|
|
27389
27375
|
export { Action, ActionCommonParamsSchema, BaijiahaoPublishParamsSchema, BetaFlag, CollectionDetailSchema, ConfigDataSchema, DouyinCheckVerifyQrCodeParamsSchema, DouyinCreateCommentReplyParamsSchema, DouyinGetCollectionParamsSchema, DouyinGetCommentListParamsSchema, DouyinGetCommentReplyListParamsSchema, DouyinGetHotParamsSchema, DouyinGetLocationParamsSchema, DouyinGetMusicByCategoryParamsSchema, DouyinGetMusicCategoryParamsSchema, DouyinGetMusicParamsSchema, DouyinGetTopicsParamsSchema, DouyinGetVerifyQrCodeParamsSchema, DouyinGetWorkListParamsSchema, DouyinPublishParamsSchema, FetchArticlesDataSchema, FetchArticlesParamsSchema, Http, ProxyAgent, SearchAccountInfoParamsSchema, SessionCheckResultSchema, ShipinhaoCheckLinkValidateParamsSchema, ShipinhaoGetLocationParamsSchema, ShipinhaoGetMsgParamsSchema, ShipinhaoPublishParamsSchema, ShipinhaoPublishVideoParamsSchema, ShipinhaoSendMsgParamsSchema, ToutiaoPublishParamsSchema, UnreadCountSchema, WeixinPublishParamsSchema, WxBjhSessionParamsSchema, XhsWebSearchParamsSchema, XiaohongshuPublishParamsSchema, bjhConfigDataSchema, douyinConfigDataSchema, getFileState, reportLogger, rpaAction_Server_Mock, shipinhaoConfigDataSchema, ttConfigDataSchema, wxConfigDataSchema, xhsConfigDataSchema, __webpack_exports__version as version };
|
|
27390
27376
|
|
|
27391
27377
|
//# sourceMappingURL=index.mjs.map
|
|
27392
|
-
//# debugId=
|
|
27378
|
+
//# debugId=47f14957-3de9-5f22-92f5-89210082b96d
|