@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/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 = JSON.parse('{"i8":"4.0.4-beta.7"}');
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 ? 590 : responseData.status_code;
13593
- if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] status_code:4(ticket-guard 伪装拒绝),映射为 590 触发重新签名重试。原始响应: ${JSON.stringify(responseData)}`);
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
- const MAX_SIGN_RETRIES = 3;
13661
- const SIGN_RETRY_DELAY = 2000;
13662
- const signAndPublish = async ()=>{
13663
- let bdTicketGuardClientData;
13664
- try {
13665
- bdTicketGuardClientData = getBdV2({
13666
- ticket,
13667
- ts_sign: ts_sign,
13668
- ec_privateKey: ec_privateKey,
13669
- certificate: certificate,
13670
- bd_ticket_guard_ree_public_key: ree_public_key
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
- publishQuery.a_bogus = aBogus;
13700
- const publishQueryParams = new URLSearchParams(publishQuery).toString();
13701
- let csrfToken;
13702
- try {
13703
- csrfToken = mock_generateCsrfTokenAdvanced({
13704
- cookies: params.cookies,
13705
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
13706
- method: "POST",
13707
- userAgent
13708
- });
13709
- if (!csrfToken || csrfToken.length < 10) {
13710
- task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
13711
- throw (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
13712
- }
13713
- task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
13714
- } catch (error) {
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
- let sessionDtrait;
13720
- try {
13721
- sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
13722
- task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
13723
- } catch (error) {
13724
- task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
13725
- throw (0, share_namespaceObject.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
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
- const requestHeaders = {
13728
- ...headers,
13729
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13730
- "Content-Type": "application/json",
13731
- Accept: "application/json, text/plain, */*",
13732
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
13733
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
13734
- "bd-ticket-guard-version": "2",
13735
- "bd-ticket-guard-web-sign-type": "1",
13736
- "bd-ticket-guard-web-version": "2",
13737
- "x-secsdk-csrf-token": csrfToken,
13738
- "x-tt-session-dtrait": sessionDtrait || ""
13739
- };
13740
- task.logger.info(`[douyinPublish] headers: ${JSON.stringify(requestHeaders)}`);
13741
- task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
13742
- return proxyHttp.api({
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: requestHeaders
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: 0
13761
+ retries: 3,
13762
+ retryDelay: 2000
13751
13763
  });
13752
- };
13753
- let publishResult;
13754
- for(let attempt = 0; attempt < MAX_SIGN_RETRIES; attempt++){
13755
- if (attempt > 0) {
13756
- task.logger.warn(`[douyinPublish] 第 ${attempt} 次重新签名后重试(上次为 ticket-guard 拒绝)`);
13757
- await new Promise((resolve)=>setTimeout(resolve, SIGN_RETRY_DELAY));
13758
- }
13759
- try {
13760
- publishResult = await signAndPublish();
13761
- break;
13762
- } catch (error) {
13763
- const handledError = Http.handleApiError(error);
13764
- if (590 === handledError.code) {
13765
- if (attempt < MAX_SIGN_RETRIES - 1) continue;
13766
- task.logger.error(`[douyinPublish] ticket-guard 拒绝重试已用尽(${MAX_SIGN_RETRIES} 次),走兜底`);
13767
- throw error;
13768
- }
13769
- const isProxyOrNetworkError = [
13770
- 599,
13771
- 500,
13772
- 502,
13773
- 503,
13774
- 504
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