@iflyrpa/actions 4.0.0-beta.2 → 4.0.0-beta.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
@@ -8736,7 +8736,7 @@ var __webpack_exports__ = {};
8736
8736
  var package_namespaceObject = {
8737
8737
  i8: "0.1.0"
8738
8738
  };
8739
- var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.0-beta.1"}');
8739
+ var package_namespaceObject_0 = JSON.parse('{"i8":"3.0.7-beta.3"}');
8740
8740
  const external_node_fs_namespaceObject = require("node:fs");
8741
8741
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
8742
8742
  const external_node_http_namespaceObject = require("node:http");
@@ -23353,6 +23353,13 @@ var __webpack_exports__ = {};
23353
23353
  }
23354
23354
  };
23355
23355
  if (foundError) Object.assign(errorResponse, foundError);
23356
+ if (error.response?.status === 403) {
23357
+ this.logger?.warn(`[403 详细信息] URL: ${error.config?.url}`);
23358
+ this.logger?.warn(`[403 响应头] ${JSON.stringify(error.response?.headers || {})}`);
23359
+ this.logger?.warn(`[403 响应体] ${JSON.stringify(error.response?.data || null)}`);
23360
+ const verifyDecision = error.response?.headers?.["x-tt-verify-passport-decision"];
23361
+ if (verifyDecision) this.logger?.warn(`[403 验证决策] x-tt-verify-passport-decision: ${verifyDecision}`);
23362
+ }
23356
23363
  if (error.response?.data) {
23357
23364
  if ("object" == typeof error.response.data) {
23358
23365
  const serverError = error.response.data;
@@ -34692,21 +34699,13 @@ var __webpack_exports__ = {};
34692
34699
  console.log("拦截器收到响应:", JSON.stringify(response.data));
34693
34700
  task.logger.info(`拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
34694
34701
  task.logger.info(`拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
34695
- task.logger.info(`拦截器收到响应response.data类型: ${typeof response.data}, 值: ${JSON.stringify(response.data)}`);
34696
34702
  decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
34697
- task.logger.info(`解析后的decision: ${JSON.stringify(decision)}`);
34698
34703
  if (needsVerification(decision)) {
34699
- task.logger.info(`检测到需要验证,decision.account_flow: ${decision?.account_flow}`);
34700
- task.logger.info("拦截器即将return,不抛错");
34701
- return;
34702
- }
34703
- task.logger.info("不需要验证,继续检查response.data");
34704
- if (!response || !response.data) {
34705
- task.logger.info("response或response.data为空,拦截器return");
34704
+ task.logger.info(`需要验证: ${JSON.stringify(decision)}`);
34706
34705
  return;
34707
34706
  }
34707
+ if (!response || !response.data) return;
34708
34708
  const responseData = response.data;
34709
- task.logger.info(`responseData.status_code: ${responseData?.status_code}`);
34710
34709
  if (response && responseData?.status_code && 0 !== responseData.status_code) {
34711
34710
  const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
34712
34711
  if (4 === responseData.status_code) task.logger.warn(`抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
@@ -34803,9 +34802,30 @@ var __webpack_exports__ = {};
34803
34802
  retryDelay: 2000
34804
34803
  });
34805
34804
  task.logger.info("========== api调用完成 ==========");
34806
- task.logger.info(`publishResult类型: ${typeof publishResult}, 值: ${JSON.stringify(publishResult)}`);
34807
- task.logger.info(`decision值: ${JSON.stringify(decision)}`);
34808
- task.logger.info(`needsVerification(decision): ${needsVerification(decision)}`);
34805
+ task.logger.info(`decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
34806
+ if (needsVerification(decision)) {
34807
+ const details = [
34808
+ publishResult.status_msg,
34809
+ decision?.verify_title,
34810
+ decision?.verify_desc
34811
+ ].filter(Boolean).join(" ");
34812
+ const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
34813
+ task.logger.warn(`TaskId:${task.taskId},检测到需要验证,准备返回验证信息`);
34814
+ const mockData = {
34815
+ state: types_TaskState.FAILED,
34816
+ error: message,
34817
+ result: {
34818
+ data: decision,
34819
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
34820
+ }
34821
+ };
34822
+ await updateTaskState?.(mockData);
34823
+ return {
34824
+ code: 0,
34825
+ data: mockData,
34826
+ message: "操作成功"
34827
+ };
34828
+ }
34809
34829
  task.logger.info("不需要验证,继续正常流程");
34810
34830
  reportLogger({
34811
34831
  token: params.huiwenToken || "",
@@ -35502,15 +35522,41 @@ var __webpack_exports__ = {};
35502
35522
  }
35503
35523
  task.logger?.info("准备发布...");
35504
35524
  await page.waitForTimeout(1000);
35505
- const response = await new Promise((resolve, reject)=>{
35525
+ const result = await new Promise((resolve, reject)=>{
35506
35526
  const handleResponse = async (res)=>{
35507
35527
  if (res.url().includes("/web/api/media/aweme/create_v2")) {
35508
35528
  task.logger?.info("匹配到发布接口响应");
35529
+ let decision = null;
35530
+ try {
35531
+ const headers = await res.allHeaders();
35532
+ decision = parseVerifyPassportDecision(headers["x-tt-verify-passport-decision"]);
35533
+ } catch (error) {
35534
+ task.logger?.warn(`解析验证决策头失败: ${error}`);
35535
+ }
35509
35536
  const jsonResponse = await res.json();
35510
35537
  task.logger?.info(`发布接口响应数据: ${JSON.stringify(jsonResponse)}`);
35511
35538
  page.off("response", handleResponse);
35512
- if (jsonResponse?.status_code === 0) resolve(jsonResponse?.data?.item_id || jsonResponse?.item_id || "");
35513
- else reject(new Error(jsonResponse?.status_msg || "发布失败"));
35539
+ if (needsVerification(decision)) {
35540
+ task.logger?.warn("检测到需要二次验证,文章未真正发布");
35541
+ resolve({
35542
+ itemId: "",
35543
+ decision
35544
+ });
35545
+ return;
35546
+ }
35547
+ if (jsonResponse?.status_code !== 0) {
35548
+ reject(new Error(jsonResponse?.status_msg || "发布失败"));
35549
+ return;
35550
+ }
35551
+ const itemId = jsonResponse?.data?.item_id || jsonResponse?.item_id || "";
35552
+ if (!itemId) {
35553
+ reject(new Error(jsonResponse?.status_msg || "发布异常:未返回作品ID,文章可能未真正发布"));
35554
+ return;
35555
+ }
35556
+ resolve({
35557
+ itemId,
35558
+ decision: null
35559
+ });
35514
35560
  }
35515
35561
  };
35516
35562
  page.on("response", handleResponse);
@@ -35532,20 +35578,42 @@ var __webpack_exports__ = {};
35532
35578
  await page.close();
35533
35579
  return null;
35534
35580
  });
35535
- if (!response && "" !== response) return {
35581
+ if (!result) return {
35536
35582
  code: 414,
35537
35583
  message: "发布失败",
35538
35584
  data: ""
35539
35585
  };
35540
- task.logger?.info(`✓ 发布成功,item_id: ${response}`);
35586
+ if (needsVerification(result.decision)) {
35587
+ const decision = result.decision;
35588
+ const details = [
35589
+ decision?.verify_title,
35590
+ decision?.verify_desc
35591
+ ].filter(Boolean).join(" ");
35592
+ const message = `发布失败,需要二次验证${details ? `:${details}` : ""}`;
35593
+ task.logger?.warn(message);
35594
+ await updateTaskState?.({
35595
+ state: types_TaskState.FAILED,
35596
+ error: message,
35597
+ result: {
35598
+ data: decision
35599
+ }
35600
+ });
35601
+ await page.close();
35602
+ return {
35603
+ code: 414,
35604
+ message,
35605
+ data: ""
35606
+ };
35607
+ }
35608
+ task.logger?.info(`✓ 发布成功,item_id: ${result.itemId}`);
35541
35609
  await updateTaskState?.({
35542
35610
  state: types_TaskState.SUCCESS,
35543
35611
  result: {
35544
- response
35612
+ response: result.itemId
35545
35613
  }
35546
35614
  });
35547
35615
  await page.close();
35548
- return success(response);
35616
+ return success(result.itemId);
35549
35617
  };
35550
35618
  const DouyinPublishParamsSchema = ActionCommonParamsSchema.extend({
35551
35619
  title: classic_schemas_string(),
@@ -36325,26 +36393,26 @@ var __webpack_exports__ = {};
36325
36393
  const http = new Http({
36326
36394
  headers: {
36327
36395
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
36328
- referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
36396
+ referer: "https://mp.toutiao.com/profile_v4/graphic/publish",
36397
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
36398
+ }
36399
+ });
36400
+ const totalData = await http.api({
36401
+ method: "get",
36402
+ url: "https://mp.toutiao.com/mp/fe_api/home/merge_v2",
36403
+ params: {
36404
+ app_id: 1231
36405
+ }
36406
+ });
36407
+ await new Promise((r)=>setTimeout(r, 1000));
36408
+ const contentDataYesterday = await http.api({
36409
+ method: "get",
36410
+ url: "https://mp.toutiao.com/mp/agw/statistic/v2/content_stat",
36411
+ params: {
36412
+ type: 0,
36413
+ app_id: 1231
36329
36414
  }
36330
36415
  });
36331
- const [totalData, contentDataYesterday] = await Promise.all([
36332
- http.api({
36333
- method: "get",
36334
- url: "https://mp.toutiao.com/mp/fe_api/home/merge_v2",
36335
- params: {
36336
- app_id: 1231
36337
- }
36338
- }),
36339
- http.api({
36340
- method: "get",
36341
- url: "https://mp.toutiao.com/mp/agw/statistic/v2/content_stat",
36342
- params: {
36343
- type: 0,
36344
- app_id: 1231
36345
- }
36346
- })
36347
- ]);
36348
36416
  const isSuccess = !!(totalData?.data?.statistic && contentDataYesterday?.author_stat);
36349
36417
  if (!isSuccess || !totalData?.data || !contentDataYesterday?.author_stat) return types_errorResponse(totalData?.message || contentDataYesterday?.message || "头条号数据获取失败,请检查Cookie是否有效", 414);
36350
36418
  const ttData = {
@@ -40521,8 +40589,10 @@ var __webpack_exports__ = {};
40521
40589
  tuwen_wtt_trans_flag: params.settingInfo?.toutiaoTransWtt ? "2" : "0",
40522
40590
  info_source: sourceData,
40523
40591
  ...location ? {
40524
- city: location.label,
40525
- city_code: location.value
40592
+ manual_selected_city: JSON.stringify({
40593
+ city: location.label,
40594
+ city_code: location.value
40595
+ })
40526
40596
  } : null,
40527
40597
  ...params.settingInfo?.toutiaoCollectionId ? {
40528
40598
  want_join_collection_id: params.settingInfo.toutiaoCollectionId
@@ -40572,6 +40642,12 @@ var __webpack_exports__ = {};
40572
40642
  claim_exclusive: toutiaoExclusive ? toutiaoExclusive : toutiaoOriginal?.includes("exclusive") ? 1 : 0
40573
40643
  };
40574
40644
  task._timerRecord.PrePublish = Date.now();
40645
+ task.logger.info(`[toutiaoPublish] ${"draft" === params.saveType ? "同步草稿" : "发布文章"}参数`, {
40646
+ saveType: params.saveType,
40647
+ title: params.title,
40648
+ extra: extraData,
40649
+ publishData
40650
+ });
40575
40651
  const msToken = params.cookies.find((it)=>"msToken" === it.name)?.value;
40576
40652
  let publishOption = {};
40577
40653
  if (msToken) {
@@ -41767,8 +41843,8 @@ var __webpack_exports__ = {};
41767
41843
  headers
41768
41844
  });
41769
41845
  const proxyHttp = new Http(...args);
41770
- proxyHttp.addResponseInterceptor((response)=>{
41771
- const responseData = response.data;
41846
+ const baseRespFinder = (response)=>{
41847
+ const responseData = response?.data;
41772
41848
  const msgType = "draft" === params.saveType ? "同步" : "发布";
41773
41849
  if (response && responseData?.base_resp && 0 !== responseData.base_resp.ret && !ignoreErrno.includes(responseData.base_resp.ret)) {
41774
41850
  const errmsg = weixinPublish_mock_errnoMap[responseData.base_resp.ret] || response.config.defaultErrorMsg || responseData.base_resp.err_msg || `文章${msgType}异常,请稍后重试。`;
@@ -41778,7 +41854,9 @@ var __webpack_exports__ = {};
41778
41854
  data: responseData
41779
41855
  };
41780
41856
  }
41781
- });
41857
+ };
41858
+ http.addResponseInterceptor(baseRespFinder);
41859
+ proxyHttp.addResponseInterceptor(baseRespFinder);
41782
41860
  await http.api({
41783
41861
  method: "get",
41784
41862
  url: "https://mp.weixin.qq.com/cgi-bin/appmsgpublish",