@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/bundle.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*! For license information please see bundle.js.LICENSE.txt */
2
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]="b2126d25-6ff1-5818-8cdb-7b95d8c6627c")}catch(e){}}();
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]="029aefb0-580d-5097-84ee-1a7045670fcb")}catch(e){}}();
4
4
  var __webpack_modules__ = {
5
5
  "../../node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js": function(__unused_webpack_module, exports1, __webpack_require__) {
6
6
  "use strict";
@@ -12476,6 +12476,8 @@ var __webpack_exports__ = {};
12476
12476
  bjhConfigDataSchema: ()=>bjhConfigDataSchema,
12477
12477
  Action: ()=>Action,
12478
12478
  ProxyAgent: ()=>ProxyAgent,
12479
+ douyinConfigDataSchema: ()=>douyinConfigDataSchema,
12480
+ shipinhaoConfigDataSchema: ()=>shipinhaoConfigDataSchema,
12479
12481
  version: ()=>package_namespaceObject_0.i8
12480
12482
  });
12481
12483
  var common_utils_namespaceObject = {};
@@ -12490,7 +12492,7 @@ 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.2"}');
12495
+ var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.4-beta.3"}');
12494
12496
  const external_node_fs_namespaceObject = require("node:fs");
12495
12497
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
12496
12498
  const external_node_http_namespaceObject = require("node:http");
@@ -38514,400 +38516,421 @@ var __webpack_exports__ = {};
38514
38516
  }
38515
38517
  return randomString;
38516
38518
  }
