@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/index.js CHANGED
@@ -5489,7 +5489,7 @@ var __webpack_exports__ = {};
5489
5489
  });
5490
5490
  const package_json_namespaceObject = require("@iflyrpa/share/package.json");
5491
5491
  var package_json_default = /*#__PURE__*/ __webpack_require__.n(package_json_namespaceObject);
5492
- var package_namespaceObject = JSON.parse('{"i8":"4.0.0-beta.1"}');
5492
+ var package_namespaceObject = JSON.parse('{"i8":"3.0.7-beta.3"}');
5493
5493
  const share_namespaceObject = require("@iflyrpa/share");
5494
5494
  const external_node_fs_namespaceObject = require("node:fs");
5495
5495
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
@@ -5594,6 +5594,13 @@ var __webpack_exports__ = {};
5594
5594
  }
5595
5595
  };
5596
5596
  if (foundError) Object.assign(errorResponse, foundError);
5597
+ if (error.response?.status === 403) {
5598
+ this.logger?.warn(`[403 详细信息] URL: ${error.config?.url}`);
5599
+ this.logger?.warn(`[403 响应头] ${JSON.stringify(error.response?.headers || {})}`);
5600
+ this.logger?.warn(`[403 响应体] ${JSON.stringify(error.response?.data || null)}`);
5601
+ const verifyDecision = error.response?.headers?.["x-tt-verify-passport-decision"];
5602
+ if (verifyDecision) this.logger?.warn(`[403 验证决策] x-tt-verify-passport-decision: ${verifyDecision}`);
5603
+ }
5597
5604
  if (error.response?.data) {
5598
5605
  if ("object" == typeof error.response.data) {
5599
5606
  const serverError = error.response.data;
@@ -14483,21 +14490,13 @@ var __webpack_exports__ = {};
14483
14490
  console.log("拦截器收到响应:", JSON.stringify(response.data));
14484
14491
  task.logger.info(`拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
14485
14492
  task.logger.info(`拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
14486
- task.logger.info(`拦截器收到响应response.data类型: ${typeof response.data}, 值: ${JSON.stringify(response.data)}`);
14487
14493
  decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
14488
- task.logger.info(`解析后的decision: ${JSON.stringify(decision)}`);
14489
14494
  if (needsVerification(decision)) {
14490
- task.logger.info(`检测到需要验证,decision.account_flow: ${decision?.account_flow}`);
14491
- task.logger.info("拦截器即将return,不抛错");
14492
- return;
14493
- }
14494
- task.logger.info("不需要验证,继续检查response.data");
14495
- if (!response || !response.data) {
14496
- task.logger.info("response或response.data为空,拦截器return");
14495
+ task.logger.info(`需要验证: ${JSON.stringify(decision)}`);
14497
14496
  return;
14498
14497
  }
14498
+ if (!response || !response.data) return;
14499
14499
  const responseData = response.data;
14500
- task.logger.info(`responseData.status_code: ${responseData?.status_code}`);
14501
14500
  if (response && responseData?.status_code && 0 !== responseData.status_code) {
14502
14501
  const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
14503
14502
  if (4 === responseData.status_code) task.logger.warn(`抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
@@ -14594,9 +14593,30 @@ var __webpack_exports__ = {};
14594
14593
  retryDelay: 2000
14595
14594
  });
14596
14595
  task.logger.info("========== api调用完成 ==========");
14597
- task.logger.info(`publishResult类型: ${typeof publishResult}, 值: ${JSON.stringify(publishResult)}`);
14598
- task.logger.info(`decision值: ${JSON.stringify(decision)}`);
14599
- task.logger.info(`needsVerification(decision): ${needsVerification(decision)}`);
14596
+ task.logger.info(`decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
14597
+ if (needsVerification(decision)) {
14598
+ const details = [
14599
+ publishResult.status_msg,
14600
+ decision?.verify_title,
14601
+ decision?.verify_desc
14602
+ ].filter(Boolean).join(" ");
14603
+ const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
14604
+ task.logger.warn(`TaskId:${task.taskId},检测到需要验证,准备返回验证信息`);
14605
+ const mockData = {
14606
+ state: share_namespaceObject.TaskState.FAILED,
14607
+ error: message,
14608
+ result: {
14609
+ data: decision,
14610
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
14611
+ }
14612
+ };
14613
+ await updateTaskState?.(mockData);
14614
+ return {
14615
+ code: 0,
14616
+ data: mockData,
14617
+ message: "操作成功"
14618
+ };
14619
+ }
14600
14620
  task.logger.info("不需要验证,继续正常流程");
14601
14621
  reportLogger({
14602
14622
  token: params.huiwenToken || "",
@@ -15293,15 +15313,41 @@ var __webpack_exports__ = {};
15293
15313
  }
15294
15314
  task.logger?.info("准备发布...");
15295
15315
  await page.waitForTimeout(1000);
15296
- const response = await new Promise((resolve, reject)=>{
15316
+ const result = await new Promise((resolve, reject)=>{
15297
15317
  const handleResponse = async (res)=>{
15298
15318
  if (res.url().includes("/web/api/media/aweme/create_v2")) {
15299
15319
  task.logger?.info("匹配到发布接口响应");
15320
+ let decision = null;
15321
+ try {
15322
+ const headers = await res.allHeaders();
15323
+ decision = parseVerifyPassportDecision(headers["x-tt-verify-passport-decision"]);
15324
+ } catch (error) {
15325
+ task.logger?.warn(`解析验证决策头失败: ${error}`);
15326
+ }
15300
15327
  const jsonResponse = await res.json();
15301
15328
  task.logger?.info(`发布接口响应数据: ${JSON.stringify(jsonResponse)}`);
15302
15329
  page.off("response", handleResponse);
15303
- if (jsonResponse?.status_code === 0) resolve(jsonResponse?.data?.item_id || jsonResponse?.item_id || "");
15304
- else reject(new Error(jsonResponse?.status_msg || "发布失败"));
15330
+ if (needsVerification(decision)) {
15331
+ task.logger?.warn("检测到需要二次验证,文章未真正发布");
15332
+ resolve({
15333
+ itemId: "",
15334
+ decision
15335
+ });
15336
+ return;
15337
+ }
15338
+ if (jsonResponse?.status_code !== 0) {
15339
+ reject(new Error(jsonResponse?.status_msg || "发布失败"));
15340
+ return;
15341
+ }
15342
+ const itemId = jsonResponse?.data?.item_id || jsonResponse?.item_id || "";
15343
+ if (!itemId) {
15344
+ reject(new Error(jsonResponse?.status_msg || "发布异常:未返回作品ID,文章可能未真正发布"));
15345
+ return;
15346
+ }
15347
+ resolve({
15348
+ itemId,
15349
+ decision: null
15350
+ });
15305
15351
  }
15306
15352
  };
15307
15353
  page.on("response", handleResponse);
@@ -15323,20 +15369,42 @@ var __webpack_exports__ = {};
15323
15369
  await page.close();
15324
15370
  return null;
15325
15371
  });
15326
- if (!response && "" !== response) return {
15372
+ if (!result) return {
15327
15373
  code: 414,
15328
15374
  message: "发布失败",
15329
15375
  data: ""
15330
15376
  };
15331
- task.logger?.info(`✓ 发布成功,item_id: ${response}`);
15377
+ if (needsVerification(result.decision)) {
15378
+ const decision = result.decision;
15379
+ const details = [
15380
+ decision?.verify_title,
15381
+ decision?.verify_desc
15382
+ ].filter(Boolean).join(" ");
15383
+ const message = `发布失败,需要二次验证${details ? `:${details}` : ""}`;
15384
+ task.logger?.warn(message);
15385
+ await updateTaskState?.({
15386
+ state: share_namespaceObject.TaskState.FAILED,
15387
+ error: message,
15388
+ result: {
15389
+ data: decision
15390
+ }
15391
+ });
15392
+ await page.close();
15393
+ return {
15394
+ code: 414,
15395
+ message,
15396
+ data: ""
15397
+ };
15398
+ }
15399
+ task.logger?.info(`✓ 发布成功,item_id: ${result.itemId}`);
15332
15400
  await updateTaskState?.({
15333
15401
  state: share_namespaceObject.TaskState.SUCCESS,
15334
15402
  result: {
15335
- response
15403
+ response: result.itemId
15336
15404
  }
15337
15405
  });
15338
15406
  await page.close();
15339
- return (0, share_namespaceObject.success)(response);
15407
+ return (0, share_namespaceObject.success)(result.itemId);
15340
15408
  };
15341
15409
  const DouyinPublishParamsSchema = ActionCommonParamsSchema.extend({
15342
15410
  title: schemas_string(),
@@ -16116,26 +16184,26 @@ var __webpack_exports__ = {};
16116
16184
  const http = new Http({
16117
16185
  headers: {
16118
16186
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
16119
- referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
16187
+ referer: "https://mp.toutiao.com/profile_v4/graphic/publish",
16188
+ "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"
16189
+ }
16190
+ });
16191
+ const totalData = await http.api({
16192
+ method: "get",
16193
+ url: "https://mp.toutiao.com/mp/fe_api/home/merge_v2",
16194
+ params: {
16195
+ app_id: 1231
16196
+ }
16197
+ });
16198
+ await new Promise((r)=>setTimeout(r, 1000));
16199
+ const contentDataYesterday = await http.api({
16200
+ method: "get",
16201
+ url: "https://mp.toutiao.com/mp/agw/statistic/v2/content_stat",
16202
+ params: {
16203
+ type: 0,
16204
+ app_id: 1231
16120
16205
  }
16121
16206
  });
16122
- const [totalData, contentDataYesterday] = await Promise.all([
16123
- http.api({
16124
- method: "get",
16125
- url: "https://mp.toutiao.com/mp/fe_api/home/merge_v2",
16126
- params: {
16127
- app_id: 1231
16128
- }
16129
- }),
16130
- http.api({
16131
- method: "get",
16132
- url: "https://mp.toutiao.com/mp/agw/statistic/v2/content_stat",
16133
- params: {
16134
- type: 0,
16135
- app_id: 1231
16136
- }
16137
- })
16138
- ]);
16139
16207
  const isSuccess = !!(totalData?.data?.statistic && contentDataYesterday?.author_stat);
16140
16208
  if (!isSuccess || !totalData?.data || !contentDataYesterday?.author_stat) return types_errorResponse(totalData?.message || contentDataYesterday?.message || "头条号数据获取失败,请检查Cookie是否有效", 414);
16141
16209
  const ttData = {
@@ -20312,8 +20380,10 @@ var __webpack_exports__ = {};
20312
20380
  tuwen_wtt_trans_flag: params.settingInfo?.toutiaoTransWtt ? "2" : "0",
20313
20381
  info_source: sourceData,
20314
20382
  ...location ? {
20315
- city: location.label,
20316
- city_code: location.value
20383
+ manual_selected_city: JSON.stringify({
20384
+ city: location.label,
20385
+ city_code: location.value
20386
+ })
20317
20387
  } : null,
20318
20388
  ...params.settingInfo?.toutiaoCollectionId ? {
20319
20389
  want_join_collection_id: params.settingInfo.toutiaoCollectionId
@@ -20363,6 +20433,12 @@ var __webpack_exports__ = {};
20363
20433
  claim_exclusive: toutiaoExclusive ? toutiaoExclusive : toutiaoOriginal?.includes("exclusive") ? 1 : 0
20364
20434
  };
20365
20435
  task._timerRecord.PrePublish = Date.now();
20436
+ task.logger.info(`[toutiaoPublish] ${"draft" === params.saveType ? "同步草稿" : "发布文章"}参数`, {
20437
+ saveType: params.saveType,
20438
+ title: params.title,
20439
+ extra: extraData,
20440
+ publishData
20441
+ });
20366
20442
  const msToken = params.cookies.find((it)=>"msToken" === it.name)?.value;
20367
20443
  let publishOption = {};
20368
20444
  if (msToken) {
@@ -21558,8 +21634,8 @@ var __webpack_exports__ = {};
21558
21634
  headers
21559
21635
  });
21560
21636
  const proxyHttp = new Http(...args);
21561
- proxyHttp.addResponseInterceptor((response)=>{
21562
- const responseData = response.data;
21637
+ const baseRespFinder = (response)=>{
21638
+ const responseData = response?.data;
21563
21639
  const msgType = "draft" === params.saveType ? "同步" : "发布";
21564
21640
  if (response && responseData?.base_resp && 0 !== responseData.base_resp.ret && !ignoreErrno.includes(responseData.base_resp.ret)) {
21565
21641
  const errmsg = weixinPublish_mock_errnoMap[responseData.base_resp.ret] || response.config.defaultErrorMsg || responseData.base_resp.err_msg || `文章${msgType}异常,请稍后重试。`;
@@ -21569,7 +21645,9 @@ var __webpack_exports__ = {};
21569
21645
  data: responseData
21570
21646
  };
21571
21647
  }
21572
- });
21648
+ };
21649
+ http.addResponseInterceptor(baseRespFinder);
21650
+ proxyHttp.addResponseInterceptor(baseRespFinder);
21573
21651
  await http.api({
21574
21652
  method: "get",
21575
21653
  url: "https://mp.weixin.qq.com/cgi-bin/appmsgpublish",