@iflyrpa/actions 1.2.13 → 1.2.14-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,519 @@
1
1
  var __webpack_modules__ = {
2
+ "./src/actions/searchAccountInfo/index.ts": function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3
+ "use strict";
4
+ __webpack_require__.d(__webpack_exports__, {
5
+ A: ()=>SearchAccountInfo
6
+ });
7
+ var _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("@iflyrpa/share");
8
+ var _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__);
9
+ var _utils_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/utils/index.ts");
10
+ var _utils_http__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/utils/http.ts");
11
+ var _utils_xhsXsEncrypt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/utils/xhsXsEncrypt.ts");
12
+ const errorResponse = (message, code = 500)=>({
13
+ code,
14
+ message,
15
+ data: null
16
+ });
17
+ async function getToutiaoData(params) {
18
+ try {
19
+ const http = new _utils_http__WEBPACK_IMPORTED_MODULE_2__.e({
20
+ headers: {
21
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
22
+ referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
23
+ }
24
+ });
25
+ const [totalData, fansDataYesterday, contentDataYesterday] = await Promise.all([
26
+ http.api({
27
+ method: "get",
28
+ url: "https://mp.toutiao.com/mp/fe_api/home/merge_v2",
29
+ params: {
30
+ app_id: 1231
31
+ }
32
+ }),
33
+ http.api({
34
+ method: "get",
35
+ url: "https://mp.toutiao.com/mp/agw/statistic/v2/fans/latest_stat",
36
+ params: {
37
+ app_id: 1231
38
+ }
39
+ }),
40
+ http.api({
41
+ method: "get",
42
+ url: "https://mp.toutiao.com/mp/agw/statistic/v2/content_stat",
43
+ params: {
44
+ type: 0,
45
+ app_id: 1231
46
+ }
47
+ })
48
+ ]);
49
+ const ttData = {
50
+ fansNum: Number(totalData.data.statistic.data.total_subscribe_count),
51
+ fansNumYesterday: fansDataYesterday.fans_stat.change_count,
52
+ readNum: Number(totalData.data.statistic.data.total_read_play_count),
53
+ incomeNum: totalData.data.statistic.data.total_income,
54
+ incomeNumYesterday: totalData.data.statistic.data.yesterday_income,
55
+ showNumYesterday: contentDataYesterday.author_stat.consume_data.impression_count,
56
+ readNumYesterday: contentDataYesterday.author_stat.consume_data.go_detail_count,
57
+ likeNumYesterday: contentDataYesterday.author_stat.interaction_data.digg_count,
58
+ commentNumYesterday: contentDataYesterday.author_stat.interaction_data.comment_count
59
+ };
60
+ return (0, _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__.success)(ttData, "头条号粉丝数据获取成功!");
61
+ } catch (error) {
62
+ return errorResponse(error instanceof Error ? error.message : "头条号数据获取失败");
63
+ }
64
+ }
65
+ async function getXiaohongshuData(params) {
66
+ try {
67
+ const a1Cookie = params.cookies.find((it)=>"a1" === it.name)?.value;
68
+ if (!a1Cookie) return errorResponse("账号数据异常,请重新绑定账号后重试。", 200);
69
+ const http = new _utils_http__WEBPACK_IMPORTED_MODULE_2__.e({
70
+ headers: {
71
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
72
+ referer: "https://creator.xiaohongshu.com",
73
+ origin: "https://creator.xiaohongshu.com"
74
+ }
75
+ });
76
+ const xsEncrypt = new _utils_xhsXsEncrypt__WEBPACK_IMPORTED_MODULE_3__.H();
77
+ const xt = Date.now().toString();
78
+ const sevenDataUrl = "/api/galaxy/v2/creator/datacenter/account/base";
79
+ const xs = await xsEncrypt.encryptXs(sevenDataUrl, a1Cookie, xt);
80
+ const [overAllData, sevenData] = await Promise.all([
81
+ http.api({
82
+ method: "get",
83
+ url: "https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info"
84
+ }),
85
+ http.api({
86
+ method: "get",
87
+ baseURL: "https://creator.xiaohongshu.com",
88
+ url: sevenDataUrl,
89
+ headers: {
90
+ "x-s": xs,
91
+ "x-t": xt
92
+ }
93
+ })
94
+ ]);
95
+ const xhsData = {
96
+ fansNum: overAllData.data.fans_count,
97
+ favedNum: overAllData.data.faved_count,
98
+ watchNumLastWeek: sevenData.data.seven.view_count,
99
+ likeNumLastWeek: sevenData.data.seven.like_count,
100
+ collectNumLastWeek: sevenData.data.seven.collect_count,
101
+ commentNumLastWeek: sevenData.data.seven.comment_count,
102
+ fansNumLastWeek: sevenData.data.seven.rise_fans_count,
103
+ fansNumYesterday: sevenData.data.seven.rise_fans_list[0].count
104
+ };
105
+ return (0, _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__.success)(xhsData, "小红书粉丝数据获取成功!");
106
+ } catch (error) {
107
+ return errorResponse(error instanceof Error ? error.message : "小红书数据获取失败");
108
+ }
109
+ }
110
+ async function getWeixinData(params) {
111
+ try {
112
+ const { token } = params;
113
+ if (!token) return errorResponse("缺少token", 200);
114
+ const http = new _utils_http__WEBPACK_IMPORTED_MODULE_2__.e({
115
+ headers: {
116
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";")
117
+ }
118
+ });
119
+ const massRandomIDHtml = await http.api({
120
+ method: "get",
121
+ url: "https://mp.weixin.qq.com/misc/appmsganalysis?action=report&token=1900237878&lang=zh_CN",
122
+ params: {
123
+ token,
124
+ lang: "zh_CN",
125
+ action: "report"
126
+ }
127
+ });
128
+ const massRandomIDReg = massRandomIDHtml.match(/mass_all\.([a-z0-9]+)\.js/);
129
+ const massRandomID = massRandomIDReg ? massRandomIDReg[1] : "";
130
+ const [readInfo, fansInfoHtml] = await Promise.all([
131
+ http.api({
132
+ method: "get",
133
+ url: `https://res.wx.qq.com/mpres/zh_CN/htmledition/pages/statistics/mass_all/mass_all.${massRandomID}.js`
134
+ }),
135
+ http.api({
136
+ method: "get",
137
+ url: "https://mp.weixin.qq.com/misc/useranalysis",
138
+ params: {
139
+ token,
140
+ lang: "zh_CN"
141
+ }
142
+ })
143
+ ]);
144
+ const regex = /(readAllList|shareAllList|completeAllList):\s*(\[[^\]]+\])/g;
145
+ let match;
146
+ const arrays = {};
147
+ while(null !== (match = regex.exec(readInfo)))arrays[match[1]] = JSON.parse(match[2]);
148
+ const readAllList = arrays.readAllList || [];
149
+ const shareAllList = arrays.shareAllList || [];
150
+ const fansInfoReg = fansInfoHtml.match(/window\.CGI_DATA\['pages\/statistics\/user_statistics'\]\s*=\s*(\{[\s\S]*?\});/);
151
+ if (!fansInfoReg) return errorResponse("未找到粉丝信息", 200);
152
+ const fansInfo = eval("(" + fansInfoReg[1] + ")");
153
+ const yesterday = _utils_index__WEBPACK_IMPORTED_MODULE_1__.Tx.format(new Date().setDate(new Date().getDate() - 1), "yyyy-MM-dd");
154
+ const yesterdayFansInfo = fansInfo.list[0]?.list.find((item)=>item.date === yesterday);
155
+ if (!yesterdayFansInfo) return errorResponse("未找到粉丝数", 200);
156
+ const wxData = {
157
+ fansNum: yesterdayFansInfo.cumulate_user,
158
+ fansNumYesterday: yesterdayFansInfo.new_user - yesterdayFansInfo.cancel_user,
159
+ readNumYesterday: readAllList[0] || 0,
160
+ shareNumYesterday: shareAllList[0] || 0
161
+ };
162
+ return (0, _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__.success)(wxData, "微信粉丝数据获取成功!");
163
+ } catch (error) {
164
+ return errorResponse(error instanceof Error ? error.message : "微信数据获取失败");
165
+ }
166
+ }
167
+ async function getBaijiahaoData(params) {
168
+ try {
169
+ const { token } = params;
170
+ if (!token) return errorResponse("缺少token", 200);
171
+ const http = new _utils_http__WEBPACK_IMPORTED_MODULE_2__.e({
172
+ headers: {
173
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
174
+ token: String(token),
175
+ Referer: "https://baijiahao.baidu.com/builder/rc/home"
176
+ }
177
+ });
178
+ const yesterday = _utils_index__WEBPACK_IMPORTED_MODULE_1__.Tx.format(new Date().setDate(new Date().getDate() - 1), "yyyyMMdd");
179
+ const [fansData, readData, incomeData, yesterdayData] = await Promise.all([
180
+ http.api({
181
+ method: "get",
182
+ url: "https://baijiahao.baidu.com/pcui/home/index"
183
+ }),
184
+ http.api({
185
+ method: "get",
186
+ url: "https://baijiahao.baidu.com/author/eco/statistic/getauthorhistory"
187
+ }),
188
+ http.api({
189
+ method: "get",
190
+ url: "https://baijiahao.baidu.com/author/eco/income4/homepageincome"
191
+ }),
192
+ http.api({
193
+ method: "get",
194
+ url: `https://baijiahao.baidu.com/author/eco/statistics/appStatistic?type=all&is_yesterday=false&start_day=${yesterday}&end_day=${yesterday}&stat=0`
195
+ })
196
+ ]);
197
+ const bjhData = {
198
+ fansNum: fansData.data.coreData.fansCount,
199
+ fansNumYesterday: yesterdayData.data.data.fans_increase,
200
+ readNum: readData.data.total.view_count,
201
+ incomeNum: incomeData.data.all_income.total_income,
202
+ incomeNumYesterday: incomeData.data.all_income.yesterday_income,
203
+ recommendNumYesterday: yesterdayData.data.data.recommend_count,
204
+ readNumYesterday: yesterdayData.data.data.view_count,
205
+ likeNumYesterday: yesterdayData.data.data.likes_count,
206
+ commentNumYesterday: yesterdayData.data.data.comment_count
207
+ };
208
+ return (0, _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__.success)(bjhData, "百家号粉丝数据获取成功!");
209
+ } catch (error) {
210
+ return errorResponse(error instanceof Error ? error.message : "百家号数据获取失败");
211
+ }
212
+ }
213
+ const SearchAccountInfo = async (_task, params)=>{
214
+ const { platform } = params;
215
+ switch(platform){
216
+ case "toutiao":
217
+ return getToutiaoData(params);
218
+ case "xiaohongshu":
219
+ return getXiaohongshuData(params);
220
+ case "weixin":
221
+ return getWeixinData(params);
222
+ case "baijiahao":
223
+ return getBaijiahaoData(params);
224
+ default:
225
+ return (0, _iflyrpa_share__WEBPACK_IMPORTED_MODULE_0__.success)(null, "暂不支持该平台");
226
+ }
227
+ };
228
+ },
229
+ "./src/utils/http.ts": function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
230
+ "use strict";
231
+ __webpack_require__.d(__webpack_exports__, {
232
+ e: ()=>Http
233
+ });
234
+ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("axios");
235
+ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
236
+ class Http {
237
+ static handleApiError(error) {
238
+ if (error && "object" == typeof error && "code" in error && "message" in error) return error;
239
+ return {
240
+ code: 500,
241
+ message: "",
242
+ data: error
243
+ };
244
+ }
245
+ constructor(config){
246
+ this.apiClient = axios__WEBPACK_IMPORTED_MODULE_0___default().create(config);
247
+ }
248
+ addResponseInterceptor(findError) {
249
+ this.apiClient.interceptors.response.use((response)=>{
250
+ const error = findError(response);
251
+ if (error) return Promise.reject(Object.assign(error, {
252
+ extra: {
253
+ method: response.config.method,
254
+ url: response.config.url
255
+ }
256
+ }));
257
+ return response;
258
+ }, (error)=>{
259
+ const errorResponse = {
260
+ code: error.response?.status || 500,
261
+ message: error.message || "",
262
+ data: error.response?.data,
263
+ extra: {
264
+ method: error.config?.method,
265
+ url: error.config?.url
266
+ }
267
+ };
268
+ if (error.response?.data) {
269
+ if ("object" == typeof error.response.data) {
270
+ const serverError = error.response.data;
271
+ if (serverError.message) errorResponse.message = serverError.message;
272
+ errorResponse.data = serverError;
273
+ }
274
+ }
275
+ return Promise.reject(errorResponse);
276
+ });
277
+ }
278
+ async api(config) {
279
+ try {
280
+ const response = await this.apiClient(config);
281
+ return response.data;
282
+ } catch (error) {
283
+ return Promise.reject(Http.handleApiError(error));
284
+ }
285
+ }
286
+ }
287
+ },
288
+ "./src/utils/index.ts": function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
289
+ "use strict";
290
+ __webpack_require__.d(__webpack_exports__, {
291
+ hc: ()=>parseUrlQueryString,
292
+ I: ()=>replaceImgSrc,
293
+ E_: ()=>extractImgTag,
294
+ i9: ()=>getRandomInRange,
295
+ f8: ()=>PopupListener,
296
+ qN: ()=>copyHtmlToClipboard,
297
+ Tx: ()=>TimeFormatter,
298
+ Tb: ()=>defaultParams,
299
+ n: ()=>stringifyError,
300
+ H8: ()=>getFileState,
301
+ jo: ()=>executeAction,
302
+ e0: ()=>calculateCropCoordinates
303
+ });
304
+ var external_node_fs_ = __webpack_require__("node:fs");
305
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_);
306
+ var external_node_path_ = __webpack_require__("node:path");
307
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_);
308
+ const external_dom_serializer_namespaceObject = require("dom-serializer");
309
+ var external_dom_serializer_default = /*#__PURE__*/ __webpack_require__.n(external_dom_serializer_namespaceObject);
310
+ const external_domhandler_namespaceObject = require("domhandler");
311
+ const external_htmlparser2_namespaceObject = require("htmlparser2");
312
+ const external_mime_types_namespaceObject = require("mime-types");
313
+ var external_mime_types_default = /*#__PURE__*/ __webpack_require__.n(external_mime_types_namespaceObject);
314
+ var http = __webpack_require__("./src/utils/http.ts");
315
+ function getRandomInRange(min, max) {
316
+ return Math.floor(Math.random() * (max - min + 1)) + min;
317
+ }
318
+ const getFileState = (filePath)=>{
319
+ const filename = external_node_path_default().basename(filePath);
320
+ const fileType = external_mime_types_default().lookup(filePath);
321
+ const stats = external_node_fs_default().statSync(filePath);
322
+ const fileSize = stats.size;
323
+ const lastModifiedDate = stats.mtime;
324
+ return {
325
+ name: filename,
326
+ type: fileType,
327
+ size: fileSize,
328
+ lastModifiedDate: lastModifiedDate.toString()
329
+ };
330
+ };
331
+ const calculateCropCoordinates = (width, height, aspectRatio)=>{
332
+ const targetRatio = aspectRatio[0] / aspectRatio[1];
333
+ let cropWidth;
334
+ let cropHeight;
335
+ if (width / height > targetRatio) {
336
+ cropHeight = height;
337
+ cropWidth = height * targetRatio;
338
+ } else {
339
+ cropWidth = width;
340
+ cropHeight = width / targetRatio;
341
+ }
342
+ const x1 = (width - cropWidth) / 2;
343
+ const y1 = (height - cropHeight) / 2;
344
+ const x2 = x1 + cropWidth;
345
+ const y2 = y1 + cropHeight;
346
+ return {
347
+ x1: x1 / width,
348
+ y1: y1 / height,
349
+ x2: x2 / width,
350
+ y2: y2 / height
351
+ };
352
+ };
353
+ const extractImgTag = (html)=>{
354
+ const srcList = [];
355
+ const parser = new external_htmlparser2_namespaceObject.Parser({
356
+ onopentag (name, attributes) {
357
+ if ("img" === name && (attributes.src.trim() || attributes.currentSrc.trim())) srcList.push(attributes.src.trim() || attributes.currentSrc.trim());
358
+ }
359
+ });
360
+ parser.write(html);
361
+ parser.end();
362
+ return srcList;
363
+ };
364
+ class TimeFormatter {
365
+ static format(timestamp, formatStr = 'yyyy-MM-dd hh:mm') {
366
+ if ('number' == typeof timestamp && 10 === timestamp.toString().length) timestamp *= 1000;
367
+ const date = new Date(timestamp);
368
+ const map = {
369
+ yyyy: String(date.getFullYear()),
370
+ yy: String(date.getFullYear()).slice(-2),
371
+ MM: String(date.getMonth() + 1).padStart(2, '0'),
372
+ dd: String(date.getDate()).padStart(2, '0'),
373
+ hh: String(date.getHours()).padStart(2, '0'),
374
+ mm: String(date.getMinutes()).padStart(2, '0'),
375
+ ss: String(date.getSeconds()).padStart(2, '0'),
376
+ M: String(date.getMonth() + 1),
377
+ d: String(date.getDate()),
378
+ h: String(date.getHours()),
379
+ m: String(date.getMinutes()),
380
+ s: String(date.getSeconds())
381
+ };
382
+ return formatStr.replace(/yyyy|yy|MM|dd|hh|mm|ss|M|d|h|m|s/g, (key)=>map[key]);
383
+ }
384
+ }
385
+ const replaceImgSrc = (html, callback)=>{
386
+ let lastedHtml = html;
387
+ const isImageTag = (node)=>"tag" === node.type && "img" === node.name;
388
+ const traverseDom = (node)=>{
389
+ if (external_htmlparser2_namespaceObject.DomUtils.hasChildren(node)) for (const child of node.children){
390
+ if (isImageTag(child)) callback(child);
391
+ traverseDom(child);
392
+ }
393
+ };
394
+ const handler = new external_domhandler_namespaceObject.DomHandler((error, dom)=>{
395
+ if (error) console.log(error);
396
+ else dom.forEach(traverseDom);
397
+ lastedHtml = external_dom_serializer_default()(dom, {
398
+ decodeEntities: false
399
+ });
400
+ });
401
+ const parser = new external_htmlparser2_namespaceObject.Parser(handler, {
402
+ decodeEntities: false
403
+ });
404
+ parser.write(html);
405
+ parser.end();
406
+ return lastedHtml;
407
+ };
408
+ const stringifyError = (error)=>{
409
+ if (error instanceof Error) return error.toString();
410
+ if ("object" == typeof error) return JSON.stringify(error);
411
+ return error;
412
+ };
413
+ const executeAction = (...actions)=>async (task, params)=>{
414
+ let result = {
415
+ code: 500,
416
+ message: "",
417
+ data: null
418
+ };
419
+ for(let index = 0; index < actions.length; index++){
420
+ const action = actions[index];
421
+ try {
422
+ result = await action(task, params);
423
+ } catch (error) {
424
+ result = http.e.handleApiError(error);
425
+ }
426
+ if (0 === result.code || 200 === result.code) break;
427
+ if (index !== actions.length - 1) task.logger.error(result.message, stringifyError(result.data), result.extra);
428
+ }
429
+ return result;
430
+ };
431
+ async function copyHtmlToClipboard(page, html, options = {
432
+ format: "text/html",
433
+ fallback: true
434
+ }) {
435
+ try {
436
+ await page.evaluate(async ({ htmlContent, format })=>{
437
+ const blob = new Blob([
438
+ htmlContent
439
+ ], {
440
+ type: format
441
+ });
442
+ await navigator.clipboard.write([
443
+ new ClipboardItem({
444
+ [format]: blob
445
+ })
446
+ ]);
447
+ }, {
448
+ htmlContent: html,
449
+ format: options.format
450
+ });
451
+ } catch (error) {
452
+ if (options.fallback) await page.evaluate((htmlContent)=>{
453
+ const div = document.createElement("div");
454
+ div.contentEditable = "true";
455
+ div.style.cssText = `
456
+ position: fixed;
457
+ left: -9999px;
458
+ opacity: 0;
459
+ pointer-events: none;
460
+ `;
461
+ div.innerHTML = htmlContent;
462
+ document.body.appendChild(div);
463
+ const range = document.createRange();
464
+ range.selectNodeContents(div);
465
+ const selection = window.getSelection();
466
+ selection.removeAllRanges();
467
+ selection.addRange(range);
468
+ document.execCommand("copy");
469
+ document.body.removeChild(div);
470
+ selection.removeAllRanges();
471
+ }, html);
472
+ }
473
+ }
474
+ function PopupListener(page, popupSelector, popKey, buttonSelector, options = {}) {
475
+ const { checkInterval = 1000, stopAfterClick = false } = options;
476
+ const popup = page.locator(popupSelector);
477
+ const button = page.locator(buttonSelector);
478
+ const intervalId = setInterval(async ()=>{
479
+ try {
480
+ if (await popup.count() > 0 && await popup.isVisible() && (await popup.textContent() || "").includes(popKey)) {
481
+ await button.click({
482
+ force: true
483
+ });
484
+ if (stopAfterClick) clearInterval(intervalId);
485
+ }
486
+ } catch (err) {}
487
+ }, checkInterval);
488
+ return ()=>{
489
+ clearInterval(intervalId);
490
+ };
491
+ }
492
+ const parseUrlQueryString = (url)=>{
493
+ const queryStringObject = {};
494
+ if (!url || !url.includes("?")) return queryStringObject;
495
+ const queryString = url.split("?")[1];
496
+ if (!queryString) return queryStringObject;
497
+ const queryWithoutHash = queryString.split("#")[0];
498
+ const queryStringArray = queryWithoutHash.split("&");
499
+ for (const item of queryStringArray){
500
+ if (!item) continue;
501
+ const equalIndex = item.indexOf("=");
502
+ if (-1 === equalIndex) queryStringObject[item] = "";
503
+ else {
504
+ const key = item.slice(0, equalIndex);
505
+ const value = item.slice(equalIndex + 1);
506
+ try {
507
+ queryStringObject[key] = decodeURIComponent(value);
508
+ } catch (e) {
509
+ queryStringObject[key] = value;
510
+ }
511
+ }
512
+ }
513
+ return queryStringObject;
514
+ };
515
+ const defaultParams = (params, defaults)=>Object.assign({}, defaults, params);
516
+ },
2
517
  "./src/utils/ttABEncrypt.js": function(module, __unused_webpack_exports, __webpack_require__) {
3
518
  module = __webpack_require__.nmd(module);
4
519
  const a0_0x45db08 = a0_0x4b0d;
@@ -1080,6 +1595,81 @@ var __webpack_modules__ = {
1080
1595
  return Data2A_B(Base2Data(EnvData2CharCode(_0x315138, _0x1c32b3, _0x56536b)));
1081
1596
  }
1082
1597
  module[a0_0x45db08(0xae)] = GenAB;
1598
+ },
1599
+ "./src/utils/xhsXsEncrypt.ts": function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1600
+ "use strict";
1601
+ __webpack_require__.d(__webpack_exports__, {
1602
+ H: ()=>XsEncrypt
1603
+ });
1604
+ const external_node_buffer_namespaceObject = require("node:buffer");
1605
+ const external_node_crypto_namespaceObject = require("node:crypto");
1606
+ var external_node_crypto_default = /*#__PURE__*/ __webpack_require__.n(external_node_crypto_namespaceObject);
1607
+ class XsEncrypt {
1608
+ async encryptMD5(url) {
1609
+ return external_node_crypto_default().createHash("md5").update(url, "utf8").digest("hex");
1610
+ }
1611
+ async encryptText(text) {
1612
+ const textEncoded = external_node_buffer_namespaceObject.Buffer.from(text).toString("base64");
1613
+ const cipher = external_node_crypto_default().createCipheriv("aes-128-cbc", new Uint8Array(this.keyBytes), new Uint8Array(this.iv));
1614
+ const ciphertext = cipher.update(textEncoded, "utf8", "base64");
1615
+ return ciphertext + cipher.final("base64");
1616
+ }
1617
+ async base64ToHex(encodedData) {
1618
+ const decodedData = external_node_buffer_namespaceObject.Buffer.from(encodedData, "base64");
1619
+ return decodedData.toString("hex");
1620
+ }
1621
+ async encryptPayload(payload, platform) {
1622
+ const hexPayload = await this.base64ToHex(payload);
1623
+ const obj = {
1624
+ signSvn: "56",
1625
+ signType: "x2",
1626
+ appID: platform,
1627
+ signVersion: "1",
1628
+ payload: hexPayload
1629
+ };
1630
+ const jsonString = JSON.stringify(obj, null, 0);
1631
+ return external_node_buffer_namespaceObject.Buffer.from(jsonString).toString("base64");
1632
+ }
1633
+ async encryptXs(url, a1, ts, platform = "xhs-pc-web") {
1634
+ const text = `x1=${await this.encryptMD5(`url=${url}`)};x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0|1|0|0|0;x3=${a1};x4=${ts};`;
1635
+ return `XYW_${await this.encryptPayload(await this.encryptText(text), platform)}`;
1636
+ }
1637
+ dumps(...rest) {
1638
+ const [data, replacer = null, space = 0] = rest;
1639
+ return JSON.stringify(data, replacer, space).replace(/\n/g, "").replace(/":\s+"/g, '":"');
1640
+ }
1641
+ constructor(){
1642
+ this.words = [
1643
+ 929260340,
1644
+ 1633971297,
1645
+ 895580464,
1646
+ 925905270
1647
+ ];
1648
+ this.keyBytes = external_node_buffer_namespaceObject.Buffer.concat(this.words.map((word)=>new Uint8Array(external_node_buffer_namespaceObject.Buffer.from([
1649
+ word >> 24 & 0xff,
1650
+ word >> 16 & 0xff,
1651
+ word >> 8 & 0xff,
1652
+ 0xff & word
1653
+ ]))));
1654
+ this.iv = external_node_buffer_namespaceObject.Buffer.from("4uzjr7mbsibcaldp", "utf8");
1655
+ }
1656
+ }
1657
+ },
1658
+ "@iflyrpa/share": function(module) {
1659
+ "use strict";
1660
+ module.exports = require("@iflyrpa/share");
1661
+ },
1662
+ axios: function(module) {
1663
+ "use strict";
1664
+ module.exports = require("axios");
1665
+ },
1666
+ "node:fs": function(module) {
1667
+ "use strict";
1668
+ module.exports = require("node:fs");
1669
+ },
1670
+ "node:path": function(module) {
1671
+ "use strict";
1672
+ module.exports = require("node:path");
1083
1673
  }
