@iflyrpa/actions 1.2.7 → 1.2.8

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.
@@ -0,0 +1,7 @@
1
+ import { type CommonAction } from "@iflyrpa/share";
2
+ import type { ActiomCommonParams, Xiaohongshu } from "../../types";
3
+ export interface SearchXiaohongshuTopicListParams extends ActiomCommonParams {
4
+ searchValue: string;
5
+ }
6
+ export type PublishAction = CommonAction<SearchXiaohongshuTopicListParams, Xiaohongshu.Topic[]>;
7
+ export declare const searchXiaohongshuTopicList: PublishAction;
@@ -20,6 +20,7 @@ export interface XiaohongshuPublishParams extends ActiomCommonParams {
20
20
  content: string;
21
21
  address?: Xiaohongshu.Location;
22
22
  selfDeclaration?: SelfDeclaration;
23
+ topic?: Xiaohongshu.Topic[];
23
24
  visibleRange: "public" | "private";
24
25
  isImmediatelyPublish?: boolean;
25
26
  scheduledPublish?: string;
package/dist/bundle.js CHANGED
@@ -13583,6 +13583,36 @@ var __webpack_exports__ = {};
13583
13583
  return success([]);
13584
13584
  }
13585
13585
  };
13586
+ const searchXiaohongshuTopicList = async (_task, params)=>{
13587
+ const http = new Http({
13588
+ headers: {
13589
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
13590
+ referer: "https://creator.xiaohongshu.com",
13591
+ origin: "https://creator.xiaohongshu.com"
13592
+ }
13593
+ });
13594
+ try {
13595
+ const result = await http.api({
13596
+ method: "post",
13597
+ url: "https://edith.xiaohongshu.com/web_api/sns/v1/search/topic",
13598
+ data: {
13599
+ keyword: params.searchValue,
13600
+ suggest_topic_request: {
13601
+ title: "",
13602
+ desc: `#${params.searchValue}`
13603
+ },
13604
+ page: {
13605
+ page_size: 20,
13606
+ page: 1
13607
+ }
13608
+ },
13609
+ defaultErrorMsg: "话题搜索异常,请稍后重试。"
13610
+ });
13611
+ return success(0 === result.code ? result.data.topic_info_dtos : [], '获取话题成功');
13612
+ } catch (error) {
13613
+ return success([]);
13614
+ }
13615
+ };
13586
13616
  const mock_errnoMap = {
13587
13617
  20004020: "图片上传异常,请重新绑定账号后同步。",
13588
13618
  7115: "正文图片和封面图片推荐jpg、png格式。",
@@ -15436,7 +15466,9 @@ var __webpack_exports__ = {};
15436
15466
  }
15437
15467
  }
15438
15468
  const xiaohongshuPublish_mock_errnoMap = {
15439
- 903: "账户已登出,需重新登陆重试!"
15469
+ 915: "所属C端账号手机号被修改,请重新登录",
15470
+ 903: "账户已登出,需重新登陆重试!",
15471
+ 902: "登录已过期,请重新登录!"
15440
15472
  };
15441
15473
  const xsEncrypt = new XsEncrypt();
15442
15474
  const xiaohongshuPublish_mock_mockAction = async (task, params)=>{
@@ -15506,13 +15538,34 @@ var __webpack_exports__ = {};
15506
15538
  };
15507
15539
  };
15508
15540
  const coverInfos = await Promise.all(params.banners.map((it, idx)=>uploadFile(it, idx)));
