@iflyrpa/actions 4.0.4-beta.2 → 4.0.4-beta.3

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.mjs CHANGED
@@ -1,5 +1,5 @@
1
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]="253dad15-2fc6-50a4-a558-e0db69e40773")}catch(e){}}();
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]="8b4e45ee-5a8e-53e3-b9eb-aaddbf5aef36")}catch(e){}}();
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_crypto__ from "crypto";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_fs__ from "fs";
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_package_json_58ae5f06__ from "@iflyrpa/share/package.json";
@@ -4352,7 +4352,7 @@ function __webpack_require__(moduleId) {
4352
4352
  return module;
4353
4353
  };
4354
4354
  })();
4355
- var package_namespaceObject = JSON.parse('{"i8":"4.0.4-beta.2"}');
4355
+ var package_namespaceObject = JSON.parse('{"i8":"4.0.4-beta.3"}');
4356
4356
  const PROXY_CREDENTIALS = [
4357
4357
  {
4358
4358
  ip: "47.110.131.129",
@@ -13368,400 +13368,421 @@ function generateRandomString(length) {
13368
13368
  }
13369
13369
  return randomString;
13370
13370
  }
13371
+ function safeSerialize(obj) {
13372
+ if (!obj || "object" != typeof obj) return obj;
13373
+ try {
13374
+ return JSON.parse(JSON.stringify(obj));
13375
+ } catch (error) {
13376
+ return {};
13377
+ }
13378
+ }
13371
13379
  const mock_mockAction = async (task, params)=>{
13372
13380
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
13373
13381
  if (!params.extraParam || !params.extraParam["security-sdk/s_sdk_pri_key"] || !params.extraParam["security-sdk/s_sdk_pub_key"] || !params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || !params.extraParam["security-sdk/s_sdk_server_cert_key"] || !params.extraParam["security-sdk/s_sdk_crypt_sdk"]) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "extraParam 参数缺失或不完整", "");
13374
- const userAgent = params.userAgent || "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38";
13375
- const sessionidCookie = params.cookies.find((it)=>"msToken" === it.name)?.value;
13376
- if (!sessionidCookie) return {
13377
- code: 414,
13378
- message: "账号数据异常,请重新绑定账号后重试。",
13379
- data: ""
13380
- };
13381
- const headers = {
13382
- cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
13383
- origin: "https://creator.douyin.com",
13384
- referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13385
- Accept: "application/json, text/plain, */*",
13386
- "Accept-Encoding": "gzip, deflate, br, zstd",
13387
- "Content-Type": "application/json",
13388
- pragma: "no-cache",
13389
- "cache-control": "no-cache",
13390
- "sec-ch-ua-platform": params.extraParam?.browserInfo?.["sec-ch-ua-platform"] || "",
13391
- "sec-ch-ua": params.extraParam?.browserInfo?.["sec-ch-ua"] || "",
13392
- "bd-ticket-guard-web-version": "2",
13393
- "sec-ch-ua-mobile": "?0",
13394
- "user-agent": userAgent,
13395
- "sec-fetch-site": "same-origin",
13396
- "sec-fetch-mode": "cors",
13397
- "sec-fetch-dest": "empty",
13398
- "accept-language": "zh-CN,zh;q=0.9",
13399
- priority: "u=1, i"
13400
- };
13401
- const publishParams = {
13402
- read_aid: "2906",
13403
- aid: "1128",
13404
- cookie_enabled: "true",
13405
- screen_width: params.extraParam?.browserInfo.screen_width || "1920",
13406
- screen_height: params.extraParam?.browserInfo.screen_height || "1080",
13407
- browser_language: params.extraParam?.browserInfo.browser_language || "zh-CN",
13408
- browser_platform: params.extraParam?.browserInfo.browser_platform || "Win32",
13409
- browser_name: params.extraParam?.browserInfo.browser_name || "Mozilla",
13410
- browser_version: userAgent,
13411
- browser_online: "true",
13412
- timezone_name: "Asia/Shanghai",
13413
- support_h265: "1",
13414
- msToken: params.cookies.find((e)=>"msToken" === e.name)?.value || "",
13415
- a_bogus: ""
13416
- };
13417
- task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);
13418
- const publishData = {
13419
- item: {
13420
- common: {
13421
- text: params.content,
13422
- text_extra: params.textExtra,
13423
- activity: "[]",
13424
- challenges: params.challengeIds || "[]",
13425
- hashtag_source: "",
13426
- mentions: "[]",
13427
- music_id: params.musicId || "",
13428
- music_end_time: 1000 * (params.musicDuration || 0),
13429
- hot_sentence: params.hotSentence || "",
13430
- visibility_type: Number(params.visibleRange) || 0,
13431
- download: params.allowSave ? 1 : 0,
13432
- timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish,
13433
- media_type: Number(params.publishType) || 2,
13434
- images: [],
13435
- creation_id: ""
13436
- },
13437
- cover: {
13438
- poster: ""
13382
+ let currentStep = "初始化";
13383
+ try {
13384
+ currentStep = "验证账号信息";
13385
+ const userAgent = params.userAgent || "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38";
13386
+ const sessionidCookie = params.cookies.find((it)=>"msToken" === it.name)?.value;
13387
+ if (!sessionidCookie) return {
13388
+ code: 414,
13389
+ message: "账号数据异常,请重新绑定账号后重试。",
13390
+ data: ""
13391
+ };
13392
+ currentStep = "准备请求参数";
13393
+ const headers = {
13394
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
13395
+ origin: "https://creator.douyin.com",
13396
+ referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13397
+ Accept: "application/json, text/plain, */*",
13398
+ "Accept-Encoding": "gzip, deflate, br, zstd",
13399
+ "Content-Type": "application/json",
13400
+ pragma: "no-cache",
13401
+ "cache-control": "no-cache",
13402
+ "sec-ch-ua-platform": params.extraParam?.browserInfo?.["sec-ch-ua-platform"] || "",
13403
+ "sec-ch-ua": params.extraParam?.browserInfo?.["sec-ch-ua"] || "",
13404
+ "bd-ticket-guard-web-version": "2",
13405
+ "sec-ch-ua-mobile": "?0",
13406
+ "user-agent": userAgent,
13407
+ "sec-fetch-site": "same-origin",
13408
+ "sec-fetch-mode": "cors",
13409
+ "sec-fetch-dest": "empty",
13410
+ "accept-language": "zh-CN,zh;q=0.9",
13411
+ priority: "u=1, i"
13412
+ };
13413
+ const publishParams = {
13414
+ read_aid: "2906",
13415
+ aid: "1128",
13416
+ cookie_enabled: "true",
13417
+ screen_width: params.extraParam?.browserInfo.screen_width || "1920",
13418
+ screen_height: params.extraParam?.browserInfo.screen_height || "1080",
13419
+ browser_language: params.extraParam?.browserInfo.browser_language || "zh-CN",
13420
+ browser_platform: params.extraParam?.browserInfo.browser_platform || "Win32",
13421
+ browser_name: params.extraParam?.browserInfo.browser_name || "Mozilla",
13422
+ browser_version: userAgent,
13423
+ browser_online: "true",
13424
+ timezone_name: "Asia/Shanghai",
13425
+ support_h265: "1",
13426
+ msToken: params.cookies.find((e)=>"msToken" === e.name)?.value || "",
13427
+ a_bogus: ""
13428
+ };
13429
+ task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);
13430
+ const publishData = {
13431
+ item: {
13432
+ common: {
13433
+ text: params.content,
13434
+ text_extra: params.textExtra,
13435
+ activity: "[]",
13436
+ challenges: params.challengeIds || "[]",
13437
+ hashtag_source: "",
13438
+ mentions: "[]",
13439
+ music_id: params.musicId || "",
13440
+ music_end_time: 1000 * (params.musicDuration || 0),
13441
+ hot_sentence: params.hotSentence || "",
13442
+ visibility_type: Number(params.visibleRange) || 0,
13443
+ download: params.allowSave ? 1 : 0,
13444
+ timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish,
13445
+ media_type: Number(params.publishType) || 2,
13446
+ images: [],
13447
+ creation_id: ""
13448
+ },
13449
+ cover: {
13450
+ poster: ""
13451
+ },
13452
+ mix: params.mix ? {
13453
+ mix_id: params.mix.mix_id,
13454
+ mix_order: params.mix.mix_order || 0
13455
+ } : {},
13456
+ anchor: {},
13457
+ declare: {
13458
+ user_declare_info: "{}"
13459
+ }
13460
+ }
13461
+ };
13462
+ const args = [
13463
+ {
13464
+ headers
13439
13465
  },
13440
- mix: params.mix ? {
13441
- mix_id: params.mix.mix_id,
13442
- mix_order: params.mix.mix_order || 0
13443
- } : {},
13444
- anchor: {},
13445
- declare: {
13446
- user_declare_info: "{}"
13466
+ task.logger,
13467
+ "",
13468
+ "",
13469
+ params.accountId,
13470
+ "douyin"
13471
+ ];
13472
+ const http = new Http({
13473
+ headers
13474
+ });
13475
+ const proxyHttp = new Http(...args);
13476
+ const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];
13477
+ if (uploadedImgList.length > 0) publishData.item.common.images = uploadedImgList;
13478
+ else {
13479
+ const tmpCachePath = task.getTmpPath();
13480
+ const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
13481
+ if (params.coverImage) {
13482
+ const cover = await uploader.uploadCover(params.coverImage);
13483
+ if (cover) {
13484
+ publishData.item.common.images.push({
13485
+ uri: cover.uri,
13486
+ width: cover.width,
13487
+ height: cover.height
13488
+ });
13489
+ publishData.item.cover = {
13490
+ poster: cover.uri
13491
+ };
13492
+ }
13493
+ }
13494
+ if (params.banners && params.banners.length > 0) {
13495
+ const banners = params.banners.filter((i)=>i !== params.coverImage);
13496
+ const uploadResults = await uploader.uploadImages(banners);
13497
+ publishData.item.common.images = publishData.item.common.images.concat(uploadResults.map((result)=>({
13498
+ uri: result.uri,
13499
+ width: result.width,
13500
+ height: result.height
13501
+ })));
13447
13502
  }
13448
13503
  }
13449
- };
13450
- const args = [
13451
- {
13452
- headers
13453
- },
13454
- task.logger,
13455
- "",
13456
- "",
13457
- params.accountId,
13458
- "douyin"
13459
- ];
13460
- const http = new Http({
13461
- headers
13462
- });
13463
- const proxyHttp = new Http(...args);
13464
- const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];
13465
- if (uploadedImgList.length > 0) publishData.item.common.images = uploadedImgList;
13466
- else {
13467
- const tmpCachePath = task.getTmpPath();
13468
- const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
13469
- if (params.coverImage) {
13470
- const cover = await uploader.uploadCover(params.coverImage);
13471
- if (cover) {
13472
- publishData.item.common.images.push({
13473
- uri: cover.uri,
13474
- width: cover.width,
13475
- height: cover.height
13476
- });
13477
- publishData.item.cover = {
13478
- poster: cover.uri
13504
+ publishData.item.common.creation_id = generateRandomString(8) + Date.now();
13505
+ let decision = null;
13506
+ proxyHttp.addResponseInterceptor((response)=>{
13507
+ task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
13508
+ task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
13509
+ decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
13510
+ if (needsVerification(decision)) {
13511
+ task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);
13512
+ return;
13513
+ }
13514
+ if (!response || !response.data) return;
13515
+ const responseData = response.data;
13516
+ if (response && responseData?.status_code && 0 !== responseData.status_code) {
13517
+ const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
13518
+ if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
13519
+ return {
13520
+ code: errorCode,
13521
+ message: responseData.status_msg || "文章发布异常,请稍后重试。",
13522
+ data: responseData
13479
13523
  };
13480
13524
  }
13525
+ });
13526
+ task._timerRecord.PrePublish = Date.now();
13527
+ if (MockPublish) {
13528
+ const data = "123456789";
13529
+ const message = `图文模拟发布成功 ${http.proxyInfo}`;
13530
+ await updateTaskState?.({
13531
+ state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
13532
+ result: {
13533
+ response: data
13534
+ }
13535
+ });
13536
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(0, message, data);
13481
13537
  }
13482
- if (params.banners && params.banners.length > 0) {
13483
- const banners = params.banners.filter((i)=>i !== params.coverImage);
13484
- const uploadResults = await uploader.uploadImages(banners);
13485
- publishData.item.common.images = publishData.item.common.images.concat(uploadResults.map((result)=>({
13486
- uri: result.uri,
13487
- width: result.width,
13488
- height: result.height
13489
- })));
13490
- }
13491
- }
13492
- publishData.item.common.creation_id = generateRandomString(8) + Date.now();
13493
- let decision = null;
13494
- proxyHttp.addResponseInterceptor((response)=>{
13495
- task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
13496
- task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
13497
- decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
13498
- if (needsVerification(decision)) {
13499
- task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);
13500
- return;
13538
+ let webProtectData;
13539
+ try {
13540
+ webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
13541
+ if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
13542
+ task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
13543
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
13544
+ }
13545
+ } catch (error) {
13546
+ task.logger.error(`解析 webProtectData 失败: ${error}`);
13547
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
13548
+ }
13549
+ let ticket = webProtectData.ticket;
13550
+ let ts_sign = webProtectData.ts_sign;
13551
+ const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
13552
+ if (serverDataCookie) try {
13553
+ const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
13554
+ if (decoded.ticket && decoded.ts_sign) {
13555
+ if (decoded.ticket !== ticket) task.logger.info("[douyinPublish] 使用 cookie 中的最新 ticket(web_protect 已过期)");
13556
+ ticket = decoded.ticket;
13557
+ ts_sign = decoded.ts_sign;
13558
+ }
13559
+ } catch (error) {
13560
+ task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
13501
13561
  }
13502
- if (!response || !response.data) return;
13503
- const responseData = response.data;
13504
- if (response && responseData?.status_code && 0 !== responseData.status_code) {
13505
- const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
13506
- if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
13507
- return {
13508
- code: errorCode,
13509
- message: responseData.status_msg || "文章发布异常,请稍后重试。",
13510
- data: responseData
13511
- };
13562
+ let ec_privateKey;
13563
+ try {
13564
+ ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
13565
+ if (!ec_privateKey) {
13566
+ task.logger.error("[douyinPublish] ec_privateKey 为空");
13567
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
13568
+ }
13569
+ } catch (error) {
13570
+ task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);
13571
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
13512
13572
  }
13513
- });
13514
- task._timerRecord.PrePublish = Date.now();
13515
- if (MockPublish) {
13516
- const data = "123456789";
13517
- const message = `图文模拟发布成功 ${http.proxyInfo}`;
13518
- await updateTaskState?.({
13519
- state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
13520
- result: {
13521
- response: data
13573
+ let certificate;
13574
+ try {
13575
+ certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
13576
+ if (!certificate) {
13577
+ task.logger.error("[douyinPublish] certificate 为空");
13578
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 缺失,请重新获取后重试", "");
13522
13579
  }
13523
- });
13524
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(0, message, data);
13525
- }
13526
- let webProtectData;
13527
- try {
13528
- webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
13529
- if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
13530
- task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
13531
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
13580
+ } catch (error) {
13581
+ task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);
13582
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
13532
13583
  }
13533
- } catch (error) {
13534
- task.logger.error(`解析 webProtectData 失败: ${error}`);
13535
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
13536
- }
13537
- let ticket = webProtectData.ticket;
13538
- let ts_sign = webProtectData.ts_sign;
13539
- const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
13540
- if (serverDataCookie) try {
13541
- const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
13542
- if (decoded.ticket && decoded.ts_sign) {
13543
- if (decoded.ticket !== ticket) task.logger.info("[douyinPublish] 使用 cookie 中的最新 ticket(web_protect 已过期)");
13544
- ticket = decoded.ticket;
13545
- ts_sign = decoded.ts_sign;
13584
+ const ree_public_key = webProtectData.client_cert.replace("pub.", "");
13585
+ let bdTicketGuardClientData;
13586
+ try {
13587
+ bdTicketGuardClientData = getBdV2({
13588
+ ticket,
13589
+ ts_sign: ts_sign,
13590
+ ec_privateKey: ec_privateKey,
13591
+ certificate: certificate,
13592
+ bd_ticket_guard_ree_public_key: ree_public_key
13593
+ });
13594
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
13595
+ task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
13596
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
13597
+ }
13598
+ } catch (error) {
13599
+ task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
13600
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
13546
13601
  }
13547
- } catch (error) {
13548
- task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
13549
- }
13550
- let ec_privateKey;
13551
- try {
13552
- ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
13553
- if (!ec_privateKey) {
13554
- task.logger.error("[douyinPublish] ec_privateKey 为空");
13555
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
13602
+ task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
13603
+ const publishQuery = {
13604
+ ...publishParams,
13605
+ a_bogus: ""
13606
+ };
13607
+ const queryString = new URLSearchParams(publishQuery).toString();
13608
+ let aBogus;
13609
+ try {
13610
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
13611
+ if (!aBogus || aBogus.length < 10) {
13612
+ task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
13613
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
13614
+ }
13615
+ } catch (error) {
13616
+ task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
13617
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
13556
13618
  }
13557
- } catch (error) {
13558
- task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);
13559
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
13560
- }
13561
- let certificate;
13562
- try {
13563
- certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
13564
- if (!certificate) {
13565
- task.logger.error("[douyinPublish] certificate 为空");
13566
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 缺失,请重新获取后重试", "");
13619
+ publishQuery.a_bogus = aBogus;
13620
+ const publishQueryParams = new URLSearchParams(publishQuery).toString();
13621
+ let csrfToken;
13622
+ try {
13623
+ csrfToken = mock_generateCsrfTokenAdvanced({
13624
+ cookies: params.cookies,
13625
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
13626
+ method: "POST",
13627
+ userAgent
13628
+ });
13629
+ if (!csrfToken || csrfToken.length < 10) {
13630
+ task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
13631
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
13632
+ }
13633
+ task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
13634
+ } catch (error) {
13635
+ task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
13636
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
13567
13637
  }
13568
- } catch (error) {
13569
- task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);
13570
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
13571
- }
13572
- const ree_public_key = webProtectData.client_cert.replace("pub.", "");
13573
- let bdTicketGuardClientData;
13574
- try {
13575
- bdTicketGuardClientData = getBdV2({
13576
- ticket,
13577
- ts_sign: ts_sign,
13578
- ec_privateKey: ec_privateKey,
13579
- certificate: certificate,
13580
- bd_ticket_guard_ree_public_key: ree_public_key
13581
- });
13582
- if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
13583
- task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
13584
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
13638
+ let sessionDtrait;
13639
+ try {
13640
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
13641
+ task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
13642
+ } catch (error) {
13643
+ task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
13644
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
13585
13645
  }
13586
- } catch (error) {
13587
- task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
13588
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
13589
- }
13590
- task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
13591
- const publishQuery = {
13592
- ...publishParams,
13593
- a_bogus: ""
13594
- };
13595
- const queryString = new URLSearchParams(publishQuery).toString();
13596
- let aBogus;
13597
- try {
13598
- aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
13599
- if (!aBogus || aBogus.length < 10) {
13600
- task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
13601
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
13646
+ task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
13647
+ ...headers,
13648
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13649
+ "Content-Type": "application/json",
13650
+ Accept: "application/json, text/plain, */*",
13651
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
13652
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
13653
+ "bd-ticket-guard-version": "2",
13654
+ "bd-ticket-guard-web-sign-type": "1",
13655
+ "bd-ticket-guard-web-version": "2",
13656
+ "x-secsdk-csrf-token": csrfToken,
13657
+ "x-tt-session-dtrait": sessionDtrait || ""
13658
+ })}`);
13659
+ task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
13660
+ let publishResult;
13661
+ try {
13662
+ publishResult = await proxyHttp.api({
13663
+ method: "post",
13664
+ url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
13665
+ data: publishData,
13666
+ defaultErrorMsg: "发布异常,请稍后重试。",
13667
+ headers: {
13668
+ ...headers,
13669
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13670
+ "Content-Type": "application/json",
13671
+ Accept: "application/json, text/plain, */*",
13672
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
13673
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
13674
+ "bd-ticket-guard-version": "2",
13675
+ "bd-ticket-guard-web-sign-type": "1",
13676
+ "bd-ticket-guard-web-version": "2",
13677
+ "x-secsdk-csrf-token": csrfToken,
13678
+ "x-tt-session-dtrait": sessionDtrait || ""
13679
+ }
13680
+ }, {
13681
+ timeout: 60000,
13682
+ retries: 3,
13683
+ retryDelay: 2000
13684
+ });
13685
+ } catch (error) {
13686
+ const handledError = Http.handleApiError(error);
13687
+ const isProxyOrNetworkError = [
13688
+ 599,
13689
+ 500,
13690
+ 502,
13691
+ 503,
13692
+ 504
13693
+ ].includes(handledError.code);
13694
+ if (isProxyOrNetworkError) {
13695
+ const isProxyRequest = handledError.extra?.isProxyRequest === true;
13696
+ const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
13697
+ const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13698
+ task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
13699
+ await updateTaskState?.({
13700
+ state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
13701
+ error: message
13702
+ });
13703
+ return {
13704
+ code: 414,
13705
+ data: "",
13706
+ message
13707
+ };
13708
+ }
13709
+ throw error;
13602
13710
  }
13603
- } catch (error) {
13604
- task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
13605
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
13606
- }
13607
- publishQuery.a_bogus = aBogus;
13608
- const publishQueryParams = new URLSearchParams(publishQuery).toString();
13609
- let csrfToken;
13610
- try {
13611
- csrfToken = mock_generateCsrfTokenAdvanced({
13612
- cookies: params.cookies,
13613
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
13614
- method: "POST",
13615
- userAgent
13616
- });
13617
- if (!csrfToken || csrfToken.length < 10) {
13618
- task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
13619
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
13711
+ task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
13712
+ if (needsVerification(decision)) {
13713
+ const details = [
13714
+ publishResult.status_msg,
13715
+ decision?.verify_title,
13716
+ decision?.verify_desc
13717
+ ].filter(Boolean).join(" ");
13718
+ const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13719
+ const safeDecision = safeSerialize(decision) ?? {};
13720
+ const mockData = {
13721
+ state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
13722
+ error: message,
13723
+ result: {
13724
+ ...safeDecision,
13725
+ data: safeDecision,
13726
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
13727
+ }
13728
+ };
13729
+ await updateTaskState?.(mockData);
13730
+ return {
13731
+ code: 0,
13732
+ data: mockData,
13733
+ message: "操作成功"
13734
+ };
13620
13735
  }
13621
- task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
13622
- } catch (error) {
13623
- task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
13624
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
13625
- }
13626
- let sessionDtrait;
13627
- try {
13628
- sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
13629
- task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
13630
- } catch (error) {
13631
- task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
13632
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
13633
- }
13634
- task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
13635
- ...headers,
13636
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13637
- "Content-Type": "application/json",
13638
- Accept: "application/json, text/plain, */*",
13639
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
13640
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
13641
- "bd-ticket-guard-version": "2",
13642
- "bd-ticket-guard-web-sign-type": "1",
13643
- "bd-ticket-guard-web-version": "2",
13644
- "x-secsdk-csrf-token": csrfToken,
13645
- "x-tt-session-dtrait": sessionDtrait || ""
13646
- })}`);
13647
- task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
13648
- let publishResult;
13649
- try {
13650
- publishResult = await proxyHttp.api({
13651
- method: "post",
13652
- url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
13653
- data: publishData,
13654
- defaultErrorMsg: "发布异常,请稍后重试。",
13655
- headers: {
13656
- ...headers,
13657
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
13658
- "Content-Type": "application/json",
13659
- Accept: "application/json, text/plain, */*",
13660
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
13661
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
13662
- "bd-ticket-guard-version": "2",
13663
- "bd-ticket-guard-web-sign-type": "1",
13664
- "bd-ticket-guard-web-version": "2",
13665
- "x-secsdk-csrf-token": csrfToken,
13666
- "x-tt-session-dtrait": sessionDtrait || ""
13667
- }
13668
- }, {
13669
- timeout: 60000,
13670
- retries: 3,
13671
- retryDelay: 2000
13736
+ reportLogger({
13737
+ token: params.huiwenToken || "",
13738
+ enverionment: task.enverionment || "development",
13739
+ postId: params.articleId,
13740
+ eip: proxyHttp.proxyInfo,
13741
+ proxyIp: params.localIP,
13742
+ accountId: params.accountId,
13743
+ uid: params.uid,
13744
+ platform: "douyin",
13745
+ publishParams: publishData
13672
13746
  });
13673
- } catch (error) {
13674
- const handledError = Http.handleApiError(error);
13675
- const isProxyOrNetworkError = [
13676
- 599,
13677
- 500,
13678
- 502,
13679
- 503,
13680
- 504
13681
- ].includes(handledError.code);
13682
- if (isProxyOrNetworkError) {
13683
- const isProxyRequest = handledError.extra?.isProxyRequest === true;
13684
- const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
13685
- const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13686
- task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
13747
+ task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
13748
+ const isSuccess = 0 === publishResult.status_code;
13749
+ const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13750
+ const data = isSuccess ? publishResult.item_id || "" : "";
13751
+ if (!isSuccess) {
13752
+ const safeDecision = safeSerialize(decision) ?? {};
13687
13753
  await updateTaskState?.({
13688
13754
  state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
13689
- error: message
13755
+ error: message,
13756
+ result: {
13757
+ ...safeDecision,
13758
+ data: safeDecision,
13759
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
13760
+ }
13690
13761
  });
13691
13762
  return {
13692
13763
  code: 414,
13693
- data: "",
13764
+ data: safeDecision,
13694
13765
  message
13695
13766
  };
13696
13767
  }
13697
- throw error;
13698
- }
13699
- task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
13700
- if (needsVerification(decision)) {
13701
- const details = [
13702
- publishResult.status_msg,
13703
- decision?.verify_title,
13704
- decision?.verify_desc
13705
- ].filter(Boolean).join(" ");
13706
- const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13707
- let decisionObj = {};
13708
- if (decision) decisionObj = decision;
13709
- const mockData = {
13710
- state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
13711
- error: message,
13768
+ await updateTaskState?.({
13769
+ state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
13712
13770
  result: {
13713
- ...decisionObj,
13714
- data: decision,
13715
- uploadedImgList: JSON.stringify(publishData.item.common.images)
13771
+ response: data
13716
13772
  }
13717
- };
13718
- await updateTaskState?.(mockData);
13719
- return {
13720
- code: 0,
13721
- data: mockData,
13722
- message: "操作成功"
13723
- };
13724
- }
13725
- reportLogger({
13726
- token: params.huiwenToken || "",
13727
- enverionment: task.enverionment || "development",
13728
- postId: params.articleId,
13729
- eip: proxyHttp.proxyInfo,
13730
- proxyIp: params.localIP,
13731
- accountId: params.accountId,
13732
- uid: params.uid,
13733
- platform: "douyin",
13734
- publishParams: publishData
13735
- });
13736
- task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
13737
- const isSuccess = 0 === publishResult.status_code;
13738
- const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
13739
- const data = isSuccess ? publishResult.item_id || "" : "";
13740
- if (!isSuccess) {
13741
- let decisionObj = {};
13742
- if (decision) decisionObj = decision;
13773
+ });
13774
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(isSuccess ? 0 : 414, message, data);
13775
+ } catch (error) {
13776
+ const handledError = Http.handleApiError(error);
13777
+ const errorMsg = handledError.message || "发布失败";
13778
+ const errorCode = handledError.code || 500;
13779
+ task.logger.error(`[douyinPublish] 发布流程异常 (步骤: ${currentStep}): ${errorMsg}`, stringifyError(error), handledError.extra);
13743
13780
  await updateTaskState?.({
13744
13781
  state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
13745
- error: message,
13746
- result: {
13747
- ...decisionObj,
13748
- data: decision,
13749
- uploadedImgList: JSON.stringify(publishData.item.common.images)
13750
- }
13782
+ error: `${currentStep}失败: ${errorMsg}`
13751
13783
  });
13752
- return {
13753
- code: 414,
13754
- data,
13755
- message
13756
- };
13784
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(errorCode, errorMsg, "");
13757
13785
  }
13758
- await updateTaskState?.({
13759
- state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
13760
- result: {
13761
- response: data
13762
- }
13763
- });
13764
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(isSuccess ? 0 : 414, message, data);
13765
13786
  };
13766
13787
  const douyinPublish_rpa_rpaAction = async (task, params)=>{
13767
13788
  const commonCookies = {
@@ -18533,7 +18554,9 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18533
18554
  task.logger.info("[shipinhaoPublish] 开始执行视频号发布 - Mock API 方式");
18534
18555
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
18535
18556
  if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(400, "fingerPrintDeviceId和aId 不能为空", "");
18557
+ let currentStep = "初始化";
18536
18558
  try {
18559
+ currentStep = "解析认证信息";
18537
18560
  const cookieString = params.cookies.map((c)=>`${c.name}=${c.value}`).join("; ");
18538
18561
  const fingerPrintDeviceId = params.extraParam.fingerPrintDeviceId;
18539
18562
  const aId = params.extraParam.aId;
@@ -18554,8 +18577,10 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18554
18577
  headers
18555
18578
  });
18556
18579
  const proxyHttp = new Http(...args);
18580
+ currentStep = "验证发布参数";
18557
18581
  if (!params.banners || 0 === params.banners.length) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(400, "至少需要一张图片", "");
18558
18582
  const images = params.banners.slice(0, 18).filter((img)=>"string" == typeof img);
18583
+ currentStep = "获取用户信息";
18559
18584
  task.logger.info("[shipinhaoPublish] 获取用户信息...");
18560
18585
  console.log("cookieString", cookieString);
18561
18586
  const userInfo = await mock_getUserInfo(cookieString, http);
@@ -18566,6 +18591,7 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18566
18591
  }
18567
18592
  const finderUsername = userInfo.data.finderUser.finderUsername;
18568
18593
  console.log(finderUsername);
18594
+ currentStep = "获取上传认证密钥";
18569
18595
  task.logger.info("[shipinhaoPublish] 获取上传认证密钥...");
18570
18596
  const authKeyResponse = await getUploadAuthKey(cookieString, finderUsername, http);
18571
18597
  if (0 !== authKeyResponse.errCode || !authKeyResponse.data?.authKey) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(authKeyResponse.errCode || 500, `获取上传认证参数失败: ${authKeyResponse.errMsg}`, "");
@@ -18573,10 +18599,12 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18573
18599
  const uin = authKeyResponse.data.uin;
18574
18600
  if (!uin) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(500, "获取用户 uin 失败", "");
18575
18601
  const taskId = String(generateUUID());
18602
+ currentStep = "上传图片";
18576
18603
  task.logger.info(`[shipinhaoPublish] 开始上传 ${images.length} 张图片...`);
18577
18604
  const uploadedImages = [];
18578
18605
  for(let i = 0; i < images.length; i++){
18579
- task.logger.info(`[shipinhaoPublish] 上传图片 ${i + 1}/${images.length}...`);
18606
+ currentStep = `上传图片 ${i + 1}/${images.length}`;
18607
+ task.logger.info(`[shipinhaoPublish] ${currentStep}...`);
18580
18608
  const uploadResult = await uploadImageComplete(images[i], taskId, finderUsername, uin, authKey, http);
18581
18609
  console.log(JSON.stringify(uploadResult));
18582
18610
  if (!uploadResult.DownloadURL) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(500, `图片上传失败: ${uploadResult.errMsg}`, "");
@@ -18593,6 +18621,7 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18593
18621
  urlCdnTaskId: ""
18594
18622
  });
18595
18623
  }
