@iflyrpa/actions 4.0.4-beta.7 → 4.0.4
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/bundle.js +123 -133
- package/dist/bundle.js.map +1 -1
- package/dist/index.js +123 -133
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +123 -133
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
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]="e1cb75dd-cee5-50ef-9ae8-80ab2cccd402")}catch(e){}}();
|
|
1
3
|
var __webpack_modules__ = {
|
|
2
4
|
"./src/utils/XhsXsCommonEnc.js": function(module) {
|
|
3
5
|
var encrypt_lookup = [
|
|
@@ -4400,7 +4402,9 @@ var __webpack_exports__ = {};
|
|
|
4400
4402
|
});
|
|
4401
4403
|
const package_json_namespaceObject = require("@iflyrpa/share/package.json");
|
|
4402
4404
|
var package_json_default = /*#__PURE__*/ __webpack_require__.n(package_json_namespaceObject);
|
|
4403
|
-
var package_namespaceObject =
|
|
4405
|
+
var package_namespaceObject = {
|
|
4406
|
+
i8: "4.0.4"
|
|
4407
|
+
};
|
|
4404
4408
|
const share_namespaceObject = require("@iflyrpa/share");
|
|
4405
4409
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
4406
4410
|
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
@@ -13589,8 +13593,8 @@ var __webpack_exports__ = {};
|
|
|
13589
13593
|
if (!response || !response.data) return;
|
|
13590
13594
|
const responseData = response.data;
|
|
13591
13595
|
if (response && responseData?.status_code && 0 !== responseData.status_code) {
|
|
13592
|
-
const errorCode = 4 === responseData.status_code ?
|
|
13593
|
-
if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] status_code:4
|
|
13596
|
+
const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
|
|
13597
|
+
if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
|
|
13594
13598
|
return {
|
|
13595
13599
|
code: errorCode,
|
|
13596
13600
|
message: responseData.status_msg || "文章发布异常,请稍后重试。",
|
|
@@ -13657,141 +13661,132 @@ var __webpack_exports__ = {};
|
|
|
13657
13661
|
return (0, share_namespaceObject.response)(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
|
|
13658
13662
|
}
|
|
13659
13663
|
const ree_public_key = webProtectData.client_cert.replace("pub.", "");
|
|
13660
|
-
|
|
13661
|
-
|
|
13662
|
-
|
|
13663
|
-
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
|
|
13669
|
-
|
|
13670
|
-
|
|
13671
|
-
|
|
13672
|
-
if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
|
|
13673
|
-
task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
|
|
13674
|
-
throw (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
|
|
13675
|
-
}
|
|
13676
|
-
} catch (error) {
|
|
13677
|
-
if (error && "object" == typeof error && "code" in error) throw error;
|
|
13678
|
-
task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
|
|
13679
|
-
throw (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
|
|
13680
|
-
}
|
|
13681
|
-
task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
|
|
13682
|
-
const publishQuery = {
|
|
13683
|
-
...publishParams,
|
|
13684
|
-
a_bogus: ""
|
|
13685
|
-
};
|
|
13686
|
-
const queryString = new URLSearchParams(publishQuery).toString();
|
|
13687
|
-
let aBogus;
|
|
13688
|
-
try {
|
|
13689
|
-
aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
|
|
13690
|
-
if (!aBogus || aBogus.length < 10) {
|
|
13691
|
-
task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
|
|
13692
|
-
throw (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
|
|
13693
|
-
}
|
|
13694
|
-
} catch (error) {
|
|
13695
|
-
if (error && "object" == typeof error && "code" in error) throw error;
|
|
13696
|
-
task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
|
|
13697
|
-
throw (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
|
|
13664
|
+
let bdTicketGuardClientData;
|
|
13665
|
+
try {
|
|
13666
|
+
bdTicketGuardClientData = getBdV2({
|
|
13667
|
+
ticket,
|
|
13668
|
+
ts_sign: ts_sign,
|
|
13669
|
+
ec_privateKey: ec_privateKey,
|
|
13670
|
+
certificate: certificate,
|
|
13671
|
+
bd_ticket_guard_ree_public_key: ree_public_key
|
|
13672
|
+
});
|
|
13673
|
+
if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
|
|
13674
|
+
task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
|
|
13675
|
+
return (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
|
|
13698
13676
|
}
|
|
13699
|
-
|
|
13700
|
-
|
|
13701
|
-
|
|
13702
|
-
|
|
13703
|
-
|
|
13704
|
-
|
|
13705
|
-
|
|
13706
|
-
|
|
13707
|
-
|
|
13708
|
-
|
|
13709
|
-
|
|
13710
|
-
|
|
13711
|
-
|
|
13712
|
-
|
|
13713
|
-
task.logger.
|
|
13714
|
-
|
|
13715
|
-
if (error && "object" == typeof error && "code" in error) throw error;
|
|
13716
|
-
task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
|
|
13717
|
-
throw (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
|
|
13677
|
+
} catch (error) {
|
|
13678
|
+
task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
|
|
13679
|
+
return (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
|
|
13680
|
+
}
|
|
13681
|
+
task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
|
|
13682
|
+
const publishQuery = {
|
|
13683
|
+
...publishParams,
|
|
13684
|
+
a_bogus: ""
|
|
13685
|
+
};
|
|
13686
|
+
const queryString = new URLSearchParams(publishQuery).toString();
|
|
13687
|
+
let aBogus;
|
|
13688
|
+
try {
|
|
13689
|
+
aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
|
|
13690
|
+
if (!aBogus || aBogus.length < 10) {
|
|
13691
|
+
task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
|
|
13692
|
+
return (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
|
|
13718
13693
|
}
|
|
13719
|
-
|
|
13720
|
-
|
|
13721
|
-
|
|
13722
|
-
|
|
13723
|
-
|
|
13724
|
-
|
|
13725
|
-
|
|
13694
|
+
} catch (error) {
|
|
13695
|
+
task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
|
|
13696
|
+
return (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
|
|
13697
|
+
}
|
|
13698
|
+
publishQuery.a_bogus = aBogus;
|
|
13699
|
+
const publishQueryParams = new URLSearchParams(publishQuery).toString();
|
|
13700
|
+
let csrfToken;
|
|
13701
|
+
try {
|
|
13702
|
+
csrfToken = mock_generateCsrfTokenAdvanced({
|
|
13703
|
+
cookies: params.cookies,
|
|
13704
|
+
url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
|
|
13705
|
+
method: "POST",
|
|
13706
|
+
userAgent
|
|
13707
|
+
});
|
|
13708
|
+
if (!csrfToken || csrfToken.length < 10) {
|
|
13709
|
+
task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
|
|
13710
|
+
return (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
|
|
13726
13711
|
}
|
|
13727
|
-
|
|
13728
|
-
|
|
13729
|
-
|
|
13730
|
-
|
|
13731
|
-
|
|
13732
|
-
|
|
13733
|
-
|
|
13734
|
-
|
|
13735
|
-
|
|
13736
|
-
|
|
13737
|
-
|
|
13738
|
-
|
|
13739
|
-
|
|
13740
|
-
|
|
13741
|
-
|
|
13742
|
-
|
|
13712
|
+
task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
|
|
13713
|
+
} catch (error) {
|
|
13714
|
+
task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
|
|
13715
|
+
return (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
|
|
13716
|
+
}
|
|
13717
|
+
let sessionDtrait;
|
|
13718
|
+
try {
|
|
13719
|
+
sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
|
|
13720
|
+
task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
|
|
13721
|
+
} catch (error) {
|
|
13722
|
+
task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
|
|
13723
|
+
return (0, share_namespaceObject.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
|
|
13724
|
+
}
|
|
13725
|
+
task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
|
|
13726
|
+
...headers,
|
|
13727
|
+
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13728
|
+
"Content-Type": "application/json",
|
|
13729
|
+
Accept: "application/json, text/plain, */*",
|
|
13730
|
+
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13731
|
+
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13732
|
+
"bd-ticket-guard-version": "2",
|
|
13733
|
+
"bd-ticket-guard-web-sign-type": "1",
|
|
13734
|
+
"bd-ticket-guard-web-version": "2",
|
|
13735
|
+
"x-secsdk-csrf-token": csrfToken,
|
|
13736
|
+
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13737
|
+
})}`);
|
|
13738
|
+
task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
|
|
13739
|
+
let publishResult;
|
|
13740
|
+
try {
|
|
13741
|
+
publishResult = await proxyHttp.api({
|
|
13743
13742
|
method: "post",
|
|
13744
13743
|
url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
|
|
13745
13744
|
data: publishData,
|
|
13746
13745
|
defaultErrorMsg: "发布异常,请稍后重试。",
|
|
13747
|
-
headers:
|
|
13746
|
+
headers: {
|
|
13747
|
+
...headers,
|
|
13748
|
+
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13749
|
+
"Content-Type": "application/json",
|
|
13750
|
+
Accept: "application/json, text/plain, */*",
|
|
13751
|
+
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13752
|
+
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13753
|
+
"bd-ticket-guard-version": "2",
|
|
13754
|
+
"bd-ticket-guard-web-sign-type": "1",
|
|
13755
|
+
"bd-ticket-guard-web-version": "2",
|
|
13756
|
+
"x-secsdk-csrf-token": csrfToken,
|
|
13757
|
+
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13758
|
+
}
|
|
13748
13759
|
}, {
|
|
13749
13760
|
timeout: 60000,
|
|
13750
|
-
retries:
|
|
13761
|
+
retries: 3,
|
|
13762
|
+
retryDelay: 2000
|
|
13751
13763
|
});
|
|
13752
|
-
}
|
|
13753
|
-
|
|
13754
|
-
|
|
13755
|
-
|
|
13756
|
-
|
|
13757
|
-
|
|
13758
|
-
|
|
13759
|
-
|
|
13760
|
-
|
|
13761
|
-
|
|
13762
|
-
|
|
13763
|
-
const
|
|
13764
|
-
|
|
13765
|
-
|
|
13766
|
-
|
|
13767
|
-
|
|
13768
|
-
|
|
13769
|
-
|
|
13770
|
-
|
|
13771
|
-
|
|
13772
|
-
|
|
13773
|
-
|
|
13774
|
-
|
|
13775
|
-
].includes(handledError.code);
|
|
13776
|
-
if (isProxyOrNetworkError) {
|
|
13777
|
-
const isProxyRequest = handledError.extra?.isProxyRequest === true;
|
|
13778
|
-
const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
|
|
13779
|
-
const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13780
|
-
task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
|
|
13781
|
-
await updateTaskState?.({
|
|
13782
|
-
state: share_namespaceObject.TaskState.FAILED,
|
|
13783
|
-
error: message
|
|
13784
|
-
});
|
|
13785
|
-
return {
|
|
13786
|
-
code: 414,
|
|
13787
|
-
data: "",
|
|
13788
|
-
message
|
|
13789
|
-
};
|
|
13790
|
-
}
|
|
13791
|
-
throw error;
|
|
13764
|
+
} catch (error) {
|
|
13765
|
+
const handledError = Http.handleApiError(error);
|
|
13766
|
+
const isProxyOrNetworkError = [
|
|
13767
|
+
599,
|
|
13768
|
+
500,
|
|
13769
|
+
502,
|
|
13770
|
+
503,
|
|
13771
|
+
504
|
|
13772
|
+
].includes(handledError.code);
|
|
13773
|
+
if (isProxyOrNetworkError) {
|
|
13774
|
+
const isProxyRequest = handledError.extra?.isProxyRequest === true;
|
|
13775
|
+
const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
|
|
13776
|
+
const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13777
|
+
task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
|
|
13778
|
+
await updateTaskState?.({
|
|
13779
|
+
state: share_namespaceObject.TaskState.FAILED,
|
|
13780
|
+
error: message
|
|
13781
|
+
});
|
|
13782
|
+
return {
|
|
13783
|
+
code: 414,
|
|
13784
|
+
data: "",
|
|
13785
|
+
message
|
|
13786
|
+
};
|
|
13792
13787
|
}
|
|
13788
|
+
throw error;
|
|
13793
13789
|
}
|
|
13794
|
-
if (!publishResult) throw (0, share_namespaceObject.response)(414, "发布异常,请稍后重试。", "");
|
|
13795
13790
|
task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
|
|
13796
13791
|
if (needsVerification(decision)) {
|
|
13797
13792
|
const details = [
|
|
@@ -15471,7 +15466,6 @@ var __webpack_exports__ = {};
|
|
|
15471
15466
|
fansNum = toNum(user.follower_count);
|
|
15472
15467
|
followingNum = toNum(user.following_count);
|
|
15473
15468
|
favedNum = toNum(user.total_favorited);
|
|
15474
|
-
_task.logger.info(`提取用户数据 - 昵称: ${user.nickname}, 粉丝: ${fansNum}, 关注: ${followingNum}, 获赞: ${favedNum}, 作品: ${user.aweme_count}`);
|
|
15475
15469
|
} else _task.logger.warn(`用户信息接口返回异常: status_code=${userProfile?.status_code}, msg=${userProfile?.status_msg}`);
|
|
15476
15470
|
const ov = overview?.data;
|
|
15477
15471
|
const douyinData = {
|
|
@@ -15603,7 +15597,6 @@ var __webpack_exports__ = {};
|
|
|
15603
15597
|
playNumYesterday = Number.parseInt(data.browse?.[1] || "0", 10) || 0;
|
|
15604
15598
|
likeNumYesterday = Number.parseInt(data.like?.[1] || "0", 10) || 0;
|
|
15605
15599
|
commentNumYesterday = Number.parseInt(data.comment?.[1] || "0", 10) || 0;
|
|
15606
|
-
_task.logger.info(`视频号昨日数据提取成功 - 净增关注:${fansNumYesterday}, 播放:${playNumYesterday}, 喜欢:${likeNumYesterday}, 评论:${commentNumYesterday}`);
|
|
15607
15600
|
}
|
|
15608
15601
|
} catch (error) {
|
|
15609
15602
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
@@ -16242,7 +16235,6 @@ var __webpack_exports__ = {};
|
|
|
16242
16235
|
allPosts.push(...posts);
|
|
16243
16236
|
continueFlag = response.data?.continueFlag ?? false;
|
|
16244
16237
|
rawKeyBuff = response.data?.lastBuff || "";
|
|
16245
|
-
_task.logger.info(`获取${11 === userpageType ? "视频" : "图文"}第${currentPage}页,本页${posts.length}条,累计${allPosts.length}条,continueFlag=${continueFlag}`);
|
|
16246
16238
|
currentPage++;
|
|
16247
16239
|
if (currentPage > 100) {
|
|
16248
16240
|
_task.logger.warn("分页超过100页,停止请求");
|
|
@@ -16297,7 +16289,6 @@ var __webpack_exports__ = {};
|
|
|
16297
16289
|
if (needVideo) try {
|
|
16298
16290
|
const videoPageUrl = "https://channels.weixin.qq.com/micro/content/post/list";
|
|
16299
16291
|
const { posts, totalCount } = await fetchAllPosts(11, videoPageUrl);
|
|
16300
|
-
_task.logger.info(`视频号视频获取响应:共${posts.length}条,totalCount=${totalCount}`);
|
|
16301
16292
|
const videoArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "video"));
|
|
16302
16293
|
allArticles.push(...videoArticles);
|
|
16303
16294
|
combinedTotal += totalCount || videoArticles.length;
|
|
@@ -16309,7 +16300,6 @@ var __webpack_exports__ = {};
|
|
|
16309
16300
|
if (needArticle) try {
|
|
16310
16301
|
const articlePageUrl = "https://channels.weixin.qq.com/micro/content/post/finderNewLifePostList";
|
|
16311
16302
|
const { posts, totalCount } = await fetchAllPosts(10, articlePageUrl);
|
|
16312
|
-
_task.logger.info(`视频号图文获取响应:共${posts.length}条,totalCount=${totalCount}`);
|
|
16313
16303
|
const articleArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "article"));
|
|
16314
16304
|
allArticles.push(...articleArticles);
|
|
16315
16305
|
combinedTotal += totalCount || articleArticles.length;
|
|
@@ -16322,7 +16312,6 @@ var __webpack_exports__ = {};
|
|
|
16322
16312
|
const total = allArticles.length;
|
|
16323
16313
|
const start = (pageNum - 1) * pageSize;
|
|
16324
16314
|
const pageItems = allArticles.slice(start, start + pageSize);
|
|
16325
|
-
_task.logger.info(`视频号数据获取成功,合计${total}条,第${pageNum}页返回${pageItems.length}条`);
|
|
16326
16315
|
return (0, share_namespaceObject.success)({
|
|
16327
16316
|
articleCell: pageItems,
|
|
16328
16317
|
pagination: {
|
|
@@ -25686,4 +25675,5 @@ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_targe
|
|
|
25686
25675
|
value: true
|
|
25687
25676
|
});
|
|
25688
25677
|
|
|
25689
|
-
//# sourceMappingURL=index.js.map
|
|
25678
|
+
//# sourceMappingURL=index.js.map
|
|
25679
|
+
//# debugId=e1cb75dd-cee5-50ef-9ae8-80ab2cccd402
|