15541
+ if (params.topic && params.topic.length > 0) await Promise.all(params.topic.map(async (topic)=>{
15542
+ if (!topic["id"]) {
15543
+ const topicData = {
15544
+ topic_names: topic["name"]
15545
+ };
15546
+ const topicDataStr = xsEncrypt.dumps(topicData);
15547
+ const publishXt = Date.now().toString();
15548
+ const publishXs = await xsEncrypt.encryptXs(`/web_api/sns/capa/postgw/topic/batch_customized${topicDataStr}`, a1Cookie, publishXt);
15549
+ let createTopic = await http.api({
15550
+ method: "POST",
15551
+ url: "https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized",
15552
+ headers: {
15553
+ "x-s": publishXs,
15554
+ "x-t": publishXt
15555
+ },
15556
+ data: topicData,
15557
+ defaultErrorMsg: "话题创建异常,请稍后重试。"
15558
+ });
15559
+ Object.assign(topic, createTopic.data.topic_infos[0]);
15560
+ }
15561
+ }));
15509
15562
  const publishData = {
15510
15563
  common: {
15511
15564
  ats: [],
15512
15565
  biz_relations: [],
15513
15566
  desc: params?.content,
15514
15567
  goods_info: {},
15515
- hash_tag: [],
15568
+ hash_tag: params.topic || [],
15516
15569
  note_id: "",
15517
15570
  source: JSON.stringify({
15518
15571
  type: "web",
@@ -15630,6 +15683,7 @@ var __webpack_exports__ = {};
15630
15683
  '/api/galaxy/v2/creator/activity_center/list',
15631
15684
  '/web_api/sns/v5/creator/topic/template/list',
15632
15685
  '/web_api/sns/v5/creator/file/encryption',
15686
+ '/web_api/sns/capa/postgw/topic/batch_customized',
15633
15687
  '/web_api/sns/v2/note'
15634
15688
  ];
15635
15689
  await page.route('**', async (route, request)=>{
@@ -15651,11 +15705,11 @@ var __webpack_exports__ = {};
15651
15705
  });
15652
15706
  return;
15653
15707
  }
15654
- const isNoteRequest = urlObj.pathname.includes(interceptUrls[4]);
15708
+ const isNoteRequest = urlObj.pathname.includes(interceptUrls[5]);
15655
15709
  const xs = await (isNoteRequest ? (async ()=>{
15656
15710
  const publishData = JSON.parse(request.postData() || "");
15657
15711
  const publishDataStr = rpa_xsEncrypt.dumps(publishData);
15658
- return rpa_xsEncrypt.encryptXs(interceptUrls[4] + publishDataStr, a1Cookie, xt);
15712
+ return rpa_xsEncrypt.encryptXs(interceptUrls[5] + publishDataStr, a1Cookie, xt);
15659
15713
  })() : rpa_xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt));
15660
15714
  const newHeaders = {
15661
15715
  ...request.headers(),
@@ -15709,7 +15763,7 @@ var __webpack_exports__ = {};
15709
15763
  data: page.url()
15710
15764
  };
15711
15765
  }
15712
- await page.locator("#content-area .menu-container .publish-video a").click();
15766
+ await page.locator("#content-area .menu-container .publish-video .btn").click();
15713
15767
  await page.locator('.creator-container .header .creator-tab:not([style*="-9999px"]) .title').filter({
15714
15768
  hasText: /^上传图文$/
15715
15769
  }).click();
@@ -15726,7 +15780,15 @@ var __webpack_exports__ = {};
15726
15780
  await titleInstance.fill(params.title);
15727
15781
  const descInstance = page.locator(".editor-container #quillEditor .ql-editor");
15728
15782
  await descInstance.click();
15729
- await descInstance.fill(params.content);
15783
+ await descInstance.pressSequentially(params.content.replace(/#.*?\[.*?]\#/g, ""));
15784
+ if (params.topic && params.topic.length > 0) for (const it of params.topic){
15785
+ await descInstance.pressSequentially(`#${it["name"]}`);
15786
+ await page.locator('.ql-mention-loading').waitFor({
15787
+ state: 'detached'
15788
+ });
15789
+ await page.waitForTimeout(1000);
15790
+ await page.locator('#quill-mention-item-0 .item-view-num').click();
15791
+ }
15730
15792
  const container = page.locator(".creator-container .content .scroll-content");
15731
15793
  await container.focus();
15732
15794
  await page.mouse.wheel(0, 500);
@@ -15735,8 +15797,8 @@ var __webpack_exports__ = {};
15735
15797
  }), params.address.name);
15736
15798
  if (params.selfDeclaration) {
15737
15799
  await page.locator(".media-settings .flexbox").filter({
15738
- hasText: "自主声明"
15739
- }).locator(".d-select-wrapper").click();
15800
+ hasText: "内容类型声明"
15801
+ }).locator(".d-select-placeholder").click();
15740
15802
  const poperInstance = await getPoperInstance();
15741
15803
  const selfDeclarationInstance = poperInstance.locator(".d-options .d-option");
15742
15804
  if ("fictional-rendition" === params.selfDeclaration.type) await selfDeclarationInstance.filter({
@@ -15813,7 +15875,7 @@ var __webpack_exports__ = {};
15813
15875
  return executeAction(xiaohongshuPublish_mock_mockAction, xiaohongshuPublish_rpa_rpaAction)(task, params);
15814
15876
  };
15815
15877
  var package_namespaceObject = {
15816
- i8: "1.2.6"
15878
+ i8: "1.2.7"
15817
15879
  };
15818
15880
  class Action {
15819
15881
  constructor(task){
@@ -15850,6 +15912,9 @@ var __webpack_exports__ = {};
15850
15912
  xiaohongshuPublish(params) {
15851
15913
  return this.bindTask(xiaohongshuPublish, params);
15852
15914
  }
15915
+ searchXiaohongshuTopicList(params) {
15916
+ return this.bindTask(searchXiaohongshuTopicList, params);
15917
+ }
15853
15918
  searchXiaohongshuLocation(params) {
15854
15919
  return this.bindTask(searchXiaohongshuLocation, params);
15855
15920
  }