38519
+ function safeSerialize(obj) {
38520
+ if (!obj || "object" != typeof obj) return obj;
38521
+ try {
38522
+ return JSON.parse(JSON.stringify(obj));
38523
+ } catch (error) {
38524
+ return {};
38525
+ }
38526
+ }
38517
38527
  const mock_mockAction = async (task, params)=>{
38518
38528
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
38519
38529
  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 utils_response(414, "extraParam 参数缺失或不完整", "");
38520
- 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";
38521
- const sessionidCookie = params.cookies.find((it)=>"msToken" === it.name)?.value;
38522
- if (!sessionidCookie) return {
38523
- code: 414,
38524
- message: "账号数据异常,请重新绑定账号后重试。",
38525
- data: ""
38526
- };
38527
- const headers = {
38528
- cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
38529
- origin: "https://creator.douyin.com",
38530
- referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38531
- Accept: "application/json, text/plain, */*",
38532
- "Accept-Encoding": "gzip, deflate, br, zstd",
38533
- "Content-Type": "application/json",
38534
- pragma: "no-cache",
38535
- "cache-control": "no-cache",
38536
- "sec-ch-ua-platform": params.extraParam?.browserInfo?.["sec-ch-ua-platform"] || "",
38537
- "sec-ch-ua": params.extraParam?.browserInfo?.["sec-ch-ua"] || "",
38538
- "bd-ticket-guard-web-version": "2",
38539
- "sec-ch-ua-mobile": "?0",
38540
- "user-agent": userAgent,
38541
- "sec-fetch-site": "same-origin",
38542
- "sec-fetch-mode": "cors",
38543
- "sec-fetch-dest": "empty",
38544
- "accept-language": "zh-CN,zh;q=0.9",
38545
- priority: "u=1, i"
38546
- };
38547
- const publishParams = {
38548
- read_aid: "2906",
38549
- aid: "1128",
38550
- cookie_enabled: "true",
38551
- screen_width: params.extraParam?.browserInfo.screen_width || "1920",
38552
- screen_height: params.extraParam?.browserInfo.screen_height || "1080",
38553
- browser_language: params.extraParam?.browserInfo.browser_language || "zh-CN",
38554
- browser_platform: params.extraParam?.browserInfo.browser_platform || "Win32",
38555
- browser_name: params.extraParam?.browserInfo.browser_name || "Mozilla",
38556
- browser_version: userAgent,
38557
- browser_online: "true",
38558
- timezone_name: "Asia/Shanghai",
38559
- support_h265: "1",
38560
- msToken: params.cookies.find((e)=>"msToken" === e.name)?.value || "",
38561
- a_bogus: ""
38562
- };
38563
- task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);
38564
- const publishData = {
38565
- item: {
38566
- common: {
38567
- text: params.content,
38568
- text_extra: params.textExtra,
38569
- activity: "[]",
38570
- challenges: params.challengeIds || "[]",
38571
- hashtag_source: "",
38572
- mentions: "[]",
38573
- music_id: params.musicId || "",
38574
- music_end_time: 1000 * (params.musicDuration || 0),
38575
- hot_sentence: params.hotSentence || "",
38576
- visibility_type: Number(params.visibleRange) || 0,
38577
- download: params.allowSave ? 1 : 0,
38578
- timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish,
38579
- media_type: Number(params.publishType) || 2,
38580
- images: [],
38581
- creation_id: ""
38582
- },
38583
- cover: {
38584
- poster: ""
38585
- },
38586
- mix: params.mix ? {
38587
- mix_id: params.mix.mix_id,
38588
- mix_order: params.mix.mix_order || 0
38589
- } : {},
38590
- anchor: {},
38591
- declare: {
38592
- user_declare_info: "{}"
38530
+ let currentStep = "初始化";
38531
+ try {
38532
+ currentStep = "验证账号信息";
38533
+ 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";
38534
+ const sessionidCookie = params.cookies.find((it)=>"msToken" === it.name)?.value;
38535
+ if (!sessionidCookie) return {
38536
+ code: 414,
38537
+ message: "账号数据异常,请重新绑定账号后重试。",
38538
+ data: ""
38539
+ };
38540
+ currentStep = "准备请求参数";
38541
+ const headers = {
38542
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
38543
+ origin: "https://creator.douyin.com",
38544
+ referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38545
+ Accept: "application/json, text/plain, */*",
38546
+ "Accept-Encoding": "gzip, deflate, br, zstd",
38547
+ "Content-Type": "application/json",
38548
+ pragma: "no-cache",
38549
+ "cache-control": "no-cache",
38550
+ "sec-ch-ua-platform": params.extraParam?.browserInfo?.["sec-ch-ua-platform"] || "",
38551
+ "sec-ch-ua": params.extraParam?.browserInfo?.["sec-ch-ua"] || "",
38552
+ "bd-ticket-guard-web-version": "2",
38553
+ "sec-ch-ua-mobile": "?0",
38554
+ "user-agent": userAgent,
38555
+ "sec-fetch-site": "same-origin",
38556
+ "sec-fetch-mode": "cors",
38557
+ "sec-fetch-dest": "empty",
38558
+ "accept-language": "zh-CN,zh;q=0.9",
38559
+ priority: "u=1, i"
38560
+ };
38561
+ const publishParams = {
38562
+ read_aid: "2906",
38563
+ aid: "1128",
38564
+ cookie_enabled: "true",
38565
+ screen_width: params.extraParam?.browserInfo.screen_width || "1920",
38566
+ screen_height: params.extraParam?.browserInfo.screen_height || "1080",
38567
+ browser_language: params.extraParam?.browserInfo.browser_language || "zh-CN",
38568
+ browser_platform: params.extraParam?.browserInfo.browser_platform || "Win32",
38569
+ browser_name: params.extraParam?.browserInfo.browser_name || "Mozilla",
38570
+ browser_version: userAgent,
38571
+ browser_online: "true",
38572
+ timezone_name: "Asia/Shanghai",
38573
+ support_h265: "1",
38574
+ msToken: params.cookies.find((e)=>"msToken" === e.name)?.value || "",
38575
+ a_bogus: ""
38576
+ };
38577
+ task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);
38578
+ const publishData = {
38579
+ item: {
38580
+ common: {
38581
+ text: params.content,
38582
+ text_extra: params.textExtra,
38583
+ activity: "[]",
38584
+ challenges: params.challengeIds || "[]",
38585
+ hashtag_source: "",
38586
+ mentions: "[]",
38587
+ music_id: params.musicId || "",
38588
+ music_end_time: 1000 * (params.musicDuration || 0),
38589
+ hot_sentence: params.hotSentence || "",
38590
+ visibility_type: Number(params.visibleRange) || 0,
38591
+ download: params.allowSave ? 1 : 0,
38592
+ timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish,
38593
+ media_type: Number(params.publishType) || 2,
38594
+ images: [],
38595
+ creation_id: ""
38596
+ },
38597
+ cover: {
38598
+ poster: ""
38599
+ },
38600
+ mix: params.mix ? {
38601
+ mix_id: params.mix.mix_id,
38602
+ mix_order: params.mix.mix_order || 0
38603
+ } : {},
38604
+ anchor: {},
38605
+ declare: {
38606
+ user_declare_info: "{}"
38607
+ }
38593
38608
  }
38594
- }
38595
- };
38596
- const args = [
38597
- {
38609
+ };
38610
+ const args = [
38611
+ {
38612
+ headers
38613
+ },
38614
+ task.logger,
38615
+ "",
38616
+ "",
38617
+ params.accountId,
38618
+ "douyin"
38619
+ ];
38620
+ const http = new Http({
38598
38621
  headers
38599
- },
38600
- task.logger,
38601
- "",
38602
- "",
38603
- params.accountId,
38604
- "douyin"
38605
- ];
38606
- const http = new Http({
38607
- headers
38608
- });
38609
- const proxyHttp = new Http(...args);
38610
- const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];
38611
- if (uploadedImgList.length > 0) publishData.item.common.images = uploadedImgList;
38612
- else {
38613
- const tmpCachePath = task.getTmpPath();
38614
- const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
38615
- if (params.coverImage) {
38616
- const cover = await uploader.uploadCover(params.coverImage);
38617
- if (cover) {
38618
- publishData.item.common.images.push({
38619
- uri: cover.uri,
38620
- width: cover.width,
38621
- height: cover.height
38622
- });
38623
- publishData.item.cover = {
38624
- poster: cover.uri
38622
+ });
38623
+ const proxyHttp = new Http(...args);
38624
+ const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];
38625
+ if (uploadedImgList.length > 0) publishData.item.common.images = uploadedImgList;
38626
+ else {
38627
+ const tmpCachePath = task.getTmpPath();
38628
+ const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
38629
+ if (params.coverImage) {
38630
+ const cover = await uploader.uploadCover(params.coverImage);
38631
+ if (cover) {
38632
+ publishData.item.common.images.push({
38633
+ uri: cover.uri,
38634
+ width: cover.width,
38635
+ height: cover.height
38636
+ });
38637
+ publishData.item.cover = {
38638
+ poster: cover.uri
38639
+ };
38640
+ }
38641
+ }
38642
+ if (params.banners && params.banners.length > 0) {
38643
+ const banners = params.banners.filter((i)=>i !== params.coverImage);
38644
+ const uploadResults = await uploader.uploadImages(banners);
38645
+ publishData.item.common.images = publishData.item.common.images.concat(uploadResults.map((result)=>({
38646
+ uri: result.uri,
38647
+ width: result.width,
38648
+ height: result.height
38649
+ })));
38650
+ }
38651
+ }
38652
+ publishData.item.common.creation_id = generateRandomString(8) + Date.now();
38653
+ let decision = null;
38654
+ proxyHttp.addResponseInterceptor((response)=>{
38655
+ task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
38656
+ task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
38657
+ decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
38658
+ if (needsVerification(decision)) {
38659
+ task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);
38660
+ return;
38661
+ }
38662
+ if (!response || !response.data) return;
38663
+ const responseData = response.data;
38664
+ if (response && responseData?.status_code && 0 !== responseData.status_code) {
38665
+ const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
38666
+ if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
38667
+ return {
38668
+ code: errorCode,
38669
+ message: responseData.status_msg || "文章发布异常,请稍后重试。",
38670
+ data: responseData
38625
38671
  };
38626
38672
  }
38673
+ });
38674
+ task._timerRecord.PrePublish = Date.now();
38675
+ if (MockPublish) {
38676
+ const data = "123456789";
38677
+ const message = `图文模拟发布成功 ${http.proxyInfo}`;
38678
+ await updateTaskState?.({
38679
+ state: types_TaskState.SUCCESS,
38680
+ result: {
38681
+ response: data
38682
+ }
38683
+ });
38684
+ return utils_response(0, message, data);
38627
38685
  }
38628
- if (params.banners && params.banners.length > 0) {
38629
- const banners = params.banners.filter((i)=>i !== params.coverImage);
38630
- const uploadResults = await uploader.uploadImages(banners);
38631
- publishData.item.common.images = publishData.item.common.images.concat(uploadResults.map((result)=>({
38632
- uri: result.uri,
38633
- width: result.width,
38634
- height: result.height
38635
- })));
38636
- }
38637
- }
38638
- publishData.item.common.creation_id = generateRandomString(8) + Date.now();
38639
- let decision = null;
38640
- proxyHttp.addResponseInterceptor((response)=>{
38641
- task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
38642
- task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
38643
- decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
38644
- if (needsVerification(decision)) {
38645
- task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);
38646
- return;
38686
+ let webProtectData;
38687
+ try {
38688
+ webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
38689
+ if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
38690
+ task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
38691
+ return utils_response(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
38692
+ }
38693
+ } catch (error) {
38694
+ task.logger.error(`解析 webProtectData 失败: ${error}`);
38695
+ return utils_response(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
38696
+ }
38697
+ let ticket = webProtectData.ticket;
38698
+ let ts_sign = webProtectData.ts_sign;
38699
+ const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
38700
+ if (serverDataCookie) try {
38701
+ const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
38702
+ if (decoded.ticket && decoded.ts_sign) {
38703
+ if (decoded.ticket !== ticket) task.logger.info("[douyinPublish] 使用 cookie 中的最新 ticket(web_protect 已过期)");
38704
+ ticket = decoded.ticket;
38705
+ ts_sign = decoded.ts_sign;
38706
+ }
38707
+ } catch (error) {
38708
+ task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
38647
38709
  }
38648
- if (!response || !response.data) return;
38649
- const responseData = response.data;
38650
- if (response && responseData?.status_code && 0 !== responseData.status_code) {
38651
- const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
38652
- if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
38653
- return {
38654
- code: errorCode,
38655
- message: responseData.status_msg || "文章发布异常,请稍后重试。",
38656
- data: responseData
38657
- };
38710
+ let ec_privateKey;
38711
+ try {
38712
+ ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
38713
+ if (!ec_privateKey) {
38714
+ task.logger.error("[douyinPublish] ec_privateKey 为空");
38715
+ return utils_response(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
38716
+ }
38717
+ } catch (error) {
38718
+ task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);
38719
+ return utils_response(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
38658
38720
  }
38659
- });
38660
- task._timerRecord.PrePublish = Date.now();
38661
- if (MockPublish) {
38662
- const data = "123456789";
38663
- const message = `图文模拟发布成功 ${http.proxyInfo}`;
38664
- await updateTaskState?.({
38665
- state: types_TaskState.SUCCESS,
38666
- result: {
38667
- response: data
38721
+ let certificate;
38722
+ try {
38723
+ certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
38724
+ if (!certificate) {
38725
+ task.logger.error("[douyinPublish] certificate 为空");
38726
+ return utils_response(414, "安全参数 certificate 缺失,请重新获取后重试", "");
38668
38727
  }
38669
- });
38670
- return utils_response(0, message, data);
38671
- }
38672
- let webProtectData;
38673
- try {
38674
- webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
38675
- if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
38676
- task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
38677
- return utils_response(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
38728
+ } catch (error) {
38729
+ task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);
38730
+ return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
38678
38731
  }
38679
- } catch (error) {
38680
- task.logger.error(`解析 webProtectData 失败: ${error}`);
38681
- return utils_response(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
38682
- }
38683
- let ticket = webProtectData.ticket;
38684
- let ts_sign = webProtectData.ts_sign;
38685
- const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
38686
- if (serverDataCookie) try {
38687
- const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
38688
- if (decoded.ticket && decoded.ts_sign) {
38689
- if (decoded.ticket !== ticket) task.logger.info("[douyinPublish] 使用 cookie 中的最新 ticket(web_protect 已过期)");
38690
- ticket = decoded.ticket;
38691
- ts_sign = decoded.ts_sign;
38732
+ const ree_public_key = webProtectData.client_cert.replace("pub.", "");
38733
+ let bdTicketGuardClientData;
38734
+ try {
38735
+ bdTicketGuardClientData = getBdV2({
38736
+ ticket,
38737
+ ts_sign: ts_sign,
38738
+ ec_privateKey: ec_privateKey,
38739
+ certificate: certificate,
38740
+ bd_ticket_guard_ree_public_key: ree_public_key
38741
+ });
38742
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38743
+ task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38744
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38745
+ }
38746
+ } catch (error) {
38747
+ task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38748
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38692
38749
  }
38693
- } catch (error) {
38694
- task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
38695
- }
38696
- let ec_privateKey;
38697
- try {
38698
- ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
38699
- if (!ec_privateKey) {
38700
- task.logger.error("[douyinPublish] ec_privateKey 为空");
38701
- return utils_response(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
38750
+ task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38751
+ const publishQuery = {
38752
+ ...publishParams,
38753
+ a_bogus: ""
38754
+ };
38755
+ const queryString = new URLSearchParams(publishQuery).toString();
38756
+ let aBogus;
38757
+ try {
38758
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38759
+ if (!aBogus || aBogus.length < 10) {
38760
+ task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38761
+ return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38762
+ }
38763
+ } catch (error) {
38764
+ task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38765
+ return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38702
38766
  }
38703
- } catch (error) {
38704
- task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);
38705
- return utils_response(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
38706
- }
38707
- let certificate;
38708
- try {
38709
- certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
38710
- if (!certificate) {
38711
- task.logger.error("[douyinPublish] certificate 为空");
38712
- return utils_response(414, "安全参数 certificate 缺失,请重新获取后重试", "");
38767
+ publishQuery.a_bogus = aBogus;
38768
+ const publishQueryParams = new URLSearchParams(publishQuery).toString();
38769
+ let csrfToken;
38770
+ try {
38771
+ csrfToken = mock_generateCsrfTokenAdvanced({
38772
+ cookies: params.cookies,
38773
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38774
+ method: "POST",
38775
+ userAgent
38776
+ });
38777
+ if (!csrfToken || csrfToken.length < 10) {
38778
+ task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38779
+ return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38780
+ }
38781
+ task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38782
+ } catch (error) {
38783
+ task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38784
+ return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38713
38785
  }
38714
- } catch (error) {
38715
- task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);
38716
- return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
38717
- }
38718
- const ree_public_key = webProtectData.client_cert.replace("pub.", "");
38719
- let bdTicketGuardClientData;
38720
- try {
38721
- bdTicketGuardClientData = getBdV2({
38722
- ticket,
38723
- ts_sign: ts_sign,
38724
- ec_privateKey: ec_privateKey,
38725
- certificate: certificate,
38726
- bd_ticket_guard_ree_public_key: ree_public_key
38727
- });
38728
- if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38729
- task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38730
- return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38786
+ let sessionDtrait;
38787
+ try {
38788
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38789
+ task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38790
+ } catch (error) {
38791
+ task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38792
+ return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38731
38793
  }
38732
- } catch (error) {
38733
- task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38734
- return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38735
- }
38736
- task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38737
- const publishQuery = {
38738
- ...publishParams,
38739
- a_bogus: ""
38740
- };
38741
- const queryString = new URLSearchParams(publishQuery).toString();
38742
- let aBogus;
38743
- try {
38744
- aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38745
- if (!aBogus || aBogus.length < 10) {
38746
- task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38747
- return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38794
+ task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
38795
+ ...headers,
38796
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38797
+ "Content-Type": "application/json",
38798
+ Accept: "application/json, text/plain, */*",
38799
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38800
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38801
+ "bd-ticket-guard-version": "2",
38802
+ "bd-ticket-guard-web-sign-type": "1",
38803
+ "bd-ticket-guard-web-version": "2",
38804
+ "x-secsdk-csrf-token": csrfToken,
38805
+ "x-tt-session-dtrait": sessionDtrait || ""
38806
+ })}`);
38807
+ task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38808
+ let publishResult;
38809
+ try {
38810
+ publishResult = await proxyHttp.api({
38811
+ method: "post",
38812
+ url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
38813
+ data: publishData,
38814
+ defaultErrorMsg: "发布异常,请稍后重试。",
38815
+ headers: {
38816
+ ...headers,
38817
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38818
+ "Content-Type": "application/json",
38819
+ Accept: "application/json, text/plain, */*",
38820
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38821
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38822
+ "bd-ticket-guard-version": "2",
38823
+ "bd-ticket-guard-web-sign-type": "1",
38824
+ "bd-ticket-guard-web-version": "2",
38825
+ "x-secsdk-csrf-token": csrfToken,
38826
+ "x-tt-session-dtrait": sessionDtrait || ""
38827
+ }
38828
+ }, {
38829
+ timeout: 60000,
38830
+ retries: 3,
38831
+ retryDelay: 2000
38832
+ });
38833
+ } catch (error) {
38834
+ const handledError = Http.handleApiError(error);
38835
+ const isProxyOrNetworkError = [
38836
+ 599,
38837
+ 500,
38838
+ 502,
38839
+ 503,
38840
+ 504
38841
+ ].includes(handledError.code);
38842
+ if (isProxyOrNetworkError) {
38843
+ const isProxyRequest = handledError.extra?.isProxyRequest === true;
38844
+ const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38845
+ const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38846
+ task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38847
+ await updateTaskState?.({
38848
+ state: types_TaskState.FAILED,
38849
+ error: message
38850
+ });
38851
+ return {
38852
+ code: 414,
38853
+ data: "",
38854
+ message
38855
+ };
38856
+ }
38857
+ throw error;
38748
38858
  }
38749
- } catch (error) {
38750
- task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38751
- return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38752
- }
38753
- publishQuery.a_bogus = aBogus;
38754
- const publishQueryParams = new URLSearchParams(publishQuery).toString();
38755
- let csrfToken;
38756
- try {
38757
- csrfToken = mock_generateCsrfTokenAdvanced({
38758
- cookies: params.cookies,
38759
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38760
- method: "POST",
38761
- userAgent
38762
- });
38763
- if (!csrfToken || csrfToken.length < 10) {
38764
- task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38765
- return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38859
+ task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
38860
+ if (needsVerification(decision)) {
38861
+ const details = [
38862
+ publishResult.status_msg,
38863
+ decision?.verify_title,
38864
+ decision?.verify_desc
38865
+ ].filter(Boolean).join(" ");
38866
+ const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38867
+ const safeDecision = safeSerialize(decision) ?? {};
38868
+ const mockData = {
38869
+ state: types_TaskState.FAILED,
38870
+ error: message,
38871
+ result: {
38872
+ ...safeDecision,
38873
+ data: safeDecision,
38874
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
38875
+ }
38876
+ };
38877
+ await updateTaskState?.(mockData);
38878
+ return {
38879
+ code: 0,
38880
+ data: mockData,
38881
+ message: "操作成功"
38882
+ };
38766
38883
  }
38767
- task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38768
- } catch (error) {
38769
- task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38770
- return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38771
- }
38772
- let sessionDtrait;
38773
- try {
38774
- sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38775
- task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38776
- } catch (error) {
38777
- task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38778
- return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38779
- }
38780
- task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
38781
- ...headers,
38782
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38783
- "Content-Type": "application/json",
38784
- Accept: "application/json, text/plain, */*",
38785
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38786
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38787
- "bd-ticket-guard-version": "2",
38788
- "bd-ticket-guard-web-sign-type": "1",
38789
- "bd-ticket-guard-web-version": "2",
38790
- "x-secsdk-csrf-token": csrfToken,
38791
- "x-tt-session-dtrait": sessionDtrait || ""
38792
- })}`);
38793
- task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38794
- let publishResult;
38795
- try {
38796
- publishResult = await proxyHttp.api({
38797
- method: "post",
38798
- url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
38799
- data: publishData,
38800
- defaultErrorMsg: "发布异常,请稍后重试。",
38801
- headers: {
38802
- ...headers,
38803
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38804
- "Content-Type": "application/json",
38805
- Accept: "application/json, text/plain, */*",
38806
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38807
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38808
- "bd-ticket-guard-version": "2",
38809
- "bd-ticket-guard-web-sign-type": "1",
38810
- "bd-ticket-guard-web-version": "2",
38811
- "x-secsdk-csrf-token": csrfToken,
38812
- "x-tt-session-dtrait": sessionDtrait || ""
38813
- }
38814
- }, {
38815
- timeout: 60000,
38816
- retries: 3,
38817
- retryDelay: 2000
38818
- });
38819
- } catch (error) {
38820
- const handledError = Http.handleApiError(error);
38821
- const isProxyOrNetworkError = [
38822
- 599,
38823
- 500,
38824
- 502,
38825
- 503,
38826
- 504
38827
- ].includes(handledError.code);
38828
- if (isProxyOrNetworkError) {
38829
- const isProxyRequest = handledError.extra?.isProxyRequest === true;
38830
- const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38831
- const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38832
- task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38884
+ reportLogger({
38885
+ token: params.huiwenToken || "",
38886
+ enverionment: task.enverionment || "development",
38887
+ postId: params.articleId,
38888
+ eip: proxyHttp.proxyInfo,
38889
+ proxyIp: params.localIP,
38890
+ accountId: params.accountId,
38891
+ uid: params.uid,
38892
+ platform: "douyin",
38893
+ publishParams: publishData
38894
+ });
38895
+ task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
38896
+ const isSuccess = 0 === publishResult.status_code;
38897
+ const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38898
+ const data = isSuccess ? publishResult.item_id || "" : "";
38899
+ if (!isSuccess) {
38900
+ const safeDecision = safeSerialize(decision) ?? {};
38833
38901
  await updateTaskState?.({
38834
38902
  state: types_TaskState.FAILED,
38835
- error: message
38903
+ error: message,
38904
+ result: {
38905
+ ...safeDecision,
38906
+ data: safeDecision,
38907
+ uploadedImgList: JSON.stringify(publishData.item.common.images)
38908
+ }
38836
38909
  });
38837
38910
  return {
38838
38911
  code: 414,
38839
- data: "",
38912
+ data: safeDecision,
38840
38913
  message
38841
38914
  };
38842
38915
  }
38843
- throw error;
38844
- }
38845
- task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
38846
- if (needsVerification(decision)) {
38847
- const details = [
38848
- publishResult.status_msg,
38849
- decision?.verify_title,
38850
- decision?.verify_desc
38851
- ].filter(Boolean).join(" ");
38852
- const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38853
- let decisionObj = {};
38854
- if (decision) decisionObj = decision;
38855
- const mockData = {
38856
- state: types_TaskState.FAILED,
38857
- error: message,
38916
+ await updateTaskState?.({
38917
+ state: types_TaskState.SUCCESS,
38858
38918
  result: {
38859
- ...decisionObj,
38860
- data: decision,
38861
- uploadedImgList: JSON.stringify(publishData.item.common.images)
38919
+ response: data
38862
38920
  }
38863
- };
38864
- await updateTaskState?.(mockData);
38865
- return {
38866
- code: 0,
38867
- data: mockData,
38868
- message: "操作成功"
38869
- };
38870
- }
38871
- reportLogger({
38872
- token: params.huiwenToken || "",
38873
- enverionment: task.enverionment || "development",
38874
- postId: params.articleId,
38875
- eip: proxyHttp.proxyInfo,
38876
- proxyIp: params.localIP,
38877
- accountId: params.accountId,
38878
- uid: params.uid,
38879
- platform: "douyin",
38880
- publishParams: publishData
38881
- });
38882
- task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
38883
- const isSuccess = 0 === publishResult.status_code;
38884
- const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38885
- const data = isSuccess ? publishResult.item_id || "" : "";
38886
- if (!isSuccess) {
38887
- let decisionObj = {};
38888
- if (decision) decisionObj = decision;
38921
+ });
38922
+ return utils_response(isSuccess ? 0 : 414, message, data);
38923
+ } catch (error) {
38924
+ const handledError = Http.handleApiError(error);
38925
+ const errorMsg = handledError.message || "发布失败";
38926
+ const errorCode = handledError.code || 500;
38927
+ task.logger.error(`[douyinPublish] 发布流程异常 (步骤: ${currentStep}): ${errorMsg}`, stringifyError(error), handledError.extra);
38889
38928
  await updateTaskState?.({
38890
38929
  state: types_TaskState.FAILED,
38891
- error: message,
38892
- result: {
38893
- ...decisionObj,
38894
- data: decision,
38895
- uploadedImgList: JSON.stringify(publishData.item.common.images)
38896
- }
38930
+ error: `${currentStep}失败: ${errorMsg}`
38897
38931
  });
38898
- return {
38899
- code: 414,
38900
- data,
38901
- message
38902
- };
38932
+ return utils_response(errorCode, errorMsg, "");
38903
38933
  }
38904
- await updateTaskState?.({
38905
- state: types_TaskState.SUCCESS,
38906
- result: {
38907
- response: data
38908
- }
38909
- });
38910
- return utils_response(isSuccess ? 0 : 414, message, data);
38911
38934
  };
38912
38935
  const douyinPublish_rpa_rpaAction = async (task, params)=>{
38913
38936
  const commonCookies = {
@@ -43683,7 +43706,9 @@ var __webpack_exports__ = {};
43683
43706
  task.logger.info("[shipinhaoPublish] 开始执行视频号发布 - Mock API 方式");
43684
43707
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
43685
43708
  if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId) return utils_response(400, "fingerPrintDeviceId和aId 不能为空", "");
43709
+ let currentStep = "初始化";
43686
43710
  try {
43711
+ currentStep = "解析认证信息";
43687
43712
  const cookieString = params.cookies.map((c)=>`${c.name}=${c.value}`).join("; ");
43688
43713
  const fingerPrintDeviceId = params.extraParam.fingerPrintDeviceId;
43689
43714
  const aId = params.extraParam.aId;
@@ -43704,8 +43729,10 @@ var __webpack_exports__ = {};
43704
43729
  headers
43705
43730
  });
43706
43731
  const proxyHttp = new Http(...args);
43732
+ currentStep = "验证发布参数";
43707
43733
  if (!params.banners || 0 === params.banners.length) return utils_response(400, "至少需要一张图片", "");
43708
43734
  const images = params.banners.slice(0, 18).filter((img)=>"string" == typeof img);
43735
+ currentStep = "获取用户信息";
43709
43736
  task.logger.info("[shipinhaoPublish] 获取用户信息...");
43710
43737
  console.log("cookieString", cookieString);
43711
43738
  const userInfo = await mock_getUserInfo(cookieString, http);
@@ -43716,6 +43743,7 @@ var __webpack_exports__ = {};
43716
43743
  }
43717
43744
  const finderUsername = userInfo.data.finderUser.finderUsername;
43718
43745
  console.log(finderUsername);
43746
+ currentStep = "获取上传认证密钥";
43719
43747
  task.logger.info("[shipinhaoPublish] 获取上传认证密钥...");
43720
43748
  const authKeyResponse = await getUploadAuthKey(cookieString, finderUsername, http);
43721
43749
  if (0 !== authKeyResponse.errCode || !authKeyResponse.data?.authKey) return utils_response(authKeyResponse.errCode || 500, `获取上传认证参数失败: ${authKeyResponse.errMsg}`, "");
@@ -43723,10 +43751,12 @@ var __webpack_exports__ = {};
43723
43751
  const uin = authKeyResponse.data.uin;
43724
43752
  if (!uin) return utils_response(500, "获取用户 uin 失败", "");
43725
43753
  const taskId = String(generateUUID());
43754
+ currentStep = "上传图片";
43726
43755
  task.logger.info(`[shipinhaoPublish] 开始上传 ${images.length} 张图片...`);
43727
43756
  const uploadedImages = [];
43728
43757
  for(let i = 0; i < images.length; i++){
43729
- task.logger.info(`[shipinhaoPublish] 上传图片 ${i + 1}/${images.length}...`);
43758
+ currentStep = `上传图片 ${i + 1}/${images.length}`;
43759
+ task.logger.info(`[shipinhaoPublish] ${currentStep}...`);
43730
43760
  const uploadResult = await uploadImageComplete(images[i], taskId, finderUsername, uin, authKey, http);
43731
43761
  console.log(JSON.stringify(uploadResult));
43732
43762
  if (!uploadResult.DownloadURL) return utils_response(500, `图片上传失败: ${uploadResult.errMsg}`, "");
@@ -43743,6 +43773,7 @@ var __webpack_exports__ = {};
43743
43773
  urlCdnTaskId: ""
43744
43774
  });
43745
43775
  }
43776
+ currentStep = "发布图文内容";
43746
43777
  task.logger.info("[shipinhaoPublish] 正在发布...");
43747
43778
  const topicNames = params.topic || void 0;
43748
43779
  const addressInfo = params.address ? {
@@ -43829,9 +43860,15 @@ var __webpack_exports__ = {};
43829
43860
  });
43830
43861
  return utils_response(resultCode || 500, errorMessage, "");
43831
43862
  } catch (error) {
43832
- const errorMsg = error instanceof Error ? error.message : "发布失败";
43833
- task.logger.error(`[shipinhaoPublish] 发布异常: ${errorMsg}`);
43834
- return utils_response(500, errorMsg, "");
43863
+ const handledError = Http.handleApiError(error);
43864
+ const errorMsg = handledError.message || "发布失败,请稍后重试";
43865
+ const errorCode = handledError.code || 500;
43866
+ task.logger.error(`[shipinhaoPublish] 发布流程异常: ${errorMsg}`, stringifyError(error), handledError.extra);
43867
+ await updateTaskState?.({
43868
+ state: types_TaskState.FAILED,
43869
+ error: errorMsg
43870
+ });
43871
+ return utils_response(errorCode, errorMsg, "");
43835
43872
  }
43836
43873
  };