18624
+ currentStep = "发布图文内容";
18596
18625
  task.logger.info("[shipinhaoPublish] 正在发布...");
18597
18626
  const topicNames = params.topic || void 0;
18598
18627
  const addressInfo = params.address ? {
@@ -18679,9 +18708,15 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
18679
18708
  });
18680
18709
  return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(resultCode || 500, errorMessage, "");
18681
18710
  } catch (error) {
18682
- const errorMsg = error instanceof Error ? error.message : "发布失败";
18683
- task.logger.error(`[shipinhaoPublish] 发布异常: ${errorMsg}`);
18684
- return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(500, errorMsg, "");
18711
+ const handledError = Http.handleApiError(error);
18712
+ const errorMsg = handledError.message || "发布失败,请稍后重试";
18713
+ const errorCode = handledError.code || 500;
18714
+ task.logger.error(`[shipinhaoPublish] 发布流程异常: ${errorMsg}`, stringifyError(error), handledError.extra);
18715
+ await updateTaskState?.({
18716
+ state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
18717
+ error: errorMsg
18718
+ });
18719
+ return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(errorCode, errorMsg, "");
18685
18720
  }
18686
18721
  };
18687
18722
  const shipinhaoPublish_rpa_rpaAction = async (task, params)=>{
@@ -25187,7 +25222,7 @@ const bjhConfigDataSchema = schemas_object({
25187
25222
  likeNumYesterday: schemas_number().nullable(),
25188
25223
  commentNumYesterday: schemas_number().nullable()
25189
25224
  });
25190
- schemas_object({
25225
+ const douyinConfigDataSchema = schemas_object({
25191
25226
  fansNum: schemas_number(),
25192
25227
  favedNum: schemas_number(),
25193
25228
  fansNumLastWeek: schemas_number(),
@@ -25197,7 +25232,7 @@ schemas_object({
25197
25232
  shareNumLastWeek: schemas_number(),
25198
25233
  visitNumLastWeek: schemas_number()
25199
25234
  });
25200
- schemas_object({
25235
+ const shipinhaoConfigDataSchema = schemas_object({
25201
25236
  fansNum: schemas_number(),
25202
25237
  feedsCount: schemas_number(),
25203
25238
  fansNumYesterday: schemas_number().nullable(),
@@ -25487,7 +25522,7 @@ class Action {
25487
25522
  }
25488
25523
  }
25489
25524
  var __webpack_exports__version = package_namespaceObject.i8;
25490
- export { Action, ActionCommonParamsSchema, BaijiahaoPublishParamsSchema, BetaFlag, CollectionDetailSchema, ConfigDataSchema, DouyinCheckVerifyQrCodeParamsSchema, DouyinCreateCommentReplyParamsSchema, DouyinGetCollectionParamsSchema, DouyinGetCommentListParamsSchema, DouyinGetCommentReplyListParamsSchema, DouyinGetHotParamsSchema, DouyinGetLocationParamsSchema, DouyinGetMusicByCategoryParamsSchema, DouyinGetMusicCategoryParamsSchema, DouyinGetMusicParamsSchema, DouyinGetTopicsParamsSchema, DouyinGetVerifyQrCodeParamsSchema, DouyinGetWorkListParamsSchema, DouyinPublishParamsSchema, FetchArticlesDataSchema, FetchArticlesParamsSchema, Http, ProxyAgent, SearchAccountInfoParamsSchema, SessionCheckResultSchema, ShipinhaoCheckLinkValidateParamsSchema, ShipinhaoGetLocationParamsSchema, ShipinhaoGetMsgParamsSchema, ShipinhaoPublishParamsSchema, ShipinhaoSendMsgParamsSchema, ToutiaoPublishParamsSchema, UnreadCountSchema, WeixinPublishParamsSchema, WxBjhSessionParamsSchema, XhsWebSearchParamsSchema, XiaohongshuPublishParamsSchema, bjhConfigDataSchema, getFileState, reportLogger, rpaAction_Server_Mock, ttConfigDataSchema, wxConfigDataSchema, xhsConfigDataSchema, __webpack_exports__version as version };
25525
+ export { Action, ActionCommonParamsSchema, BaijiahaoPublishParamsSchema, BetaFlag, CollectionDetailSchema, ConfigDataSchema, DouyinCheckVerifyQrCodeParamsSchema, DouyinCreateCommentReplyParamsSchema, DouyinGetCollectionParamsSchema, DouyinGetCommentListParamsSchema, DouyinGetCommentReplyListParamsSchema, DouyinGetHotParamsSchema, DouyinGetLocationParamsSchema, DouyinGetMusicByCategoryParamsSchema, DouyinGetMusicCategoryParamsSchema, DouyinGetMusicParamsSchema, DouyinGetTopicsParamsSchema, DouyinGetVerifyQrCodeParamsSchema, DouyinGetWorkListParamsSchema, DouyinPublishParamsSchema, FetchArticlesDataSchema, FetchArticlesParamsSchema, Http, ProxyAgent, SearchAccountInfoParamsSchema, SessionCheckResultSchema, ShipinhaoCheckLinkValidateParamsSchema, ShipinhaoGetLocationParamsSchema, ShipinhaoGetMsgParamsSchema, ShipinhaoPublishParamsSchema, ShipinhaoSendMsgParamsSchema, ToutiaoPublishParamsSchema, UnreadCountSchema, WeixinPublishParamsSchema, WxBjhSessionParamsSchema, XhsWebSearchParamsSchema, XiaohongshuPublishParamsSchema, bjhConfigDataSchema, douyinConfigDataSchema, getFileState, reportLogger, rpaAction_Server_Mock, shipinhaoConfigDataSchema, ttConfigDataSchema, wxConfigDataSchema, xhsConfigDataSchema, __webpack_exports__version as version };
25491
25526
 
25492
25527
  //# sourceMappingURL=index.mjs.map
25493
- //# debugId=253dad15-2fc6-50a4-a558-e0db69e40773
25528
+ //# debugId=8b4e45ee-5a8e-53e3-b9eb-aaddbf5aef36