1084
1674
  };
1085
1675
  var __webpack_module_cache__ = {};
@@ -1146,273 +1736,15 @@ var __webpack_exports__ = {};
1146
1736
  version: ()=>package_namespaceObject.i8,
1147
1737
  Action: ()=>Action
1148
1738
  });
1149
- const external_node_fs_namespaceObject = require("node:fs");
1150
- var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
1151
- const external_node_path_namespaceObject = require("node:path");
1152
- var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
1153
- const external_dom_serializer_namespaceObject = require("dom-serializer");
1154
- var external_dom_serializer_default = /*#__PURE__*/ __webpack_require__.n(external_dom_serializer_namespaceObject);
1155
- const external_domhandler_namespaceObject = require("domhandler");
1156
- const external_htmlparser2_namespaceObject = require("htmlparser2");
1157
- const external_mime_types_namespaceObject = require("mime-types");
1158
- var external_mime_types_default = /*#__PURE__*/ __webpack_require__.n(external_mime_types_namespaceObject);
1159
- const external_axios_namespaceObject = require("axios");
1160
- var external_axios_default = /*#__PURE__*/ __webpack_require__.n(external_axios_namespaceObject);
1161
- class Http {
1162
- static handleApiError(error) {
1163
- if (error && "object" == typeof error && "code" in error && "message" in error) return error;
1164
- return {
1165
- code: 500,
1166
- message: "",
1167
- data: error
1168
- };
1169
- }
1170
- constructor(config){
1171
- this.apiClient = external_axios_default().create(config);
1172
- }
1173
- addResponseInterceptor(findError) {
1174
- this.apiClient.interceptors.response.use((response)=>{
1175
- const error = findError(response);
1176
- if (error) return Promise.reject(Object.assign(error, {
1177
- extra: {
1178
- method: response.config.method,
1179
- url: response.config.url
1180
- }
1181
- }));
1182
- return response;
1183
- }, (error)=>{
1184
- const errorResponse = {
1185
- code: error.response?.status || 500,
1186
- message: error.message || "",
1187
- data: error.response?.data,
1188
- extra: {
1189
- method: error.config?.method,
1190
- url: error.config?.url
1191
- }
1192
- };
1193
- if (error.response?.data) {
1194
- if ("object" == typeof error.response.data) {
1195
- const serverError = error.response.data;
1196
- if (serverError.message) errorResponse.message = serverError.message;
1197
- errorResponse.data = serverError;
1198
- }
1199
- }
1200
- return Promise.reject(errorResponse);
1201
- });
1202
- }
1203
- async api(config) {
1204
- try {
1205
- const response = await this.apiClient(config);
1206
- return response.data;
1207
- } catch (error) {
1208
- return Promise.reject(Http.handleApiError(error));
1209
- }
1210
- }
1211
- }
1212
- function getRandomInRange(min, max) {
1213
- return Math.floor(Math.random() * (max - min + 1)) + min;
1214
- }
1215
- const getFileState = (filePath)=>{
1216
- const filename = external_node_path_default().basename(filePath);
1217
- const fileType = external_mime_types_default().lookup(filePath);
1218
- const stats = external_node_fs_default().statSync(filePath);
1219
- const fileSize = stats.size;
1220
- const lastModifiedDate = stats.mtime;
1221
- return {
1222
- name: filename,
1223
- type: fileType,
1224
- size: fileSize,
1225
- lastModifiedDate: lastModifiedDate.toString()
1226
- };
1227
- };
1228
- const calculateCropCoordinates = (width, height, aspectRatio)=>{
1229
- const targetRatio = aspectRatio[0] / aspectRatio[1];
1230
- let cropWidth;
1231
- let cropHeight;
1232
- if (width / height > targetRatio) {
1233
- cropHeight = height;
1234
- cropWidth = height * targetRatio;
1235
- } else {
1236
- cropWidth = width;
1237
- cropHeight = width / targetRatio;
1238
- }
1239
- const x1 = (width - cropWidth) / 2;
1240
- const y1 = (height - cropHeight) / 2;
1241
- const x2 = x1 + cropWidth;
1242
- const y2 = y1 + cropHeight;
1243
- return {
1244
- x1: x1 / width,
1245
- y1: y1 / height,
1246
- x2: x2 / width,
1247
- y2: y2 / height
1248
- };
1249
- };
1250
- const extractImgTag = (html)=>{
1251
- const srcList = [];
1252
- const parser = new external_htmlparser2_namespaceObject.Parser({
1253
- onopentag (name, attributes) {
1254
- if ("img" === name && (attributes.src.trim() || attributes.currentSrc.trim())) srcList.push(attributes.src.trim() || attributes.currentSrc.trim());
1255
- }
1256
- });
1257
- parser.write(html);
1258
- parser.end();
1259
- return srcList;
1260
- };
1261
- class TimeFormatter {
1262
- static format(timestamp, formatStr = 'yyyy-MM-dd hh:mm') {
1263
- if ('number' == typeof timestamp && 10 === timestamp.toString().length) timestamp *= 1000;
1264
- const date = new Date(timestamp);
1265
- const map = {
1266
- yyyy: String(date.getFullYear()),
1267
- yy: String(date.getFullYear()).slice(-2),
1268
- MM: String(date.getMonth() + 1).padStart(2, '0'),
1269
- dd: String(date.getDate()).padStart(2, '0'),
1270
- hh: String(date.getHours()).padStart(2, '0'),
1271
- mm: String(date.getMinutes()).padStart(2, '0'),
1272
- ss: String(date.getSeconds()).padStart(2, '0'),
1273
- M: String(date.getMonth() + 1),
1274
- d: String(date.getDate()),
1275
- h: String(date.getHours()),
1276
- m: String(date.getMinutes()),
1277
- s: String(date.getSeconds())
1278
- };
1279
- return formatStr.replace(/yyyy|yy|MM|dd|hh|mm|ss|M|d|h|m|s/g, (key)=>map[key]);
1280
- }
1281
- }
1282
- const replaceImgSrc = (html, callback)=>{
1283
- let lastedHtml = html;
1284
- const isImageTag = (node)=>"tag" === node.type && "img" === node.name;
1285
- const traverseDom = (node)=>{
1286
- if (external_htmlparser2_namespaceObject.DomUtils.hasChildren(node)) for (const child of node.children){
1287
- if (isImageTag(child)) callback(child);
1288
- traverseDom(child);
1289
- }
1290
- };
1291
- const handler = new external_domhandler_namespaceObject.DomHandler((error, dom)=>{
1292
- if (error) console.log(error);
1293
- else dom.forEach(traverseDom);
1294
- lastedHtml = external_dom_serializer_default()(dom, {
1295
- decodeEntities: false
1296
- });
1297
- });
1298
- const parser = new external_htmlparser2_namespaceObject.Parser(handler, {
1299
- decodeEntities: false
1300
- });
1301
- parser.write(html);
1302
- parser.end();
1303
- return lastedHtml;
1304
- };
1305
- const stringifyError = (error)=>{
1306
- if (error instanceof Error) return error.toString();
1307
- if ("object" == typeof error) return JSON.stringify(error);
1308
- return error;
1309
- };
1310
- const executeAction = (...actions)=>async (task, params)=>{
1311
- let result = {
1312
- code: 500,
1313
- message: "",
1314
- data: null
1315
- };
1316
- for(let index = 0; index < actions.length; index++){
1317
- const action = actions[index];
1318
- try {
1319
- result = await action(task, params);
1320
- } catch (error) {
1321
- result = Http.handleApiError(error);
1322
- }
1323
- if (0 === result.code || 200 === result.code) break;
1324
- if (index !== actions.length - 1) task.logger.error(result.message, stringifyError(result.data), result.extra);
1325
- }
1326
- return result;
1327
- };
1328
- async function copyHtmlToClipboard(page, html, options = {
1329
- format: "text/html",
1330
- fallback: true
1331
- }) {
1332
- try {
1333
- await page.evaluate(async ({ htmlContent, format })=>{
1334
- const blob = new Blob([
1335
- htmlContent
1336
- ], {
1337
- type: format
1338
- });
1339
- await navigator.clipboard.write([
1340
- new ClipboardItem({
1341
- [format]: blob
1342
- })
1343
- ]);
1344
- }, {
1345
- htmlContent: html,
1346
- format: options.format
1347
- });
1348
- } catch (error) {
1349
- if (options.fallback) await page.evaluate((htmlContent)=>{
1350
- const div = document.createElement("div");
1351
- div.contentEditable = "true";
1352
- div.style.cssText = `
1353
- position: fixed;
1354
- left: -9999px;
1355
- opacity: 0;
1356
- pointer-events: none;
1357
- `;
1358
- div.innerHTML = htmlContent;
1359
- document.body.appendChild(div);
1360
- const range = document.createRange();
1361
- range.selectNodeContents(div);
1362
- const selection = window.getSelection();
1363
- selection.removeAllRanges();
1364
- selection.addRange(range);
1365
- document.execCommand("copy");
1366
- document.body.removeChild(div);
1367
- selection.removeAllRanges();
1368
- }, html);
1369
- }
1370
- }
1371
- function PopupListener(page, popupSelector, popKey, buttonSelector, options = {}) {
1372
- const { checkInterval = 1000, stopAfterClick = false } = options;
1373
- const popup = page.locator(popupSelector);
1374
- const button = page.locator(buttonSelector);
1375
- const intervalId = setInterval(async ()=>{
1376
- try {
1377
- if (await popup.count() > 0 && await popup.isVisible() && (await popup.textContent() || "").includes(popKey)) {
1378
- await button.click({
1379
- force: true
1380
- });
1381
- if (stopAfterClick) clearInterval(intervalId);
1382
- }
1383
- } catch (err) {}
1384
- }, checkInterval);
1385
- return ()=>{
1386
- clearInterval(intervalId);
1387
- };
1388
- }
1389
- const parseUrlQueryString = (url)=>{
1390
- const queryStringObject = {};
1391
- if (!url || !url.includes("?")) return queryStringObject;
1392
- const queryString = url.split("?")[1];
1393
- if (!queryString) return queryStringObject;
1394
- const queryWithoutHash = queryString.split("#")[0];
1395
- const queryStringArray = queryWithoutHash.split("&");
1396
- for (const item of queryStringArray){
1397
- if (!item) continue;
1398
- const equalIndex = item.indexOf("=");
1399
- if (-1 === equalIndex) queryStringObject[item] = "";
1400
- else {
1401
- const key = item.slice(0, equalIndex);
1402
- const value = item.slice(equalIndex + 1);
1403
- try {
1404
- queryStringObject[key] = decodeURIComponent(value);
1405
- } catch (e) {
1406
- queryStringObject[key] = value;
1407
- }
1408
- }
1409
- }
1410
- return queryStringObject;
1411
- };
1412
- const defaultParams = (params, defaults)=>Object.assign({}, defaults, params);
1413
- const share_namespaceObject = require("@iflyrpa/share");
1739
+ var utils = __webpack_require__("./src/utils/index.ts");
1740
+ var external_node_fs_ = __webpack_require__("node:fs");
1741
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_);
1742
+ var external_node_path_ = __webpack_require__("node:path");
1743
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_);
1744
+ var share_ = __webpack_require__("@iflyrpa/share");
1414
1745
  const external_form_data_namespaceObject = require("form-data");
