@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 CHANGED
@@ -1,4 +1,6 @@
1
1
  /*! For license information please see bundle.js.LICENSE.txt */
2
+
3
+ !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]="aed90b90-6fd5-5e1b-ba81-6ede67b0dc32")}catch(e){}}();
2
4
  var __webpack_modules__ = {
3
5
  "../../node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js": function(__unused_webpack_module, exports1, __webpack_require__) {
4
6
  "use strict";
@@ -12490,7 +12492,9 @@ var __webpack_exports__ = {};
12490
12492
  var package_namespaceObject = {
12491
12493
  i8: "0.1.2"
12492
12494
  };
12493
- var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.4-beta.7"}');
12495
+ var package_namespaceObject_0 = {
12496
+ i8: "4.0.4"
12497
+ };
12494
12498
  const external_node_fs_namespaceObject = require("node:fs");
12495
12499
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
12496
12500
  const external_node_http_namespaceObject = require("node:http");
@@ -38660,8 +38664,8 @@ var __webpack_exports__ = {};
38660
38664
  if (!response || !response.data) return;
38661
38665
  const responseData = response.data;
38662
38666
  if (response && responseData?.status_code && 0 !== responseData.status_code) {
38663
- const errorCode = 4 === responseData.status_code ? 590 : responseData.status_code;
38664
- if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] status_code:4(ticket-guard 伪装拒绝),映射为 590 触发重新签名重试。原始响应: ${JSON.stringify(responseData)}`);
38667
+ const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
38668
+ if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
38665
38669
  return {
38666
38670
  code: errorCode,
38667
38671
  message: responseData.status_msg || "文章发布异常,请稍后重试。",
@@ -38728,141 +38732,132 @@ var __webpack_exports__ = {};
38728
38732
  return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
38729
38733
  }
38730
38734
  const ree_public_key = webProtectData.client_cert.replace("pub.", "");
38731
- const MAX_SIGN_RETRIES = 3;
38732
- const SIGN_RETRY_DELAY = 2000;
38733
- const signAndPublish = async ()=>{
38734
- let bdTicketGuardClientData;
38735
- try {
38736
- bdTicketGuardClientData = getBdV2({
38737
- ticket,
38738
- ts_sign: ts_sign,
38739
- ec_privateKey: ec_privateKey,
38740
- certificate: certificate,
38741
- bd_ticket_guard_ree_public_key: ree_public_key
38742
- });
38743
- if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38744
- task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38745
- throw utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38746
- }
38747
- } catch (error) {
38748
- if (error && "object" == typeof error && "code" in error) throw error;
38749
- task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38750
- throw utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38751
- }
38752
- task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38753
- const publishQuery = {
38754
- ...publishParams,
38755
- a_bogus: ""
38756
- };
38757
- const queryString = new URLSearchParams(publishQuery).toString();
38758
- let aBogus;
38759
- try {
38760
- aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38761
- if (!aBogus || aBogus.length < 10) {
38762
- task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38763
- throw utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38764
- }
38765
- } catch (error) {
38766
- if (error && "object" == typeof error && "code" in error) throw error;
38767
- task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38768
- throw utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38735
+ let bdTicketGuardClientData;
38736
+ try {
38737
+ bdTicketGuardClientData = getBdV2({
38738
+ ticket,
38739
+ ts_sign: ts_sign,
38740
+ ec_privateKey: ec_privateKey,
38741
+ certificate: certificate,
38742
+ bd_ticket_guard_ree_public_key: ree_public_key
38743
+ });
38744
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38745
+ task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38746
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38769
38747
  }
38770
- publishQuery.a_bogus = aBogus;
38771
- const publishQueryParams = new URLSearchParams(publishQuery).toString();
38772
- let csrfToken;
38773
- try {
38774
- csrfToken = mock_generateCsrfTokenAdvanced({
38775
- cookies: params.cookies,
38776
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38777
- method: "POST",
38778
- userAgent
38779
- });
38780
- if (!csrfToken || csrfToken.length < 10) {
38781
- task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38782
- throw utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38783
- }
38784
- task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38785
- } catch (error) {
38786
- if (error && "object" == typeof error && "code" in error) throw error;
38787
- task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38788
- throw utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38748
+ } catch (error) {
38749
+ task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38750
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38751
+ }
38752
+ task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38753
+ const publishQuery = {
38754
+ ...publishParams,
38755
+ a_bogus: ""
38756
+ };
38757
+ const queryString = new URLSearchParams(publishQuery).toString();
38758
+ let aBogus;
38759
+ try {
38760
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38761
+ if (!aBogus || aBogus.length < 10) {
38762
+ task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38763
+ return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38789
38764
  }
38790
- let sessionDtrait;
38791
- try {
38792
- sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38793
- task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38794
- } catch (error) {
38795
- task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38796
- throw utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38765
+ } catch (error) {
38766
+ task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38767
+ return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38768
+ }
38769
+ publishQuery.a_bogus = aBogus;
38770
+ const publishQueryParams = new URLSearchParams(publishQuery).toString();
38771
+ let csrfToken;
38772
+ try {
38773
+ csrfToken = mock_generateCsrfTokenAdvanced({
38774
+ cookies: params.cookies,
38775
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38776
+ method: "POST",
38777
+ userAgent
38778
+ });
38779
+ if (!csrfToken || csrfToken.length < 10) {
38780
+ task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38781
+ return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38797
38782
  }
38798
- const requestHeaders = {
38799
- ...headers,
38800
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38801
- "Content-Type": "application/json",
38802
- Accept: "application/json, text/plain, */*",
38803
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38804
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38805
- "bd-ticket-guard-version": "2",
38806
- "bd-ticket-guard-web-sign-type": "1",
38807
- "bd-ticket-guard-web-version": "2",
38808
- "x-secsdk-csrf-token": csrfToken,
38809
- "x-tt-session-dtrait": sessionDtrait || ""
38810
- };
38811
- task.logger.info(`[douyinPublish] headers: ${JSON.stringify(requestHeaders)}`);
38812
- task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38813
- return proxyHttp.api({
38783
+ task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38784
+ } catch (error) {
38785
+ task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38786
+ return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38787
+ }
38788
+ let sessionDtrait;
38789
+ try {
38790
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38791
+ task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38792
+ } catch (error) {
38793
+ task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38794
+ return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38795
+ }
38796
+ task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
38797
+ ...headers,
38798
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38799
+ "Content-Type": "application/json",
38800
+ Accept: "application/json, text/plain, */*",
38801
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38802
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38803
+ "bd-ticket-guard-version": "2",
38804
+ "bd-ticket-guard-web-sign-type": "1",
38805
+ "bd-ticket-guard-web-version": "2",
38806
+ "x-secsdk-csrf-token": csrfToken,
38807
+ "x-tt-session-dtrait": sessionDtrait || ""
38808
+ })}`);
38809
+ task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38810
+ let publishResult;
38811
+ try {
38812
+ publishResult = await proxyHttp.api({
38814
38813
  method: "post",
38815
38814
  url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
38816
38815
  data: publishData,
38817
38816
  defaultErrorMsg: "发布异常,请稍后重试。",
38818
- headers: requestHeaders
38817
+ headers: {
38818
+ ...headers,
38819
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38820
+ "Content-Type": "application/json",
38821
+ Accept: "application/json, text/plain, */*",
38822
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38823
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38824
+ "bd-ticket-guard-version": "2",
38825
+ "bd-ticket-guard-web-sign-type": "1",
38826
+ "bd-ticket-guard-web-version": "2",
38827
+ "x-secsdk-csrf-token": csrfToken,
38828
+ "x-tt-session-dtrait": sessionDtrait || ""
38829
+ }
38819
38830
  }, {
38820
38831
  timeout: 60000,
38821
- retries: 0
38832
+ retries: 3,
38833
+ retryDelay: 2000
38822
38834
  });
38823
- };
38824
- let publishResult;
38825
- for(let attempt = 0; attempt < MAX_SIGN_RETRIES; attempt++){
38826
- if (attempt > 0) {
38827
- task.logger.warn(`[douyinPublish] 第 ${attempt} 次重新签名后重试(上次为 ticket-guard 拒绝)`);
38828
- await new Promise((resolve)=>setTimeout(resolve, SIGN_RETRY_DELAY));
38829
- }
38830
- try {
38831
- publishResult = await signAndPublish();
38832
- break;
38833
- } catch (error) {
38834
- const handledError = Http.handleApiError(error);
38835
- if (590 === handledError.code) {
38836
- if (attempt < MAX_SIGN_RETRIES - 1) continue;
38837
- task.logger.error(`[douyinPublish] ticket-guard 拒绝重试已用尽(${MAX_SIGN_RETRIES} 次),走兜底`);
38838
- throw error;
38839
- }
38840
- const isProxyOrNetworkError = [
38841
- 599,
38842
- 500,
38843
- 502,
38844
- 503,
38845
- 504
38846
- ].includes(handledError.code);
38847
- if (isProxyOrNetworkError) {
38848
- const isProxyRequest = handledError.extra?.isProxyRequest === true;
38849
- const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38850
- const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38851
- task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38852
- await updateTaskState?.({
38853
- state: types_TaskState.FAILED,
38854
- error: message
38855
- });
38856
- return {
38857
- code: 414,
38858
- data: "",
38859
- message
38860
- };
38861
- }
38862
- throw error;
38835
+ } catch (error) {
38836
+ const handledError = Http.handleApiError(error);
38837
+ const isProxyOrNetworkError = [
38838
+ 599,
38839
+ 500,
38840
+ 502,
38841
+ 503,
38842
+ 504
38843
+ ].includes(handledError.code);
38844
+ if (isProxyOrNetworkError) {
38845
+ const isProxyRequest = handledError.extra?.isProxyRequest === true;
38846
+ const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38847
+ const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38848
+ task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38849
+ await updateTaskState?.({
38850
+ state: types_TaskState.FAILED,
38851
+ error: message
38852
+ });
38853
+ return {
38854
+ code: 414,
38855
+ data: "",
38856
+ message
38857
+ };
38863
38858
  }
38859
+ throw error;
38864
38860
  }
38865
- if (!publishResult) throw utils_response(414, "发布异常,请稍后重试。", "");
38866
38861
  task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
38867
38862
  if (needsVerification(decision)) {
38868
38863
  const details = [
@@ -40542,7 +40537,6 @@ var __webpack_exports__ = {};
40542
40537
  fansNum = toNum(user.follower_count);
40543
40538
  followingNum = toNum(user.following_count);
40544
40539
  favedNum = toNum(user.total_favorited);
40545
- _task.logger.info(`提取用户数据 - 昵称: ${user.nickname}, 粉丝: ${fansNum}, 关注: ${followingNum}, 获赞: ${favedNum}, 作品: ${user.aweme_count}`);
40546
40540
  } else _task.logger.warn(`用户信息接口返回异常: status_code=${userProfile?.status_code}, msg=${userProfile?.status_msg}`);
40547
40541
  const ov = overview?.data;
40548
40542
  const douyinData = {
@@ -40674,7 +40668,6 @@ var __webpack_exports__ = {};
40674
40668
  playNumYesterday = Number.parseInt(data.browse?.[1] || "0", 10) || 0;
40675
40669
  likeNumYesterday = Number.parseInt(data.like?.[1] || "0", 10) || 0;
40676
40670
  commentNumYesterday = Number.parseInt(data.comment?.[1] || "0", 10) || 0;
40677
- _task.logger.info(`视频号昨日数据提取成功 - 净增关注:${fansNumYesterday}, 播放:${playNumYesterday}, 喜欢:${likeNumYesterday}, 评论:${commentNumYesterday}`);
40678
40671
  }
40679
40672
  } catch (error) {
40680
40673
  const errMsg = error instanceof Error ? error.message : String(error);
@@ -41313,7 +41306,6 @@ var __webpack_exports__ = {};
41313
41306
  allPosts.push(...posts);
41314
41307
  continueFlag = response.data?.continueFlag ?? false;
41315
41308
  rawKeyBuff = response.data?.lastBuff || "";
41316
- _task.logger.info(`获取${11 === userpageType ? "视频" : "图文"}第${currentPage}页,本页${posts.length}条,累计${allPosts.length}条,continueFlag=${continueFlag}`);
41317
41309
  currentPage++;
41318
41310
  if (currentPage > 100) {
41319
41311
  _task.logger.warn("分页超过100页,停止请求");
@@ -41368,7 +41360,6 @@ var __webpack_exports__ = {};
41368
41360
  if (needVideo) try {
41369
41361
  const videoPageUrl = "https://channels.weixin.qq.com/micro/content/post/list";
41370
41362
  const { posts, totalCount } = await fetchAllPosts(11, videoPageUrl);
41371
- _task.logger.info(`视频号视频获取响应:共${posts.length}条,totalCount=${totalCount}`);
41372
41363
  const videoArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "video"));
41373
41364
  allArticles.push(...videoArticles);
41374
41365
  combinedTotal += totalCount || videoArticles.length;
@@ -41380,7 +41371,6 @@ var __webpack_exports__ = {};
41380
41371
  if (needArticle) try {
41381
41372
  const articlePageUrl = "https://channels.weixin.qq.com/micro/content/post/finderNewLifePostList";
41382
41373
  const { posts, totalCount } = await fetchAllPosts(10, articlePageUrl);
41383
- _task.logger.info(`视频号图文获取响应:共${posts.length}条,totalCount=${totalCount}`);
41384
41374
  const articleArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "article"));
41385
41375
  allArticles.push(...articleArticles);
41386
41376
  combinedTotal += totalCount || articleArticles.length;
@@ -41393,7 +41383,6 @@ var __webpack_exports__ = {};
41393
41383
  const total = allArticles.length;
41394
41384
  const start = (pageNum - 1) * pageSize;
41395
41385
  const pageItems = allArticles.slice(start, start + pageSize);
41396
- _task.logger.info(`视频号数据获取成功,合计${total}条,第${pageNum}页返回${pageItems.length}条`);
41397
41386
  return success({
41398
41387
  articleCell: pageItems,
41399
41388
  pagination: {
@@ -50757,4 +50746,5 @@ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_targe
50757
50746
  value: true
50758
50747
  });
50759
50748
 
50760
- //# sourceMappingURL=bundle.js.map
50749
+ //# sourceMappingURL=bundle.js.map
50750
+ //# debugId=aed90b90-6fd5-5e1b-ba81-6ede67b0dc32