43837
43874
  const shipinhaoPublish_rpa_rpaAction = async (task, params)=>{
@@ -50337,7 +50374,7 @@ var __webpack_exports__ = {};
50337
50374
  likeNumYesterday: classic_schemas_number().nullable(),
50338
50375
  commentNumYesterday: classic_schemas_number().nullable()
50339
50376
  });
50340
- classic_schemas_object({
50377
+ const douyinConfigDataSchema = classic_schemas_object({
50341
50378
  fansNum: classic_schemas_number(),
50342
50379
  favedNum: classic_schemas_number(),
50343
50380
  fansNumLastWeek: classic_schemas_number(),
@@ -50347,7 +50384,7 @@ var __webpack_exports__ = {};
50347
50384
  shareNumLastWeek: classic_schemas_number(),
50348
50385
  visitNumLastWeek: classic_schemas_number()
50349
50386
  });
50350
- classic_schemas_object({
50387
+ const shipinhaoConfigDataSchema = classic_schemas_object({
50351
50388
  fansNum: classic_schemas_number(),
50352
50389
  feedsCount: classic_schemas_number(),
50353
50390
  fansNumYesterday: classic_schemas_number().nullable(),
@@ -50644,4 +50681,4 @@ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_targe
50644
50681
  });
50645
50682
 
50646
50683
  //# sourceMappingURL=bundle.js.map
50647
- //# debugId=b2126d25-6ff1-5818-8cdb-7b95d8c6627c
50684
+ //# debugId=029aefb0-580d-5097-84ee-1a7045670fcb