1415
1746
  var external_form_data_default = /*#__PURE__*/ __webpack_require__.n(external_form_data_namespaceObject);
1747
+ var utils_http = __webpack_require__("./src/utils/http.ts");
1416
1748
  const errnoMap = {
1417
1749
  20040706: "正文图片和封面图片推荐jpg、png格式。",
1418
1750
  20040084: "正文图片和封面图片推荐jpg、png格式。",
@@ -1425,12 +1757,13 @@ var __webpack_exports__ = {};
1425
1757
  2004005714: "网络环境异常,请检查网络后重试发布。",
1426
1758
  401100032: "异常,请检查图片(如:格式、版权、合规性等)。",
1427
1759
  20040034: "封面图片推荐jpg、png格式,不支持gif格式。",
1428
- 20040124: "服务器异常,请稍后重试!"
1760
+ 20040124: "服务器异常,请稍后重试!",
1761
+ 20040001: "当前用户未登录,请登陆后重试!"
1429
1762
  };
1430
1763
  const mockAction = async (task, params)=>{
1431
1764
  const { baijiahaoSingleCover, baijiahaoMultCover, baijiahaoCoverType } = params.settingInfo;
1432
1765
  const tmpCachePath = task.getTmpPath();
1433
- const http = new Http({
1766
+ const http = new utils_http.e({
1434
1767
  headers: {
1435
1768
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1436
1769
  token: params.token
@@ -1464,8 +1797,8 @@ var __webpack_exports__ = {};
1464
1797
  const uploadImages = async (_images)=>{
1465
1798
  const images = _images.filter((url)=>!!url && "" !== url.trim());
1466
1799
  return await Promise.all(images.map(async (url)=>{
1467
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
1468
- const image = await (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
1800
+ const fileName = (0, share_.getFilenameFromUrl)(url);
1801
+ const image = await (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
1469
1802
  const formData = new (external_form_data_default())();
1470
1803
  formData.append("org_file_name", fileName);
1471
1804
  formData.append("type", "image");
@@ -1484,9 +1817,9 @@ var __webpack_exports__ = {};
1484
1817
  return res.ret;
1485
1818
  }));
1486
1819
  };
1487
- const originContentImages = extractImgTag(params.content);
1820
+ const originContentImages = (0, utils.E_)(params.content);
1488
1821
  const targetContentImages = await uploadImages(originContentImages);
1489
- const content = replaceImgSrc(params.content, (dom)=>{
1822
+ const content = (0, utils.I)(params.content, (dom)=>{
1490
1823
  if (dom.attribs.src) {
1491
1824
  const idx = originContentImages.findIndex((it)=>it === dom.attribs.src);
1492
1825
  dom.attribs.src = targetContentImages[idx].bos_url;
@@ -1561,7 +1894,7 @@ var __webpack_exports__ = {};
1561
1894
  },
1562
1895
  defaultErrorMsg: isDraft ? "文章同步出现异常,请稍后重试。" : "文章发布出现异常,请稍后重试。"
1563
1896
  });
1564
- return (0, share_namespaceObject.success)(res.ret.article_id, "百家号发布完成。");
1897
+ return (0, share_.success)(res.ret.article_id, "百家号发布完成。");
1565
1898
  };
1566
1899
  const rpaAction = async (task, params)=>{
1567
1900
  const tmpCachePath = task.getTmpPath();
@@ -1599,7 +1932,7 @@ var __webpack_exports__ = {};
1599
1932
  const titleInstance = page.locator("#ueditor #bjhNewsTitle .input-box textarea");
1600
1933
  await titleInstance.click();
1601
1934
  await titleInstance.fill(params.title);
1602
- await copyHtmlToClipboard(page, params.content);
1935
+ await (0, utils.qN)(page, params.content);
1603
1936
  await page.click("#ueditor .edui-editor-iframeholder iframe");
1604
1937
  await page.keyboard.press("Control+A");
1605
1938
  await page.keyboard.press("Control+V");
@@ -1615,8 +1948,8 @@ var __webpack_exports__ = {};
1615
1948
  const images = await Promise.all((isSingleCover ? [
1616
1949
  params.settingInfo.baijiahaoSingleCover
1617
1950
  ] : params.settingInfo.baijiahaoMultCover).map((url)=>{
1618
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
1619
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
1951
+ const fileName = (0, share_.getFilenameFromUrl)(url);
1952
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
1620
1953
  }));
1621
1954
  const coverSelector = page.locator(".cheetah-form-item-control .edit-cover-container .cover-list .DraggableTags-tag-drag .coverUploaderView");
1622
1955
  const coverCount = await coverSelector.count();
@@ -1699,7 +2032,7 @@ var __webpack_exports__ = {};
1699
2032
  hasText: "日"
1700
2033
  }).click();
1701
2034
  await page.locator('#select-date_list + * .cheetah-select-item-option', {
1702
- hasText: TimeFormatter.format(params.settingInfo.timer, "M月dd日")
2035
+ hasText: utils.Tx.format(params.settingInfo.timer, "M月dd日")
1703
2036
  }).click();
1704
2037
  await page.waitForTimeout(200);
1705
2038
  await page.locator(".timepublish-wrap-select .select-wrap", {
@@ -1720,7 +2053,7 @@ var __webpack_exports__ = {};
1720
2053
  let fistHourElemH = Number(fistHourElem?.split("点")[0]);
1721
2054
  const lastHourElem = scrollHourInfo.elementItem[scrollHourInfo.elementItem.length - 1];
1722
2055
  let lastHourElemH = Number(lastHourElem?.split("点")[0]);
1723
- let targetTimeH = Number(TimeFormatter.format(params.settingInfo.timer, 'h'));
2056
+ let targetTimeH = Number(utils.Tx.format(params.settingInfo.timer, 'h'));
1724
2057
  await page.mouse.wheel(0, targetTimeH > lastHourElemH ? (targetTimeH - lastHourElemH) * scrollHourInfo.elementHeight : targetTimeH < fistHourElemH ? -(fistHourElemH - targetTimeH) * scrollHourInfo.elementHeight : 0);
1725
2058
  await page.locator("#select-hour_list + * .cheetah-select-item-option ", {
1726
2059
  hasText: targetTimeH + "点"
@@ -1744,7 +2077,7 @@ var __webpack_exports__ = {};
1744
2077
  let fistMinuteElemH = Number(fistMinuteElem?.split("分")[0]);
1745
2078
  const lastMinuteElem = scrollMinuteInfo.elementItem[scrollMinuteInfo.elementItem.length - 1];
1746
2079
  let lastMinuteElemH = Number(lastMinuteElem?.split("分")[0]);
1747
- let targetTimeM = Number(TimeFormatter.format(params.settingInfo.timer, 'm'));
2080
+ let targetTimeM = Number(utils.Tx.format(params.settingInfo.timer, 'm'));
1748
2081
  await page.mouse.wheel(0, targetTimeM > lastMinuteElemH ? (targetTimeM - lastMinuteElemH) * scrollMinuteInfo.elementHeight : targetTimeM < fistMinuteElemH ? -(fistMinuteElemH - targetTimeM) * scrollMinuteInfo.elementHeight : 0);
1749
2082
  await page.locator("#select-minute_list + * .cheetah-select-item-option ", {
1750
2083
  hasText: targetTimeM + "分"
@@ -1758,16 +2091,16 @@ var __webpack_exports__ = {};
1758
2091
  }).locator("button").click();
1759
2092
  });
1760
2093
  await page.close();
1761
- return (0, share_namespaceObject.success)(articleId, articleId ? "发布成功" : message);
2094
+ return (0, share_.success)(articleId, articleId ? "发布成功" : message);
1762
2095
  };
1763
2096
  const baijiahaoPublish = async (task, params)=>{
1764
2097
  if ("rpa" === params.actionType) return rpaAction(task, params);
1765
2098
  if ("mockApi" === params.actionType) return mockAction(task, params);
1766
- return executeAction(mockAction, rpaAction)(task, params);
2099
+ return (0, utils.jo)(mockAction, rpaAction)(task, params);
1767
2100
  };
1768
2101
  const getBaijiahaoActivity = async (_task, params)=>{
1769
2102
  const cookies = params.cookies ?? [];
1770
- const http = new Http({
2103
+ const http = new utils_http.e({
1771
2104
  headers: {
1772
2105
  cookie: cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1773
2106
  token: params.token
@@ -1785,11 +2118,11 @@ var __webpack_exports__ = {};
1785
2118
  task_type: -1
1786
2119
  }
1787
2120
  });
1788
- return (0, share_namespaceObject.success)(res?.data?.list ?? []);
2121
+ return (0, share_.success)(res?.data?.list ?? []);
1789
2122
  };
1790
2123
  const getToutiaoConfig = async (_task, params)=>{
1791
2124
  const cookies = params.cookies ?? [];
1792
- const http = new Http({
2125
+ const http = new utils_http.e({
1793
2126
  headers: {
1794
2127
  cookie: cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1795
2128
  referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
@@ -1837,7 +2170,7 @@ var __webpack_exports__ = {};
1837
2170
  getCityDistrict(),
1838
2171
  getUserRights()
1839
2172
  ]);
1840
- return (0, share_namespaceObject.success)({
2173
+ return (0, share_.success)({
1841
2174
  suggestWords,
1842
2175
  cityDistrict,
1843
2176
  userRights
@@ -1845,7 +2178,7 @@ var __webpack_exports__ = {};
1845
2178
  };
1846
2179
  const getBaijiahaoConfig = async (_task, params)=>{
1847
2180
  const cookies = params.cookies ?? [];
1848
- const http = new Http({
2181
+ const http = new utils_http.e({
1849
2182
  headers: {
1850
2183
  cookie: cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1851
2184
  token: params.token
@@ -1858,15 +2191,23 @@ var __webpack_exports__ = {};
1858
2191
  type: "news"
1859
2192
  }
1860
2193
  });
1861
- return (0, share_namespaceObject.success)(res?.data?.article.activity_list.map((_item)=>({
2194
+ const data = res?.data?.article.activity_list.map((_item)=>({
1862
2195
  id: _item.id,
1863
2196
  name: _item.name,
1864
2197
  detail: _item.detail,
1865
2198
  is_enable: _item.is_enable
1866
- })) ?? [], "获取头条发布配置项成功");
2199
+ })) ?? [];
2200
+ data.push({
2201
+ id: "bjh_publish_num_left",
2202
+ name: "账号剩余发文数",
2203
+ detail: "",
2204
+ is_enable: 1,
2205
+ publish_num_left: res.data.ability.publish_num_left
2206
+ });
2207
+ return (0, share_.success)(data, "获取百家号配置项成功!");
1867
2208
  };
1868
2209
  const searchToutiaoTopicList = async (_task, params)=>{
1869
- const http = new Http({
2210
+ const http = new utils_http.e({
1870
2211
  headers: {
1871
2212
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1872
2213
  referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
@@ -1881,14 +2222,14 @@ var __webpack_exports__ = {};
1881
2222
  words: params.searchValue
1882
2223
  }
1883
2224
  });
1884
- if (0 === res.code) return (0, share_namespaceObject.success)(params.searchValue ? res.recents : res.hots);
1885
- return (0, share_namespaceObject.success)([]);
2225
+ if (0 === res.code) return (0, share_.success)(params.searchValue ? res.recents : res.hots);
2226
+ return (0, share_.success)([]);
1886
2227
  } catch (error) {
1887
- return (0, share_namespaceObject.success)([]);
2228
+ return (0, share_.success)([]);
1888
2229
  }
1889
2230
  };
1890
2231
  const searchToutiaoLocation = async (_task, params)=>{
1891
- const http = new Http({
2232
+ const http = new utils_http.e({
1892
2233
  headers: {
1893
2234
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1894
2235
  referer: "https://mp.toutiao.com/profile_v4/graphic/publish",
@@ -1912,7 +2253,7 @@ var __webpack_exports__ = {};
1912
2253
  timestamp: Math.floor(Date.now() / 1000)
1913
2254
  }
1914
2255
  });
1915
- if (200 === res.code) return (0, share_namespaceObject.success)(res.data.poi.map((item)=>({
2256
+ if (200 === res.code) return (0, share_.success)(res.data.poi.map((item)=>({
1916
2257
  position: item.name,
1917
2258
  city: item.city,
1918
2259
  longitude: item.longitude,
@@ -1920,13 +2261,13 @@ var __webpack_exports__ = {};
1920
2261
  type_code: item.type_code,
1921
2262
  poi_id: item.id
1922
2263
  })));
1923
- return (0, share_namespaceObject.success)([]);
2264
+ return (0, share_.success)([]);
1924
2265
  } catch (error) {
1925
- return (0, share_namespaceObject.success)([]);
2266
+ return (0, share_.success)([]);
1926
2267
  }
1927
2268
  };
1928
2269
  const searchToutiaoUserInfo = async (_task, params)=>{
1929
- const http = new Http({
2270
+ const http = new utils_http.e({
1930
2271
  headers: {
1931
2272
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1932
2273
  referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
@@ -1942,19 +2283,19 @@ var __webpack_exports__ = {};
1942
2283
  app_name: "toutiao_mp"
1943
2284
  }
1944
2285
  });
1945
- if (0 === res.err_no) return (0, share_namespaceObject.success)(res.data.suggest.map((item)=>({
2286
+ if (0 === res.err_no) return (0, share_.success)(res.data.suggest.map((item)=>({
1946
2287
  user_id: item.user.info.user_id,
1947
2288
  name: item.user.info.name,
1948
2289
  avatar_url: item.user.info.avatar_url,
1949
2290
  followers_count: item.user.relation_count.followers_count
1950
2291
  })), '搜索成功');
1951
- return (0, share_namespaceObject.success)([]);
2292
+ return (0, share_.success)([]);
1952
2293
  } catch (error) {
1953
- return (0, share_namespaceObject.success)([]);
2294
+ return (0, share_.success)([]);
1954
2295
  }
1955
2296
  };
1956
2297
  const searchXiaohongshuLocation = async (_task, params)=>{
1957
- const http = new Http({
2298
+ const http = new utils_http.e({
1958
2299
  headers: {
1959
2300
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1960
2301
  referer: "https://creator.xiaohongshu.com",
@@ -1975,13 +2316,13 @@ var __webpack_exports__ = {};
1975
2316
  type: 3
1976
2317
  }
1977
2318
  });
1978
- return (0, share_namespaceObject.success)(0 === result.code ? result.data.poi_list : []);
2319
+ return (0, share_.success)(0 === result.code ? result.data.poi_list : []);
1979
2320
  } catch (error) {
1980
- return (0, share_namespaceObject.success)([]);
2321
+ return (0, share_.success)([]);
1981
2322
  }
1982
2323
  };
1983
2324
  const searchXiaohongshuTopicList = async (_task, params)=>{
1984
- const http = new Http({
2325
+ const http = new utils_http.e({
1985
2326
  headers: {
1986
2327
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
1987
2328
  referer: "https://creator.xiaohongshu.com",
@@ -2005,9 +2346,9 @@ var __webpack_exports__ = {};
2005
2346
  },
2006
2347
  defaultErrorMsg: "话题搜索异常,请稍后重试。"
2007
2348
  });
2008
- return (0, share_namespaceObject.success)(0 === result.code ? result.data.topic_info_dtos : [], '获取话题成功');
2349
+ return (0, share_.success)(0 === result.code ? result.data.topic_info_dtos : [], '获取话题成功');
2009
2350
  } catch (error) {
2010
- return (0, share_namespaceObject.success)([]);
2351
+ return (0, share_.success)([]);
2011
2352
  }
2012
2353
  };
2013
2354
  const GenAB = __webpack_require__("./src/utils/ttABEncrypt.js");
@@ -2024,6 +2365,7 @@ var __webpack_exports__ = {};
2024
2365
  2010: "无头条广告权限,请修改后重试。",
2025
2366
  3103: "今日头条号发布次数已达上限,请明天再试。",
2026
2367
  1053: "正文图片和封面图片推荐jpg、png格式。",
2368
+ 1050: "图片上传失败,请重试上传。",
2027
2369
  2005: "账号无【申明原创】权限,请关闭申明后重试。",
2028
2370
  100004: "用户未登录或登陆已过期,请重新登陆后重试。"
2029
2371
  };
@@ -2042,7 +2384,7 @@ var __webpack_exports__ = {};
2042
2384
  const mock_mockAction = async (task, params)=>{
2043
2385
  const { toutiaoSingleCover, toutiaoMultCover, toutiaoCoverType, toutiaoOriginal, toutiaoExclusive, toutiaoClaim } = params.settingInfo;
2044
2386
  const tmpCachePath = task.getTmpPath();
2045
- const http = new Http({
2387
+ const http = new utils_http.e({
2046
2388
  headers: {
2047
2389
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2048
2390
  origin: "https://mp.toutiao.com",
@@ -2066,8 +2408,8 @@ var __webpack_exports__ = {};
2066
2408
  defaultErrorMsg: `头条号登录状态失效,请重新绑定账号后${"draft" === params.saveType ? "同步" : "发布"}。`
2067
2409
  });
2068
2410
  const uploadImages = async (images)=>await Promise.all(images.map(async (url)=>{
2069
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
2070
- const image = await (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2411
+ const fileName = (0, share_.getFilenameFromUrl)(url);
2412
+ const image = await (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2071
2413
  const formData = new (external_form_data_default())();
2072
2414
  formData.append("image", external_node_fs_default().createReadStream(image));
2073
2415
  const response = await http.api({
@@ -2078,9 +2420,9 @@ var __webpack_exports__ = {};
2078
2420
  });
2079
2421
  return response.data;
2080
2422
  }));
2081
- const originContentImages = extractImgTag(params.content);
2423
+ const originContentImages = (0, utils.E_)(params.content);
2082
2424
  const targetContentImages = await uploadImages(originContentImages);
2083
- const content = replaceImgSrc(params.content, (dom)=>{
2425
+ const content = (0, utils.I)(params.content, (dom)=>{
2084
2426
  if (dom.attribs.src) {
2085
2427
  const idx = originContentImages.findIndex((it)=>it === dom.attribs.src);
2086
2428
  dom.attribs.src = targetContentImages[idx].image_url;
@@ -2151,7 +2493,7 @@ var __webpack_exports__ = {};
2151
2493
  is_refute_rumor: 0,
2152
2494
  save: "publish" === params.saveType ? 1 : 0,
2153
2495
  timer_status: params.settingInfo.timer ? 1 : 0,
2154
- timer_time: params.settingInfo.timer ? TimeFormatter.format(params.settingInfo.timer) : "",
2496
+ timer_time: params.settingInfo.timer ? utils.Tx.format(params.settingInfo.timer) : "",
2155
2497
  title: params.title,
2156
2498
  content: content + topicContent,
2157
2499
  extra: JSON.stringify(extraData),
@@ -2206,7 +2548,7 @@ var __webpack_exports__ = {};
2206
2548
  defaultErrorMsg: "draft" === params.saveType ? "文章同步异常,请稍后重试。" : "文章发布异常,请稍后重试。"
2207
2549
  };
2208
2550
  const publishResult = await http.api(publishOption);
2209
- return (0, share_namespaceObject.success)(publishResult.data.pgc_id);
2551
+ return (0, share_.success)(publishResult.data.pgc_id);
2210
2552
  };
2211
2553
  const rpa_GenAB = __webpack_require__("./src/utils/ttABEncrypt.js");
2212
2554
  const rpa_rpaAction = async (task, params)=>{
@@ -2270,14 +2612,14 @@ var __webpack_exports__ = {};
2270
2612
  });
2271
2613
  } else await route.continue();
2272
2614
  });
2273
- PopupListener(page, '.byte-modal.publish-exclusive-modal .title', "激励", '.byte-modal-close-icon', {
2615
+ (0, utils.f8)(page, '.byte-modal.publish-exclusive-modal .title', "激励", '.byte-modal-close-icon', {
2274
2616
  checkInterval: 1000,
2275
2617
  stopAfterClick: false
2276
2618
  });
2277
2619
  const titleInstance = page.locator(".publish-editor-title-wrapper .publish-editor-title textarea");
2278
2620
  await titleInstance.click();
2279
2621
  await titleInstance.fill(params.title);
2280
- await copyHtmlToClipboard(page, params.content);
2622
+ await (0, utils.qN)(page, params.content);
2281
2623
  await page.click(".publish-editor .syl-editor-wrap .ProseMirror");
2282
2624
  await page.keyboard.press("Control+V");
2283
2625
  const coverTypeValue = COVER_TYPE[params.settingInfo.toutiaoCoverType];
@@ -2292,8 +2634,8 @@ var __webpack_exports__ = {};
2292
2634
  ];
2293
2635
  else if ("multiple" === params.settingInfo.toutiaoCoverType) coverUrls = params.settingInfo.toutiaoMultCover;
2294
2636
  const images = await Promise.all(coverUrls.map((url)=>{
2295
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
2296
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2637
+ const fileName = (0, share_.getFilenameFromUrl)(url);
2638
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2297
2639
  }));
2298
2640
  const coverUploadEle = coverContainer.locator(".article-cover .article-cover-images").locator(".article-cover-img-wrap, .article-cover-add");
2299
2641
  const coverUploadCount = await coverUploadEle.count();
@@ -2324,7 +2666,7 @@ var __webpack_exports__ = {};
2324
2666
  state: "visible"
2325
2667
  });
2326
2668
  await confirmBtn.click();
2327
- await page.waitForTimeout(getRandomInRange(500, 1000));
2669
+ await page.waitForTimeout((0, utils.i9)(500, 1000));
2328
2670
  }
2329
2671
  if (params.settingInfo.toutiaoLocation) {
2330
2672
  const locationContainer = page.locator(".form-container .edit-cell").filter({
@@ -2393,17 +2735,17 @@ var __webpack_exports__ = {};
2393
2735
  });
2394
2736
  await page.locator(".byte-modal-content .day-select .byte-select-view-value").click();
2395
2737
  await page.locator('li.byte-select-option', {
2396
- hasText: TimeFormatter.format(params.settingInfo.timer, "MM月dd日")
2738
+ hasText: utils.Tx.format(params.settingInfo.timer, "MM月dd日")
2397
2739
  }).click();
2398
2740
  await page.waitForTimeout(200);
2399
2741
  await page.locator(".byte-modal-content .hour-select .byte-select-view-value").click();
2400
2742
  await page.locator('li.byte-select-option', {
2401
- hasText: TimeFormatter.format(params.settingInfo.timer, "h")
2743
+ hasText: utils.Tx.format(params.settingInfo.timer, "h")
2402
2744
  }).click();
2403
2745
  await page.waitForTimeout(200);
2404
2746
  await page.locator(".byte-modal-content .minute-select .byte-select-view-value").click();
2405
2747
  await page.locator('li.byte-select-option', {
2406
- hasText: TimeFormatter.format(params.settingInfo.timer, "m")
2748
+ hasText: utils.Tx.format(params.settingInfo.timer, "m")
2407
2749
  }).click();
2408
2750
  await page.waitForTimeout(200);
2409
2751
  await page.locator(".byte-modal-footer button").filter({
@@ -2430,7 +2772,7 @@ var __webpack_exports__ = {};
2430
2772
  }).click();
2431
2773
  }
2432
2774
  await page.close();
2433
- return (0, share_namespaceObject.success)(articleId, "publish" === params.saveType ? "发布成功" : "保存草稿成功");
2775
+ return (0, share_.success)(articleId, "publish" === params.saveType ? "发布成功" : "保存草稿成功");
2434
2776
  };
2435
2777
  const COVER_TYPE = {
2436
2778
  no: 1,
@@ -2441,10 +2783,10 @@ var __webpack_exports__ = {};
2441
2783
  const toutiaoPublish = async (task, params)=>{
2442
2784
  if ("rpa" === params.actionType) return rpa_rpaAction(task, params);
2443
2785
  if ("mockApi" === params.actionType) return mock_mockAction(task, params);
2444
- return executeAction(mock_mockAction, rpa_rpaAction)(task, params);
2786
+ return (0, utils.jo)(mock_mockAction, rpa_rpaAction)(task, params);
2445
2787
  };
2446
2788
  const TTFansExport = async (_task, params)=>{
2447
- const http = new Http({
2789
+ const http = new utils_http.e({
2448
2790
  headers: {
2449
2791
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2450
2792
  referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
@@ -2458,19 +2800,19 @@ var __webpack_exports__ = {};
2458
2800
  app_id: 1231
2459
2801
  }
2460
2802
  });
2461
- return (0, share_namespaceObject.success)(0 === res.code ? {
2803
+ return (0, share_.success)(0 === res.code ? {
2462
2804
  fans_count: res.total_fans_count
2463
2805
  } : {
2464
2806
  fans_count: null
2465
2807
  }, "获取粉丝数成功!");
2466
2808
  } catch (error) {
2467
- return (0, share_namespaceObject.success)({
2809
+ return (0, share_.success)({
2468
2810
  fans_count: null
2469
2811
  }, "获取粉丝数失败,请检查登陆有效性!");
2470
2812
  }
2471
2813
  };
2472
2814
  const XhsFansExport = async (_task, params)=>{
2473
- const http = new Http({
2815
+ const http = new utils_http.e({
2474
2816
  headers: {
2475
2817
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2476
2818
  referer: "https://creator.xiaohongshu.com/new/home?source=official"
@@ -2481,19 +2823,19 @@ var __webpack_exports__ = {};
2481
2823
  method: "get",
2482
2824
  url: "https://creator.xiaohongshu.com/api/galaxy/creator/home/personal_info"
2483
2825
  });
2484
- return (0, share_namespaceObject.success)(0 === res.result ? {
2826
+ return (0, share_.success)(0 === res.result ? {
2485
2827
  fans_count: res.data.fans_count
2486
2828
  } : {
2487
2829
  fans_count: null
2488
2830
  }, "获取粉丝数成功!");
2489
2831
  } catch (error) {
2490
- return (0, share_namespaceObject.success)({
2832
+ return (0, share_.success)({
2491
2833
  fans_count: null
2492
2834
  }, "获取粉丝数失败,请检查登陆有效性!");
2493
2835
  }
2494
2836
  };
2495
2837
  const WxFansExport = async (_task, params)=>{
2496
- const http = new Http({
2838
+ const http = new utils_http.e({
2497
2839
  headers: {
2498
2840
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";")
2499
2841
  }
@@ -2509,19 +2851,19 @@ var __webpack_exports__ = {};
2509
2851
  }
2510
2852
  });
2511
2853
  const match = htmlStr.match(/总用户数[\s\S]*?<mp-thousandth>(\d+)<\/mp-thousandth>/);
2512
- return (0, share_namespaceObject.success)(match ? {
2854
+ return (0, share_.success)(match ? {
2513
2855
  fans_count: Number(match[1])
2514
2856
  } : {
2515
2857
  fans_count: null
2516
2858
  }, "获取粉丝数成功!");
2517
2859
  } catch (error) {
2518
- return (0, share_namespaceObject.success)({
2860
+ return (0, share_.success)({
2519
2861
  fans_count: null
2520
2862
  }, "获取粉丝数失败,请检查登陆有效性!");
2521
2863
  }
2522
2864
  };
2523
2865
  const BjhFansExport = async (_task, params)=>{
2524
- const http = new Http({
2866
+ const http = new utils_http.e({
2525
2867
  headers: {
2526
2868
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2527
2869
  referer: "https://baijiahao.baidu.com/builder/rc/home"
@@ -2532,20 +2874,430 @@ var __webpack_exports__ = {};
2532
2874
  method: "get",
2533
2875
  url: "https://baijiahao.baidu.com/cms-ui/rights/growth/get_info"
2534
2876
  });
2535
- return (0, share_namespaceObject.success)(0 === res.errno ? {
2877
+ return (0, share_.success)(0 === res.errno ? {
2536
2878
  fans_count: res.data.total_fans
2537
2879
  } : {
2538
2880
  fans_count: null
2539
2881
  }, "获取粉丝数成功!");
2540
2882
  } catch (error) {
2541
- return (0, share_namespaceObject.success)({
2883
+ return (0, share_.success)({
2542
2884
  fans_count: null
2543
2885
  }, "获取粉丝数失败,请检查登陆有效性!");
2544
2886
  }
2545
2887
  };
2888
+ const TTSessionCheck = async (_task, params)=>{
2889
+ const http = new utils_http.e({
2890
+ headers: {
2891
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2892
+ referer: "https://mp.toutiao.com/profile_v4/graphic/publish"
2893
+ }
2894
+ });
2895
+ try {
2896
+ const res = await http.api({
2897
+ method: "get",
2898
+ url: "https://mp.toutiao.com/mp/agw/creator_center/user_info",
2899
+ defaultErrorMsg: `头条号登录状态失效。`
2900
+ });
2901
+ return (0, share_.success)(0 === res.code ? {
2902
+ isValidSession: true
2903
+ } : {
2904
+ isValidSession: false
2905
+ }, "头条账号有效性检测完成!");
2906
+ } catch (error) {
2907
+ return (0, share_.success)({
2908
+ isValidSession: false
2909
+ }, "头条账号有效性检测失败!");
2910
+ }
2911
+ };
2912
+ const WxSessionCheck = async (_task, params)=>{
2913
+ const http = new utils_http.e({
2914
+ headers: {
2915
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";")
2916
+ }
2917
+ });
2918
+ const fingerprint = "4695500bc93ab4ce8fb2692da6564e04";
2919
+ try {
2920
+ const res = await http.api({
2921
+ method: "get",
2922
+ url: "https://mp.weixin.qq.com/cgi-bin/appmsgpublish",
2923
+ params: {
2924
+ fingerprint,
2925
+ sub: "list",
2926
+ begin: 0,
2927
+ count: 10,
2928
+ query: "",
2929
+ type: 1011102103,
2930
+ show_type: "",
2931
+ free_publish_type: 1102103,
2932
+ sub_action: "list_ex",
2933
+ search_card: 0,
2934
+ token: params.token,
2935
+ lang: "zh_CN",
2936
+ f: "json",
2937
+ ajax: 1
2938
+ }
2939
+ });
2940
+ return (0, share_.success)(0 === res.base_resp.ret ? {
2941
+ isValidSession: true
2942
+ } : {
2943
+ isValidSession: false
2944
+ }, "微信账号有效性检测完成!");
2945
+ } catch (error) {
2946
+ return (0, share_.success)({
2947
+ isValidSession: false
2948
+ }, "微信账号有效性检测失败!");
2949
+ }
2950
+ };
2951
+ const XhsSessionCheck = async (_task, params)=>{
2952
+ const http = new utils_http.e({
2953
+ headers: {
2954
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2955
+ referer: "https://creator.xiaohongshu.com/new/home?source=official"
2956
+ }
2957
+ });
2958
+ try {
2959
+ const res = await http.api({
2960
+ method: "get",
2961
+ url: "https://creator.xiaohongshu.com/api/galaxy/user/info"
2962
+ });
2963
+ return (0, share_.success)(0 === res.result ? {
2964
+ isValidSession: true
2965
+ } : {
2966
+ isValidSession: false
2967
+ }, "小红书账号有效性检测完成!");
2968
+ } catch (error) {
2969
+ return (0, share_.success)({
2970
+ isValidSession: false
2971
+ }, "小红书账号有效性检测完成!");
2972
+ }
2973
+ };
2974
+ const BjhSessionCheck = async (_task, params)=>{
2975
+ const http = new utils_http.e({
2976
+ headers: {
2977
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2978
+ referer: "https://baijiahao.baidu.com/builder/rc/home"
2979
+ }
2980
+ });
2981
+ try {
2982
+ const res = await http.api({
2983
+ method: "get",
2984
+ url: "https://baijiahao.baidu.com/pcui/home/index",
2985
+ defaultErrorMsg: `百家号登录状态失效。`
2986
+ });
2987
+ return (0, share_.success)(0 === res.errno ? {
2988
+ isValidSession: true
2989
+ } : {
2990
+ isValidSession: false
2991
+ }, "百家号账号有效性检测完成!");
2992
+ } catch (error) {
2993
+ return (0, share_.success)({
2994
+ isValidSession: false
2995
+ }, "百家号账号有效性检测失败!");
2996
+ }
2997
+ };
2998
+ var searchAccountInfo = __webpack_require__("./src/actions/searchAccountInfo/index.ts");
2999
+ var xhsXsEncrypt = __webpack_require__("./src/utils/xhsXsEncrypt.ts");
3000
+ const FetchArticles = async (_task, params)=>{
3001
+ const { platform, cookies, token, pageNum = 1, pageSize = 10, onlySuccess = false, showOriginalData = false } = params;
3002
+ try {
3003
+ switch(platform){
3004
+ case "toutiao":
3005
+ {
3006
+ const http = new utils_http.e({
3007
+ headers: {
3008
+ cookie: cookies.map((it)=>`${it.name}=${it.value}`).join(";")
3009
+ }
3010
+ });
3011
+ const visitedUid = await http.api({
3012
+ url: "https://mp.toutiao.com/mp/agw/creator_center/user_info?",
3013
+ method: "get",
3014
+ params: {
3015
+ app_id: 1231
3016
+ }
3017
+ });
3018
+ const articleInfo = await http.api({
3019
+ method: "get",
3020
+ url: "https://mp.toutiao.com/api/feed/mp_provider/v1/",
3021
+ params: {
3022
+ provider_type: "mp_provider",
3023
+ aid: "13",
3024
+ app_name: "news_article",
3025
+ category: "mp_all",
3026
+ channel: "",
3027
+ stream_api_version: "88",
3028
+ genre_type_switch: '{"repost":1,"small_video":1,"toutiao_graphic":1,"weitoutiao":1,"xigua_video":1}',
3029
+ device_platform: "pc",
3030
+ platform_id: "0",
3031
+ visited_uid: visitedUid.user_id_str,
3032
+ offset: (pageNum - 1) * pageSize,
3033
+ count: pageSize,
3034
+ keyword: "",
3035
+ client_extra_params: `{"category":"mp_all","real_app_id":"1231","need_forward":"true","offset_mode":"1","page_index":"1","status":${onlySuccess ? "2" : "8"},"source":"0"}`,
3036
+ app_id: "1231"
3037
+ }
3038
+ });
3039
+ const articleCell = articleInfo.data.map((item)=>({
3040
+ title: item.assembleCell.itemCell.articleBase.title,
3041
+ imageUrl: item.assembleCell.itemCell.imageList.staggerFeedCover[0].url,
3042
+ createTime: item.assembleCell.itemCell.articleBase.publishTime,
3043
+ redirectUrl: item.assembleCell.itemCell.articleBase.articleURL,
3044
+ showNum: item.assembleCell.itemCell.itemCounter.showCount,
3045
+ readNum: item.assembleCell.itemCell.itemCounter.readCount,
3046
+ likeNum: item.assembleCell.itemCell.itemCounter.diggCount,
3047
+ commentNum: item.assembleCell.itemCell.itemCounter.commentCount,
3048
+ ...showOriginalData ? {
3049
+ originalData: item
3050
+ } : {}
3051
+ }));
3052
+ const api_base_info_json = JSON.parse(articleInfo.api_base_info.app_extra_params);
3053
+ return (0, share_.success)({
3054
+ articleCell,
3055
+ pagination: {
3056
+ total: api_base_info_json.total_count,
3057
+ pageNum,
3058
+ pageSize
3059
+ }
3060
+ }, "头条号文章获取成功");
3061
+ }
3062
+ case "weixin":
3063
+ {
3064
+ if (!token) return {
3065
+ code: 200,
3066
+ message: "缺少token",
3067
+ data: null
3068
+ };
3069
+ const http = new utils_http.e({
3070
+ headers: {
3071
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";")
3072
+ }
3073
+ });
3074
+ const ParsePublishPage = (body)=>{
3075
+ const decodeHtml = (str)=>str.replace(/&quot;/g, '"').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#39;/g, "'").replace(/&nbsp;/g, ' ');
3076
+ const match = body.match(/publish_page\s*=\s*(\{[\s\S]*?\})\s*;/);
3077
+ if (!match) throw new Error('无法提取 publish_page 字段');
3078
+ const rawPublishPageStr = match[1];
3079
+ const parsedData = JSON.parse(rawPublishPageStr);
3080
+ const finalData = {
3081
+ ...parsedData,
3082
+ publish_list: parsedData.publish_list.map((item)=>{
3083
+ const decoded = decodeHtml(item.publish_info);
3084
+ const parsedInfo = JSON.parse(decoded);
3085
+ return {
3086
+ publish_type: item.publish_type,
3087
+ publish_info: parsedInfo
3088
+ };
3089
+ })
3090
+ };
3091
+ return finalData;
3092
+ };
3093
+ const rawArticlesInfo = await http.api({
3094
+ method: "get",
3095
+ url: 'https://mp.weixin.qq.com/cgi-bin/appmsgpublish?sub=list&begin=0&count=10&token=1453947575&lang=zh_CN',
3096
+ params: {
3097
+ sub: "list",
3098
+ begin: (pageNum - 1) * pageSize,
3099
+ count: pageSize,
3100
+ token: token,
3101
+ lang: "zh_CN"
3102
+ }
3103
+ });
3104
+ const articlesInfo = ParsePublishPage(rawArticlesInfo);
3105
+ const articleCell = articlesInfo?.publish_list.map((item)=>({
3106
+ title: item.publish_info.appmsg_info[0].title,
3107
+ imageUrl: item.publish_info.appmsg_info[0].cover,
3108
+ createTime: item.publish_info.appmsg_info[0].line_info.send_time,
3109
+ redirectUrl: item.publish_info.appmsg_info[0].content_url,
3110
+ readNum: item.publish_info.appmsg_info[0].read_num,
3111
+ likeNum: item.publish_info.appmsg_info[0].old_like_num,
3112
+ shareNum: item.publish_info.appmsg_info[0].share_num,
3113
+ recommendNum: item.publish_info.appmsg_info[0].like_num,
3114
+ ...showOriginalData ? {
3115
+ originalData: item
3116
+ } : {}
3117
+ }));
3118
+ return (0, share_.success)({
3119
+ articleCell,
3120
+ ...onlySuccess ? {
3121
+ pagination: {
3122
+ total: articlesInfo?.total_count,
3123
+ pageNum,
3124
+ pageSize
3125
+ }
3126
+ } : null
3127
+ }, "微信文章获取成功");
3128
+ }
3129
+ case "baijiahao":
3130
+ {
3131
+ if (!token) return {
3132
+ code: 200,
3133
+ message: "缺少token",
3134
+ data: null
3135
+ };
3136
+ const http = new utils_http.e({
3137
+ headers: {
3138
+ cookie: cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
3139
+ token: token
3140
+ }
3141
+ });
3142
+ async function fetchArticles(pageNum, pageSize, onlySuccess = false) {
3143
+ return await http.api({
3144
+ method: "get",
3145
+ url: "https://baijiahao.baidu.com/pcui/article/lists",
3146
+ params: {
3147
+ currentPage: pageNum,
3148
+ pageSize: pageSize,
3149
+ search: "",
3150
+ type: "",
3151
+ collection: onlySuccess ? "publish" : "",
3152
+ clearBeforeFetch: false,
3153
+ dynamic: 1
3154
+ }
3155
+ });
3156
+ }
3157
+ const articleInfo = await fetchArticles(pageNum, pageSize, onlySuccess);
3158
+ let filtered = articleInfo.data.list.filter((item)=>"draft" !== item.status);
3159
+ const totalPage = articleInfo.data.page?.totalPage || 1;
3160
+ let currentPage = pageNum + 1;
3161
+ const usedPages = new Set();
3162
+ while(filtered.length < pageSize && currentPage <= totalPage){
3163
+ if (usedPages.has(currentPage)) {
3164
+ currentPage++;
3165
+ continue;
3166
+ }
3167
+ const res = await fetchArticles(currentPage, pageSize, onlySuccess);
3168
+ usedPages.add(currentPage);
3169
+ const validItems = res.data.list.filter((item)=>"draft" !== item.status);
3170
+ filtered.push(...validItems);
3171
+ currentPage++;
3172
+ }
3173
+ const final = filtered.slice(0, pageSize);
3174
+ const articleCell = final.map((item)=>({
3175
+ title: item.title,
3176
+ imageUrl: JSON.parse(item.cover_images)[0].src,
3177
+ createTime: Math.floor(new Date(item.publish_at.replace(/-/g, "/")).getTime() / 1000),
3178
+ redirectUrl: item.url,
3179
+ recommendNum: item.rec_amount,
3180
+ collectNum: item.collection_amount,
3181
+ readNum: item.read_amount,
3182
+ likeNum: item.like_amount,
3183
+ commentNum: item.comment_amount,
3184
+ shareNum: item.share_amount,
3185
+ ...showOriginalData ? {
3186
+ originalData: item
3187
+ } : {}
3188
+ }));
3189
+ return (0, share_.success)({
3190
+ articleCell,
3191
+ ...onlySuccess ? {
3192
+ pagination: {
3193
+ total: articleInfo.data.page?.totalCount,
3194
+ pageNum,
3195
+ pageSize
3196
+ }
3197
+ } : null
3198
+ }, "百家号文章获取成功");
3199
+ }
3200
+ case "xiaohongshu":
3201
+ {
3202
+ const xsEncrypt = new xhsXsEncrypt.H();
3203
+ const a1Cookie = cookies.find((it)=>"a1" === it.name)?.value;
3204
+ if (!a1Cookie) return {
3205
+ code: 200,
3206
+ message: "账号数据异常",
3207
+ data: null
3208
+ };
3209
+ if (10 != pageSize) return {
3210
+ code: 200,
3211
+ message: "小红书pageSize不可修改",
3212
+ data: null
3213
+ };
3214
+ const http = new utils_http.e({
3215
+ headers: {
3216
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
3217
+ referer: "https://creator.xiaohongshu.com",
3218
+ origin: "https://creator.xiaohongshu.com"
3219
+ }
3220
+ });
3221
+ const xt = Date.now().toString();
3222
+ const serveUrl = `/web_api/sns/v5/creator/note/user/posted?tab=${onlySuccess ? 1 : 0}&page=${pageNum - 1}`;
3223
+ const xs = await xsEncrypt.encryptXs(serveUrl, a1Cookie, xt);
3224
+ const articleInfo = await http.api({
3225
+ method: "get",
3226
+ baseURL: "https://edith.xiaohongshu.com",
3227
+ url: serveUrl,
3228
+ headers: {
3229
+ "x-s": xs,
3230
+ "x-t": xt
3231
+ }
3232
+ });
3233
+ const articleCell = articleInfo.data.notes.map((item)=>({
3234
+ title: item.display_title,
3235
+ imageUrl: item.images_list[0].url,
3236
+ createTime: Math.floor(new Date(item.time.replace(/-/g, "/")).getTime() / 1000),
3237
+ redirectUrl: `https://www.xiaohongshu.com/explore/${item.id}?xsec_token=${item.xsec_token}&xsec_source=pc_creatormng`,
3238
+ readNum: item.view_count,
3239
+ likeNum: item.likes,
3240
+ commentNum: item.comments_count,
3241
+ collectNum: item.collected_count,
3242
+ shareNum: item.shared_count,
3243
+ ...showOriginalData ? {
3244
+ originalData: item
3245
+ } : {}
3246
+ }));
3247
+ return (0, share_.success)({
3248
+ articleCell,
3249
+ ...onlySuccess ? {
3250
+ pagination: {
3251
+ total: articleInfo.data.tags[0].notes_count,
3252
+ pageNum,
3253
+ pageSize
3254
+ }
3255
+ } : null
3256
+ }, "小红书文章获取成功");
3257
+ }
3258
+ default:
3259
+ return {
3260
+ code: 200,
3261
+ message: "暂不支持该平台",
3262
+ data: null
3263
+ };
3264
+ }
3265
+ } catch (error) {
3266
+ console.error("获取文章数据失败:", error);
3267
+ return {
3268
+ code: 500,
3269
+ message: "获取文章数据失败",
3270
+ data: null
3271
+ };
3272
+ }
3273
+ };
3274
+ const getWeixinConfig = async (_task, params)=>{
3275
+ const http = new utils_http.e({
3276
+ headers: {
3277
+ cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";")
3278
+ }
3279
+ });
3280
+ const fingerprint = "4695500bc93ab4ce8fb2692da6564e04";
3281
+ const res = await http.api({
3282
+ method: "get",
3283
+ url: "https://mp.weixin.qq.com/cgi-bin/masssendpage",
3284
+ params: {
3285
+ f: 'json',
3286
+ token: params.token,
3287
+ lang: 'zh_CN',
3288
+ ajax: 1,
3289
+ fingerprint: fingerprint,
3290
+ random: Math.random().toString()
3291
+ }
3292
+ });
3293
+ const filtered = {
3294
+ publishQuota: 0 === res.base_resp.ret ? res.quota_detail_list.filter((item)=>"kQuotaTypeMassSendNormal" === item.quota_type).map((item)=>item.quota_item_list) : []
3295
+ };
3296
+ return (0, share_.success)(filtered, 0 === res.base_resp.ret ? "微信配置信息获取成功!" : "微信配置信息获取失败!");
3297
+ };
2546
3298
  const weitoutiaoPublish_mock_mockAction = async (task, params)=>{
2547
3299
  const tmpCachePath = task.getTmpPath();
2548
- const http = new Http({
3300
+ const http = new utils_http.e({
2549
3301
  headers: {
2550
3302
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
2551
3303
  origin: "https://mp.toutiao.com",
@@ -2564,8 +3316,8 @@ var __webpack_exports__ = {};
2564
3316
  const imageList = [];
2565
3317
  if (params.banners && params.banners.length > 0) {
2566
3318
  const images = await Promise.all(params.banners.map((url)=>{
2567
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
2568
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
3319
+ const fileName = (0, share_.getFilenameFromUrl)(url);
3320
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2569
3321
  }));
2570
3322
  const res = await Promise.all(images.map(async (it)=>{
2571
3323
  const formData = new (external_form_data_default())();
@@ -2612,7 +3364,7 @@ var __webpack_exports__ = {};
2612
3364
  url: "https://mp.toutiao.com/mp/agw/article/wtt",
2613
3365
  data: syncData
2614
3366
  });
2615
- return (0, share_namespaceObject.success)(res.data);
3367
+ return (0, share_.success)(res.data);
2616
3368
  };
2617
3369
  const weitoutiaoPublish_rpa_rpaAction = async (task, params)=>{
2618
3370
  const commonCookies = {
@@ -2645,8 +3397,8 @@ var __webpack_exports__ = {};
2645
3397
  await descInstance.fill(params.content);
2646
3398
  if (params.banners && params.banners?.length > 0) {
2647
3399
  const images = await Promise.all(params.banners.map((url)=>{
2648
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
2649
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
3400
+ const fileName = (0, share_.getFilenameFromUrl)(url);
3401
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2650
3402
  }));
2651
3403
  const fileChooserPromise = page.waitForEvent("filechooser");
2652
3404
  await page.locator(".toolbar .syl-toolbar-tool.weitoutiao-image-plugin").click();
@@ -2677,12 +3429,12 @@ var __webpack_exports__ = {};
2677
3429
  await declarationFormItem.locator(`.byte-checkbox:has(input[value="${params.declaration}"])`).click();
2678
3430
  }
2679
3431
  await page.locator(".footer-wrap button.publish-content").click();
2680
- return (0, share_namespaceObject.success)("");
3432
+ return (0, share_.success)("");
2681
3433
  };
2682
3434
  const weitoutiaoPublish = async (task, params)=>{
2683
3435
  if ("rpa" === params.actionType) return weitoutiaoPublish_rpa_rpaAction(task, params);
2684
3436
  if ("mockApi" === params.actionType) return weitoutiaoPublish_mock_mockAction(task, params);
2685
- return executeAction(weitoutiaoPublish_mock_mockAction, weitoutiaoPublish_rpa_rpaAction)(task, params);
3437
+ return (0, utils.jo)(weitoutiaoPublish_mock_mockAction, weitoutiaoPublish_rpa_rpaAction)(task, params);
2686
3438
  };
2687
3439
  const scanRetryMaxCount = 30;
2688
3440
  const QuotaType = {
@@ -2739,7 +3491,7 @@ var __webpack_exports__ = {};
2739
3491
  const fingerprint = "4695500bc93ab4ce8fb2692da6564e04";
2740
3492
  const client_time_diff = +Number("1743488763") - Math.floor(new Date().getTime() / 1000);
2741
3493
  const tmpCachePath = task.getTmpPath();
2742
- const http = new Http({
3494
+ const http = new utils_http.e({
2743
3495
  headers: {
2744
3496
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0",
2745
3497
  Cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
@@ -2782,12 +3534,12 @@ var __webpack_exports__ = {};
2782
3534
  const uploadImages = async (images)=>{
2783
3535
  const cloudImages = [];
2784
3536
  const localImages = await Promise.all(images.map((url)=>{
2785
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
2786
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
3537
+ const fileName = (0, share_.getFilenameFromUrl)(url);
3538
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
2787
3539
  }));
2788
3540
  for(let index = 0; index < images.length; index++){
2789
3541
  const image = localImages[index];
2790
- const fileState = getFileState(image);
3542
+ const fileState = (0, utils.H8)(image);
2791
3543
  const formData = new (external_form_data_default())();
2792
3544
  formData.append("id", `WU_FILE_${index + 1}`);
2793
3545
  formData.append("name", fileState.name);
@@ -2805,9 +3557,9 @@ var __webpack_exports__ = {};
2805
3557
  }
2806
3558
  return cloudImages;
2807
3559
  };
2808
- const originContentImages = extractImgTag(params.content);
3560
+ const originContentImages = (0, utils.E_)(params.content);
2809
3561
  const targetContentImages = await uploadImages(originContentImages);
2810
- const content = replaceImgSrc(params.content, (dom)=>{
3562
+ const content = (0, utils.I)(params.content, (dom)=>{
2811
3563
  if (dom.attribs.src) {
2812
3564
  const idx = originContentImages.findIndex((it)=>it === dom.attribs.src);
2813
3565
  dom.attribs.src = targetContentImages[idx].cdn_url;
@@ -2930,7 +3682,7 @@ var __webpack_exports__ = {};
2930
3682
  const task_id = rewardbind.task_id;
2931
3683
  let code = null;
2932
3684
  for(let i = 0; i < scanRetryMaxCount; i++){
2933
- await (0, share_namespaceObject.sleep)(2000);
3685
+ await (0, share_.sleep)(2000);
2934
3686
  const checkScanResult = await http.api({
2935
3687
  method: "get",
2936
3688
  url: "https://mp.weixin.qq.com/acct/writermgr",
@@ -3191,7 +3943,7 @@ var __webpack_exports__ = {};
3191
3943
  appmsgid: appMsgId
3192
3944
  };
3193
3945
  for(let i = 0; i < 10; i++){
3194
- await (0, share_namespaceObject.sleep)(1000);
3946
+ await (0, share_.sleep)(1000);
3195
3947
  const lastData = {
3196
3948
  ...copyrightStatData,
3197
3949
  first_check: 0 === i ? 1 : 0
@@ -3199,7 +3951,7 @@ var __webpack_exports__ = {};
3199
3951
  const checkCopyrightStatRes = await checkCopyrightStat(http, params, lastData);
3200
3952
  if (checkCopyrightStatRes.open_ad_reprint_status) break;
3201
3953
  }
3202
- await (0, share_namespaceObject.sleep)(300);
3954
+ await (0, share_.sleep)(300);
3203
3955
  await http.api({
3204
3956
  method: "post",
3205
3957
  url: "https://mp.weixin.qq.com/cgi-bin/masssend",
@@ -3220,7 +3972,7 @@ var __webpack_exports__ = {};
3220
3972
  random: Math.random().toString()
3221
3973
  })
3222
3974
  });
3223
- await (0, share_namespaceObject.sleep)(300);
3975
+ await (0, share_.sleep)(300);
3224
3976
  await http.api({
3225
3977
  method: "post",
3226
3978
  url: "https://mp.weixin.qq.com/cgi-bin/masssend",
@@ -3238,7 +3990,7 @@ var __webpack_exports__ = {};
3238
3990
  random: Math.random().toString()
3239
3991
  })
3240
3992
  });
3241
- await (0, share_namespaceObject.sleep)(300);
3993
+ await (0, share_.sleep)(300);
3242
3994
  const getTicketResult = await http.api({
3243
3995
  method: "post",
3244
3996
  url: "https://mp.weixin.qq.com/misc/safeassistant",
@@ -3258,7 +4010,7 @@ var __webpack_exports__ = {};
3258
4010
  }),
3259
4011
  defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR
3260
4012
  });
3261
- await (0, share_namespaceObject.sleep)(300);
4013
+ await (0, share_.sleep)(300);
3262
4014
  const getUuidResult = await http.api({
3263
4015
  method: "post",
3264
4016
  url: "https://mp.weixin.qq.com/safe/safeqrconnect",
@@ -3281,14 +4033,14 @@ var __webpack_exports__ = {};
3281
4033
  }),
3282
4034
  defaultErrorMsg: GET_QRCODE_DEFAULT_ERROR
3283
4035
  });
3284
- await (0, share_namespaceObject.sleep)(1000);
4036
+ await (0, share_.sleep)(1000);
3285
4037
  if (0 !== getUuidResult.genuuid_res) return {
3286
4038
  code: 200,
3287
4039
  message: GET_QRCODE_DEFAULT_ERROR,
3288
4040
  data: ""
3289
4041
  };
3290
4042
  const uuid = getUuidResult.uuid;
3291
- await (0, share_namespaceObject.sleep)(1000);
4043
+ await (0, share_.sleep)(1000);
3292
4044
  const qrcodeResult = await http.api({
3293
4045
  method: "get",
3294
4046
  url: "https://mp.weixin.qq.com/safe/safeqrcode",
@@ -3313,7 +4065,7 @@ var __webpack_exports__ = {};
3313
4065
  params.safeQrcodeCallback?.(qrcodeFilePath);
3314
4066
  let code = "";
3315
4067
  for(let i = 0; i < scanRetryMaxCount; i++){
3316
- await (0, share_namespaceObject.sleep)(2000);
4068
+ await (0, share_.sleep)(2000);
3317
4069
  const checkScanResult = await http.api({
3318
4070
  method: "post",
3319
4071
  url: "https://mp.weixin.qq.com/safe/safeuuid",
@@ -3400,7 +4152,7 @@ var __webpack_exports__ = {};
3400
4152
  share_page: "1",
3401
4153
  synctxweibo: "0",
3402
4154
  operation_seq,
3403
- req_id: (0, share_namespaceObject.randomString)(32),
4155
+ req_id: (0, share_.randomString)(32),
3404
4156
  req_time: new Date().getTime() + 1e3 * client_time_diff,
3405
4157
  sync_version: "1",
3406
4158
  isFreePublish: params.masssend ? "false" : "true",
@@ -3412,8 +4164,10 @@ var __webpack_exports__ = {};
3412
4164
  }),
3413
4165
  defaultErrorMsg: params.masssend ? "文章群发异常,请尝试关闭群发或稍后重试。" : "文章发布异常,请稍后重试。"
3414
4166
  });
3415
- return (0, share_namespaceObject.success)(appMsgId, params.settingInfo.timer ? "微信公众号文章定时发布成功。" : "微信公众号发布完成。");
4167
+ return (0, share_.success)(appMsgId, params.settingInfo.timer ? "微信公众号文章定时发布成功。" : "微信公众号发布完成。");
3416
4168
  };
4169
+ var external_axios_ = __webpack_require__("axios");
4170
+ var external_axios_default = /*#__PURE__*/ __webpack_require__.n(external_axios_);
3417
4171
  const waitQrcodeResultMaxTime = 2000 * scanRetryMaxCount;
3418
4172
  const weixinPublish_rpa_rpaAction = async (task, params)=>{
3419
4173
  const tmpCachePath = task.getTmpPath();
@@ -3529,11 +4283,11 @@ var __webpack_exports__ = {};
3529
4283
  await page.waitForSelector("#editor_pannel", {
3530
4284
  state: "visible"
3531
4285
  });
3532
- PopupListener(page, '[v-transfer-dom="#vue_app"] .weui-desktop-dialog', "更新", '[v-transfer-dom="#vue_app"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', {
4286
+ (0, utils.f8)(page, '[v-transfer-dom="#vue_app"] .weui-desktop-dialog', "更新", '[v-transfer-dom="#vue_app"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', {
3533
4287
  checkInterval: 1000,
3534
4288
  stopAfterClick: false
3535
4289
  });
3536
- PopupListener(page, '[extclass="weui-desktop-dialog_simple"] .weui-desktop-dialog', "小店", '[extclass="weui-desktop-dialog_simple"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', {
4290
+ (0, utils.f8)(page, '[extclass="weui-desktop-dialog_simple"] .weui-desktop-dialog', "小店", '[extclass="weui-desktop-dialog_simple"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', {
3537
4291
  checkInterval: 1000,
3538
4292
  stopAfterClick: true
3539
4293
  });
@@ -3545,7 +4299,7 @@ var __webpack_exports__ = {};
3545
4299
  await titleInstance.click();
3546
4300
  await titleInstance.fill(params.settingInfo.wxAuthor);
3547
4301
  }
3548
- await copyHtmlToClipboard(page, params.content);
4302
+ await (0, utils.qN)(page, params.content);
3549
4303
  await page.click(".js_editor_area .ProseMirror");
3550
4304
  await page.keyboard.press("Control+V");
3551
4305
  await page.locator("#article_setting_area").evaluate((node)=>node.scrollIntoView());
@@ -3555,8 +4309,8 @@ var __webpack_exports__ = {};
3555
4309
  await titleInstance.fill(params.settingInfo.wxAbstract);
3556
4310
  }
3557
4311
  if (params.settingInfo.wxCover) {
3558
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(params.settingInfo.wxCover);
3559
- const cover = await (0, share_namespaceObject.downloadImage)(params.settingInfo.wxCover, external_node_path_default().join(tmpCachePath, fileName));
4312
+ const fileName = (0, share_.getFilenameFromUrl)(params.settingInfo.wxCover);
4313
+ const cover = await (0, share_.downloadImage)(params.settingInfo.wxCover, external_node_path_default().join(tmpCachePath, fileName));
3560
4314
  await page.locator("#article_setting_area #js_cover_area .select-cover__btn").hover();
3561
4315
  await page.locator("#article_setting_area #js_cover_area .pop-opr__group-select-cover .pop-opr__list .pop-opr__item").filter({
3562
4316
  hasText: "从图片库选择"
@@ -3742,7 +4496,7 @@ var __webpack_exports__ = {};
3742
4496
  const articleId = await new Promise(async (resolve)=>{
3743
4497
  const handleResponse = async (response)=>{
3744
4498
  const url = response.url();
3745
- const query = parseUrlQueryString(url);
4499
+ const query = (0, utils.hc)(url);
3746
4500
  if (url.includes("/cgi-bin/operate_appmsg") && query?.t === "ajax-response") {
3747
4501
  const jsonResponse = await response.json();
3748
4502
  page.off("response", handleResponse);
@@ -3756,15 +4510,15 @@ var __webpack_exports__ = {};
3756
4510
  await page.locator(".mass-send .mass-send__td-setting", {
3757
4511
  hasText: "定时发表"
3758
4512
  }).locator(".weui-desktop-switch__box").check();
3759
- let dateD = Number(TimeFormatter.format(params.settingInfo.timer, "d"));
3760
- let nowD = Number(TimeFormatter.format(Date.now(), "d"));
4513
+ let dateD = Number(utils.Tx.format(params.settingInfo.timer, "d"));
4514
+ let nowD = Number(utils.Tx.format(Date.now(), "d"));
3761
4515
  await page.locator(".mass-send__timer .weui-desktop-form__dropdown__dt").click();
3762
4516
  const dropMenu = page.locator(".mass-send__timer .weui-desktop-dropdown-menu").locator(".weui-desktop-dropdown__list-ele");
3763
4517
  await dropMenu.filter({
3764
- hasText: dateD == nowD ? "今天" : dateD == nowD + 1 ? "明天" : TimeFormatter.format(params.settingInfo.timer, "M月d日")
4518
+ hasText: dateD == nowD ? "今天" : dateD == nowD + 1 ? "明天" : utils.Tx.format(params.settingInfo.timer, "M月d日")
3765
4519
  }).click();
3766
4520
  const timeDropMenu = page.locator(".mass-send__timer .weui-desktop-picker__time:visible");
3767
- await timeDropMenu.locator(".weui-desktop-form__input").fill(TimeFormatter.format(params.settingInfo.timer, "hh:mm"));
4521
+ await timeDropMenu.locator(".weui-desktop-form__input").fill(utils.Tx.format(params.settingInfo.timer, "hh:mm"));
3768
4522
  await timeDropMenu.locator("i.weui-desktop-icon__time").click();
3769
4523
  }
3770
4524
  });
@@ -3842,15 +4596,15 @@ var __webpack_exports__ = {};
3842
4596
  }
3843
4597
  await page.waitForTimeout(3000);
3844
4598
  await page.close();
3845
- return (0, share_namespaceObject.success)(articleId);
4599
+ return (0, share_.success)(articleId);
3846
4600
  };
3847
4601
  const weixinPublish = async (task, _params)=>{
3848
- const params = defaultParams(_params, {
4602
+ const params = (0, utils.Tb)(_params, {
3849
4603
  masssend: true
3850
4604
  });
3851
4605
  if ("rpa" === params.actionType) return weixinPublish_rpa_rpaAction(task, params);
3852
4606
  if ("mockApi" === params.actionType) return weixinPublish_mock_mockAction(task, params);
3853
- return executeAction(weixinPublish_mock_mockAction, weixinPublish_rpa_rpaAction)(task, params);
4607
+ return (0, utils.jo)(weixinPublish_mock_mockAction, weixinPublish_rpa_rpaAction)(task, params);
3854
4608
  };
3855
4609
  const saveDraft = (http, params, data)=>{
3856
4610
  const formData = new (external_form_data_default())();
@@ -3870,7 +4624,7 @@ var __webpack_exports__ = {};
3870
4624
  };
3871
4625
  const weixinmpPublish_mock_mockAction = async (task, params)=>{
3872
4626
  const tmpCachePath = task.getTmpPath();
3873
- const http = new Http({
4627
+ const http = new utils_http.e({
3874
4628
  headers: {
3875
4629
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
3876
4630
  origin: "https://mp.weixin.qq.com",
@@ -3881,12 +4635,12 @@ var __webpack_exports__ = {};
3881
4635
  const cropResult = {};
3882
4636
  if (params.banners && params.banners.length > 0) {
3883
4637
  const images = await Promise.all(params.banners.map((url)=>{
3884
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
3885
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4638
+ const fileName = (0, share_.getFilenameFromUrl)(url);
4639
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
3886
4640
  }));
3887
4641
  for(let index = 0; index < images.length; index++){
3888
4642
  const image = images[index];
3889
- const fileState = getFileState(image);
4643
+ const fileState = (0, utils.H8)(image);
3890
4644
  const formData = new (external_form_data_default())();
3891
4645
  formData.append("id", `WU_FILE_${index + 1}`);
3892
4646
  formData.append("name", fileState.name);
@@ -3941,7 +4695,7 @@ var __webpack_exports__ = {};
3941
4695
  ];
3942
4696
  cropFormData.append("size_count", cropRatios.length);
3943
4697
  const cropCoordinates = cropRatios.map((r, idx)=>{
3944
- const cropCoordinate = calculateCropCoordinates(colorResponseData.width, colorResponseData.height, r);
4698
+ const cropCoordinate = (0, utils.e0)(colorResponseData.width, colorResponseData.height, r);
3945
4699
  cropFormData.append(`size${idx}_x1`, cropCoordinate.x1);
3946
4700
  cropFormData.append(`size${idx}_y1`, cropCoordinate.y1);
3947
4701
  cropFormData.append(`size${idx}_x2`, cropCoordinate.x2);
@@ -3994,7 +4748,7 @@ var __webpack_exports__ = {};
3994
4748
  content0: params.content,
3995
4749
  share_imageinfo0: JSON.stringify(shareImageInfos)
3996
4750
  });
3997
- return (0, share_namespaceObject.success)(res);
4751
+ return (0, share_.success)(res);
3998
4752
  };
3999
4753
  const sourceText = {
4000
4754
  ai: "内容由AI生成",
@@ -4031,8 +4785,8 @@ var __webpack_exports__ = {};
4031
4785
  const container = page.locator("#editor_pannel");
4032
4786
  if (params.banners && params.banners.length > 0) {
4033
4787
  const images = await Promise.all(params.banners.map((url)=>{
4034
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
4035
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4788
+ const fileName = (0, share_.getFilenameFromUrl)(url);
4789
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4036
4790
  }));
4037
4791
  const fileChooserPromise = page.waitForEvent("filechooser");
4038
4792
  await container.locator(".image-selector__add").hover();
@@ -4057,72 +4811,20 @@ var __webpack_exports__ = {};
4057
4811
  if (params.banners && params.banners.length > 0) await page.waitForSelector("#editor_pannel .image-selector .image-selector__preview");
4058
4812
  if (params.draft) await container.locator("#bottom_main #js_submit button").click();
4059
4813
  else await container.locator("#bottom_main #js_send button").click();
4060
- return (0, share_namespaceObject.success)("");
4814
+ return (0, share_.success)("");
4061
4815
  };
4062
4816
  const weixinmpPublish = async (task, params)=>{
4063
4817
  if ("rpa" === params.actionType) return weixinmpPublish_rpa_rpaAction(task, params);
4064
4818
  if ("mockApi" === params.actionType) return weixinmpPublish_mock_mockAction(task, params);
4065
- return executeAction(weixinmpPublish_mock_mockAction, weixinmpPublish_rpa_rpaAction)(task, params);
4819
+ return (0, utils.jo)(weixinmpPublish_mock_mockAction, weixinmpPublish_rpa_rpaAction)(task, params);
4066
4820
  };
4067
- const external_node_buffer_namespaceObject = require("node:buffer");
4068
- const external_node_crypto_namespaceObject = require("node:crypto");
4069
- var external_node_crypto_default = /*#__PURE__*/ __webpack_require__.n(external_node_crypto_namespaceObject);
4070
- class XsEncrypt {
4071
- async encryptMD5(url) {
4072
- return external_node_crypto_default().createHash("md5").update(url, "utf8").digest("hex");
4073
- }
4074
- async encryptText(text) {
4075
- const textEncoded = external_node_buffer_namespaceObject.Buffer.from(text).toString("base64");
4076
- const cipher = external_node_crypto_default().createCipheriv("aes-128-cbc", new Uint8Array(this.keyBytes), new Uint8Array(this.iv));
4077
- const ciphertext = cipher.update(textEncoded, "utf8", "base64");
4078
- return ciphertext + cipher.final("base64");
4079
- }
4080
- async base64ToHex(encodedData) {
4081
- const decodedData = external_node_buffer_namespaceObject.Buffer.from(encodedData, "base64");
4082
- return decodedData.toString("hex");
4083
- }
4084
- async encryptPayload(payload, platform) {
4085
- const hexPayload = await this.base64ToHex(payload);
4086
- const obj = {
4087
- signSvn: "56",
4088
- signType: "x2",
4089
- appID: platform,
4090
- signVersion: "1",
4091
- payload: hexPayload
4092
- };
4093
- const jsonString = JSON.stringify(obj, null, 0);
4094
- return external_node_buffer_namespaceObject.Buffer.from(jsonString).toString("base64");
4095
- }
4096
- async encryptXs(url, a1, ts, platform = "xhs-pc-web") {
4097
- const text = `x1=${await this.encryptMD5(`url=${url}`)};x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0|1|0|0|0;x3=${a1};x4=${ts};`;
4098
- return `XYW_${await this.encryptPayload(await this.encryptText(text), platform)}`;
4099
- }
4100
- dumps(...rest) {
4101
- const [data, replacer = null, space = 0] = rest;
4102
- return JSON.stringify(data, replacer, space).replace(/\n/g, "").replace(/":\s+"/g, '":"');
4103
- }
4104
- constructor(){
4105
- this.words = [
4106
- 929260340,
4107
- 1633971297,
4108
- 895580464,
4109
- 925905270
4110
- ];
4111
- this.keyBytes = external_node_buffer_namespaceObject.Buffer.concat(this.words.map((word)=>new Uint8Array(external_node_buffer_namespaceObject.Buffer.from([
4112
- word >> 24 & 0xff,
4113
- word >> 16 & 0xff,
4114
- word >> 8 & 0xff,
4115
- 0xff & word
4116
- ]))));
4117
- this.iv = external_node_buffer_namespaceObject.Buffer.from("4uzjr7mbsibcaldp", "utf8");
4118
- }
4119
- }
4120
4821
  const xiaohongshuPublish_mock_errnoMap = {
4121
4822
  915: "所属C端账号手机号被修改,请重新登录",
4823
+ 914: "所属C端账号密码被修改,请重新登录",
4122
4824
  903: "账户已登出,需重新登陆重试!",
4123
4825
  902: "登录已过期,请重新登录!"
4124
4826
  };
4125
- const xsEncrypt = new XsEncrypt();
4827
+ const mock_xsEncrypt = new xhsXsEncrypt.H();
4126
4828
  const xiaohongshuPublish_mock_mockAction = async (task, params)=>{
4127
4829
  const tmpCachePath = task.getTmpPath();
4128
4830
  const a1Cookie = params.cookies.find((it)=>"a1" === it.name)?.value;
@@ -4131,7 +4833,7 @@ var __webpack_exports__ = {};
4131
4833
  message: "账号数据异常,请重新绑定账号后重试。",
4132
4834
  data: ""
4133
4835
  };
4134
- const http = new Http({
4836
+ const http = new utils_http.e({
4135
4837
  headers: {
4136
4838
  cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
4137
4839
  origin: "https://creator.xiaohongshu.com",
@@ -4152,7 +4854,7 @@ var __webpack_exports__ = {};
4152
4854
  });
4153
4855
  const fetchCoverUrl = `/api/media/v1/upload/creator/permit?biz_name=spectrum&scene=image&file_count=${params.banners.length}&version=1&source=web`;
4154
4856
  const xt = Date.now().toString();
4155
- const xs = await xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt);
4857
+ const xs = await mock_xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt);
4156
4858
  const coverIdInfo = await http.api({
4157
4859
  method: "get",
4158
4860
  baseURL: "https://creator.xiaohongshu.com",
@@ -4171,8 +4873,8 @@ var __webpack_exports__ = {};
4171
4873
  data: ""
4172
4874
  };
4173
4875
  const uploadFile = async (url, index)=>{
4174
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
4175
- const localUrl = await (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4876
+ const fileName = (0, share_.getFilenameFromUrl)(url);
4877
+ const localUrl = await (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4176
4878
  const ossFileId = coverIds[index];
4177
4879
  const fileBuffer = external_node_fs_default().readFileSync(localUrl);
4178
4880
  await http.api({
@@ -4195,9 +4897,9 @@ var __webpack_exports__ = {};
4195
4897
  const topicData = {
4196
4898
  topic_names: topic["name"]
4197
4899
  };
4198
- const topicDataStr = xsEncrypt.dumps(topicData);
4900
+ const topicDataStr = mock_xsEncrypt.dumps(topicData);
4199
4901
  const publishXt = Date.now().toString();
4200
- const publishXs = await xsEncrypt.encryptXs(`/web_api/sns/capa/postgw/topic/batch_customized${topicDataStr}`, a1Cookie, publishXt);
4902
+ const publishXs = await mock_xsEncrypt.encryptXs(`/web_api/sns/capa/postgw/topic/batch_customized${topicDataStr}`, a1Cookie, publishXt);
4201
4903
  let createTopic = await http.api({
4202
4904
  method: "POST",
4203
4905
  url: "https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized",
@@ -4296,9 +4998,9 @@ var __webpack_exports__ = {};
4296
4998
  } : {}
4297
4999
  };
4298
5000
  publishData.common.business_binds = JSON.stringify(business_binds);
4299
- const publishDataStr = xsEncrypt.dumps(publishData);
5001
+ const publishDataStr = mock_xsEncrypt.dumps(publishData);
4300
5002
  const publishXt = Date.now().toString();
4301
- const publishXs = await xsEncrypt.encryptXs(`/web_api/sns/v2/note${publishDataStr}`, a1Cookie, publishXt);
5003
+ const publishXs = await mock_xsEncrypt.encryptXs(`/web_api/sns/v2/note${publishDataStr}`, a1Cookie, publishXt);
4302
5004
  const publishResult = await http.api({
4303
5005
  method: "post",
4304
5006
  url: "https://edith.xiaohongshu.com/web_api/sns/v2/note",
@@ -4309,9 +5011,9 @@ var __webpack_exports__ = {};
4309
5011
  },
4310
5012
  defaultErrorMsg: "文章发布异常,请稍后重试。"
4311
5013
  });
4312
- return (0, share_namespaceObject.success)(publishResult.data?.id);
5014
+ return (0, share_.success)(publishResult.data?.id);
4313
5015
  };
4314
- const rpa_xsEncrypt = new XsEncrypt();
5016
+ const rpa_xsEncrypt = new xhsXsEncrypt.H();
4315
5017
  const xiaohongshuPublish_rpa_rpaAction = async (task, params)=>{
4316
5018
  const commonCookies = {
4317
5019
  path: "/",
@@ -4420,8 +5122,8 @@ var __webpack_exports__ = {};
4420
5122
  hasText: /^上传图文$/
4421
5123
  }).click();
4422
5124
  const images = await Promise.all(params.banners.map((url)=>{
4423
- const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
4424
- return (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
5125
+ const fileName = (0, share_.getFilenameFromUrl)(url);
5126
+ return (0, share_.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
4425
5127
  }));
4426
5128
  const fileChooserPromise = page.waitForEvent("filechooser");
4427
5129
  await page.getByRole("textbox").click();
@@ -4519,15 +5221,15 @@ var __webpack_exports__ = {};
4519
5221
  page.locator(".submit .publishBtn").click();
4520
5222
  });
4521
5223
  await page.close();
4522
- return (0, share_namespaceObject.success)(response);
5224
+ return (0, share_.success)(response);
4523
5225
  };
4524
5226
  const xiaohongshuPublish = async (task, params)=>{
4525
5227
  if ("rpa" === params.actionType) return xiaohongshuPublish_rpa_rpaAction(task, params);
4526
5228
  if ("mockApi" === params.actionType) return xiaohongshuPublish_mock_mockAction(task, params);
4527
- return executeAction(xiaohongshuPublish_mock_mockAction, xiaohongshuPublish_rpa_rpaAction)(task, params);
5229
+ return (0, utils.jo)(xiaohongshuPublish_mock_mockAction, xiaohongshuPublish_rpa_rpaAction)(task, params);
4528
5230
  };
4529
5231
  var package_namespaceObject = {
4530
- i8: "1.2.12"
5232
+ i8: "1.2.13"
4531
5233
  };
4532
5234
  class Action {
4533
5235
  constructor(task){
@@ -4540,15 +5242,33 @@ var __webpack_exports__ = {};
4540
5242
  try {
4541
5243
  responseData = await func(this.task, params);
4542
5244
  } catch (error) {
4543
- responseData = Http.handleApiError(error);
5245
+ responseData = utils_http.e.handleApiError(error);
4544
5246
  }
4545
5247
  if (200 === responseData.code) this.task.logger.info(`${func.name} action params error`, responseData);
4546
5248
  else if (0 !== responseData.code) {
4547
- this.task.logger.error(responseData.message || `${func.name} 执行失败`, stringifyError(responseData.data), responseData.extra);
5249
+ this.task.logger.error(responseData.message || `${func.name} 执行失败`, (0, utils.n)(responseData.data), responseData.extra);
4548
5250
  this.task.logger.info(`${func.name} action failed`);
4549
5251
  } else this.task.logger.info(`${func.name} action success`);
4550
5252
  return responseData;
4551
5253
  }
5254
+ FetchArticles(params) {
5255
+ return this.bindTask(FetchArticles, params);
5256
+ }
5257
+ SearchAccountInfo(params) {
5258
+ return this.bindTask(searchAccountInfo.A, params);
5259
+ }
5260
+ TTSessionCheck(params) {
5261
+ return this.bindTask(TTSessionCheck, params);
5262
+ }
5263
+ WxSessionCheck(params) {
5264
+ return this.bindTask(WxSessionCheck, params);
5265
+ }
5266
+ XhsSessionCheck(params) {
5267
+ return this.bindTask(XhsSessionCheck, params);
5268
+ }
5269
+ BjhSessionCheck(params) {
5270
+ return this.bindTask(BjhSessionCheck, params);
5271
+ }
4552
5272
  searchToutiaoTopicList(params) {
4553
5273
  return this.bindTask(searchToutiaoTopicList, params);
4554
5274
  }
@@ -4573,6 +5293,9 @@ var __webpack_exports__ = {};
4573
5293
  getToutiaoConfig(params) {
4574
5294
  return this.bindTask(getToutiaoConfig, params);
4575
5295
  }
5296
+ getWeixinConfig(params) {
5297
+ return this.bindTask(getWeixinConfig, params);
5298
+ }
4576
5299
  getBaijiahaoConfig(params) {
4577
5300
  return this.bindTask(getBaijiahaoConfig, params);
4578
5301
  }