@ikenxuan/amagi 4.5.2 → 5.0.1

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.
@@ -151,142 +151,49 @@ var logMiddleware = (pathsToLog) => {
151
151
  next();
152
152
  };
153
153
  };
154
- var Networks = class {
155
- url;
156
- method;
157
- headers;
158
- type;
159
- body;
160
- axiosInstance;
161
- isGetResult;
162
- timeout;
163
- timer;
164
- data;
165
- constructor(data2) {
166
- this.headers = data2.headers ?? {};
167
- this.url = data2.url ?? "";
168
- this.type = data2.responseType ?? "json";
169
- this.method = data2.method ?? "GET";
170
- this.body = data2.body ?? null;
171
- this.data = {};
172
- this.timeout = data2.timeout ?? 15e3;
173
- this.isGetResult = false;
174
- this.timer = void 0;
175
- this.axiosInstance = axios.create({
176
- timeout: this.timeout,
177
- headers: this.headers,
178
- maxRedirects: 5,
179
- validateStatus: (status) => {
180
- return status >= 200 && status < 600;
181
- }
182
- });
183
- }
184
- get config() {
185
- let config = {
186
- url: this.url,
187
- method: this.method,
188
- headers: this.headers
189
- };
190
- if (this.method === "POST" && this.body) {
191
- config.data = this.body;
192
- }
193
- return config;
194
- }
195
- async getfetch() {
196
- try {
197
- const result = await this.returnResult();
198
- if (result.status === 504) {
199
- return result;
200
- }
201
- this.isGetResult = true;
202
- return result;
203
- } catch (error) {
204
- logger.info(error);
205
- return false;
206
- }
207
- }
208
- async returnResult() {
209
- return await this.axiosInstance(this.config);
210
- }
211
- /** 最终地址(跟随重定向) */
212
- async getLongLink() {
213
- try {
214
- const response = await this.axiosInstance({
215
- method: "GET",
216
- url: this.url
217
- });
218
- return response.request.res.responseUrl;
219
- } catch (error) {
220
- if (error instanceof AxiosError) {
221
- throw new Error(error.stack);
222
- }
223
- return "";
154
+ var fetchData = async (config) => {
155
+ try {
156
+ const response = await axios(config);
157
+ if (response.status === 429) {
158
+ logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
159
+ throw new Error("ratelimit triggered, \u89E6\u53D1\u901F\u7387\u9650\u5236\uFF01");
224
160
  }
225
- }
226
- /** 获取首个302 */
227
- async getLocation() {
228
- try {
229
- const response = await this.axiosInstance({
230
- method: "GET",
231
- url: this.url,
232
- maxRedirects: 0,
233
- // 禁止跟随重定向
234
- validateStatus: (status) => status >= 300 && status < 400
235
- // 仅处理3xx响应
236
- });
237
- return response.headers["location"];
238
- } catch (error) {
239
- if (error instanceof AxiosError) {
240
- throw new Error(error.stack);
241
- }
242
- return "";
161
+ return response.data;
162
+ } catch (error) {
163
+ if (error instanceof AxiosError) {
164
+ logger.error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25:", error.message);
165
+ throw error;
243
166
  }
167
+ throw error;
244
168
  }
245
- /** 获取数据并处理数据的格式化,默认json */
246
- async getData(new_fetch = "") {
247
- try {
248
- if (!new_fetch) {
249
- const result = await this.returnResult();
250
- if (result.status === 504) {
251
- return result;
252
- }
253
- if (result.status === 429) {
254
- logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
255
- throw new Error("ratelimit triggered, \u89E6\u53D1 https://www.douyin.com/ \u7684\u901F\u7387\u9650\u5236\uFF01\uFF01\uFF01");
256
- }
257
- this.axiosInstance = result;
258
- this.isGetResult = true;
259
- } else {
260
- this.axiosInstance = new_fetch;
261
- }
262
- return this.axiosInstance.data;
263
- } catch (error) {
264
- if (error instanceof AxiosError) {
265
- throw new Error(error.stack);
266
- }
267
- return false;
169
+ };
170
+ var fetchResponse = async (config) => {
171
+ try {
172
+ return await axios(config);
173
+ } catch (error) {
174
+ if (error instanceof AxiosError) {
175
+ throw error;
268
176
  }
177
+ throw new Error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25");
269
178
  }
270
- async getHeadersAndData() {
271
- try {
272
- const result = await this.axiosInstance(this.config);
273
- let headers2 = {};
274
- const fetchHeaders = result.headers;
275
- for (const [key, value] of Object.entries(fetchHeaders)) {
276
- headers2[key] = value;
277
- }
278
- return { headers: headers2, data: result.data };
279
- } catch (error) {
280
- console.error("\u83B7\u53D6\u54CD\u5E94\u5934\u548C\u6570\u636E\u5931\u8D25:", error);
281
- return { headers: null, data: null };
282
- }
179
+ };
180
+ var getHeadersAndData = async (config) => {
181
+ try {
182
+ const response = await fetchResponse(config);
183
+ return {
184
+ headers: response.headers,
185
+ data: response.data
186
+ };
187
+ } catch (error) {
188
+ logger.error("\u83B7\u53D6\u54CD\u5E94\u5934\u548C\u6570\u636E\u5931\u8D25:", error);
189
+ return { headers: {}, data: {} };
283
190
  }
284
191
  };
285
192
 
286
193
  // src/platform/bilibili/qtparam.ts
287
194
  var qtparam = async (BASEURL, cookie) => {
288
195
  if (cookie === "") return { QUERY: "&platform=html5", STATUS: "!isLogin" };
289
- const logininfo = await new Networks({ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } }).getData();
196
+ const logininfo = await fetchData({ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } });
290
197
  const sign = await wbi_sign(BASEURL, cookie);
291
198
  const qn = [6, 16, 32, 64, 74, 80, 112, 116, 120, 125, 126, 127];
292
199
  let isvip;
@@ -513,43 +420,117 @@ var wbi_sign = async (BASEURL, cookie) => {
513
420
  return query;
514
421
  };
515
422
 
423
+ // src/platform/defaultConfigs.ts
424
+ var generateSecChUa = (userAgent) => {
425
+ const chromeMatch = userAgent.match(/Chrome\/(\d+)/);
426
+ const chromeVersion = chromeMatch ? chromeMatch[1] : "125";
427
+ return `"Not)A;Brand";v="8", "Chromium";v="${chromeVersion}", "Google Chrome";v="${chromeVersion}"`;
428
+ };
429
+ var getDouyinDefaultConfig = (cookie, requestConfig) => {
430
+ var _a;
431
+ const finalUserAgent = ((_a = void 0 ) == null ? void 0 : _a["User-Agent"]) || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36";
432
+ const defHeaders = {
433
+ Accept: "application/json, text/plain, */*",
434
+ "Accept-Encoding": "gzip, deflate, br, zstd",
435
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
436
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : "",
437
+ Priority: "u=1, i",
438
+ Referer: "https://www.douyin.com/",
439
+ "Sec-Ch-Ua": generateSecChUa(finalUserAgent),
440
+ "Sec-Ch-Ua-Mobile": "?0",
441
+ "Sec-Ch-Ua-Platform": '"Windows"',
442
+ "Sec-Fetch-Dest": "empty",
443
+ "Sec-Fetch-Mode": "cors",
444
+ "Sec-Fetch-Site": "same-origin",
445
+ "User-Agent": finalUserAgent
446
+ };
447
+ return {
448
+ method: "GET",
449
+ timeout: 1e4,
450
+ ...requestConfig,
451
+ headers: {
452
+ ...defHeaders,
453
+ ...{}
454
+ }
455
+ };
456
+ };
457
+ var getBilibiliDefaultConfig = (cookie, requestConfig) => {
458
+ const defHeaders = {
459
+ Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
460
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
461
+ "Cache-Control": "max-age=0",
462
+ Priority: "u=0, i",
463
+ "Sec-Ch-Ua": '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
464
+ "Sec-Ch-Ua-Mobile": "?0",
465
+ "Sec-Ch-Ua-Platform": '"Windows"',
466
+ "Sec-Fetch-Dest": "document",
467
+ "Sec-Fetch-Mode": "navigate",
468
+ "Sec-Fetch-Site": "none",
469
+ "Sec-Fetch-User": "?1",
470
+ "Upgrade-Insecure-Requests": "1",
471
+ Referer: "https://www.bilibili.com/",
472
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
473
+ };
474
+ return {
475
+ method: "GET",
476
+ timeout: 1e4,
477
+ ...requestConfig,
478
+ headers: {
479
+ ...defHeaders,
480
+ ...{}
481
+ }
482
+ };
483
+ };
484
+ var getKuaishouDefaultConfig = (cookie, requestConfig) => {
485
+ const defHeaders = {
486
+ Referer: "https://www.kuaishou.com/new-reco",
487
+ Origin: "https://www.kuaishou.com",
488
+ Accept: "application/json, text/plain, */*",
489
+ "Accept-Encoding": "gzip, deflate, br, zstd",
490
+ "Content-Type": "application/json",
491
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
492
+ Priority: "u=0, i",
493
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
494
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
495
+ };
496
+ return {
497
+ method: "POST",
498
+ timeout: 1e4,
499
+ ...requestConfig,
500
+ headers: {
501
+ ...defHeaders,
502
+ ...{}
503
+ }
504
+ };
505
+ };
506
+
516
507
  // src/platform/bilibili/getdata.ts
517
- var defheaders = {
518
- accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
519
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
520
- "cache-control": "max-age=0",
521
- priority: "u=0, i",
522
- "sec-ch-ua": "'Microsoft Edge';v='131', 'Chromium';v='131', 'Not_A Brand';v='24'",
523
- "sec-ch-ua-mobile": "?0",
524
- "sec-ch-ua-platform": "'Windows'",
525
- "sec-fetch-dest": "document",
526
- "sec-fetch-mode": "navigate",
527
- "sec-fetch-site": "none",
528
- "sec-fetch-user": "?1",
529
- "upgrade-insecure-requests": "1",
530
- referer: "https://www.bilibili.com/"
531
- };
532
- var fetchBilibili = async (data2, cookie) => {
533
- var _a, _b, _c;
534
- const headers2 = {
535
- ...defheaders,
536
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
508
+ var fetchBilibili = async (data2, cookie, requestConfig) => {
509
+ var _a, _b, _c, _d, _e, _f;
510
+ const defHeaders = getBilibiliDefaultConfig(cookie)["headers"];
511
+ const baseRequestConfig = {
512
+ method: "GET",
513
+ timeout: 1e4,
514
+ ...requestConfig,
515
+ headers: {
516
+ ...defHeaders,
517
+ ...{}
518
+ }
537
519
  };
538
520
  switch (data2.methodType) {
539
521
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
540
- const INFODATA = await GlobalGetData({
541
- url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid }),
542
- ...data2
522
+ const INFODATA = await GlobalGetData(data2.methodType, {
523
+ ...baseRequestConfig,
524
+ url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid })
543
525
  });
544
526
  return INFODATA;
545
527
  }
546
528
  case "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
547
529
  const BASEURL = bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid });
548
- const SIGN = await qtparam(BASEURL, headers2.cookie);
549
- const DATA = await GlobalGetData({
550
- url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY,
551
- headers: headers2,
552
- ...data2
530
+ const SIGN = await qtparam(BASEURL, (_a = baseRequestConfig.headers) == null ? void 0 : _a.cookie);
531
+ const DATA = await GlobalGetData(data2.methodType, {
532
+ ...baseRequestConfig,
533
+ url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY
553
534
  });
554
535
  return DATA;
555
536
  }
@@ -562,10 +543,9 @@ var fetchBilibili = async (data2, cookie) => {
562
543
  let nextPaginationStr = pagination_str;
563
544
  let isEnd = false;
564
545
  const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
565
- const checkStatusRes = await GlobalGetData({
566
- url: checkStatusUrl,
567
- headers: headers2,
568
- ...data2
546
+ const checkStatusRes = await GlobalGetData(data2.methodType, {
547
+ ...baseRequestConfig,
548
+ url: checkStatusUrl
569
549
  });
570
550
  if (checkStatusRes.data === null) {
571
551
  logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
@@ -585,18 +565,17 @@ var fetchBilibili = async (data2, cookie) => {
585
565
  seek_rpid,
586
566
  web_location: web_location ?? "1315875"
587
567
  });
588
- const wbiSignQuery = await wbi_sign(baseUrl, headers2.cookie);
568
+ const wbiSignQuery = await wbi_sign(baseUrl, (_b = baseRequestConfig.headers) == null ? void 0 : _b.cookie);
589
569
  const finalUrl = baseUrl + wbiSignQuery;
590
- const response = await GlobalGetData({
591
- url: finalUrl,
592
- headers: headers2,
593
- ...data2
570
+ const response = await GlobalGetData(data2.methodType, {
571
+ ...baseRequestConfig,
572
+ url: finalUrl
594
573
  });
595
574
  tmpresp = response;
596
- const currentComments = ((_a = response.data) == null ? void 0 : _a.replies) || [];
575
+ const currentComments = ((_c = response.data) == null ? void 0 : _c.replies) || [];
597
576
  fetchedComments.push(...currentComments);
598
- if ((_b = response.data) == null ? void 0 : _b.cursor) {
599
- nextPaginationStr = (_c = response.data.cursor.pagination_reply) == null ? void 0 : _c.next_offset;
577
+ if ((_d = response.data) == null ? void 0 : _d.cursor) {
578
+ nextPaginationStr = (_e = response.data.cursor.pagination_reply) == null ? void 0 : _e.next_offset;
600
579
  isEnd = response.data.cursor.is_end;
601
580
  } else {
602
581
  isEnd = true;
@@ -618,9 +597,9 @@ var fetchBilibili = async (data2, cookie) => {
618
597
  return finalResponse;
619
598
  }
620
599
  case "Emoji\u6570\u636E": {
621
- return await GlobalGetData({
622
- url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868(),
623
- ...data2
600
+ return await GlobalGetData(data2.methodType, {
601
+ ...baseRequestConfig,
602
+ url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868()
624
603
  });
625
604
  }
626
605
  case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
@@ -630,106 +609,121 @@ var fetchBilibili = async (data2, cookie) => {
630
609
  }
631
610
  const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
632
611
  const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
633
- const INFO = await GlobalGetData({
634
- url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId }),
635
- headers: headers2,
636
- ...data2
612
+ const INFO = await GlobalGetData(data2.methodType, {
613
+ ...baseRequestConfig,
614
+ url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId })
637
615
  });
638
616
  return INFO;
639
617
  }
640
618
  case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
641
619
  const BASEURL = bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
642
- const SIGN = await qtparam(BASEURL, headers2.cookie);
643
- const DATA = await GlobalGetData({
644
- url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY,
645
- headers: headers2,
646
- ...data2
620
+ const SIGN = await qtparam(BASEURL, (_f = baseRequestConfig.headers) == null ? void 0 : _f.cookie);
621
+ const DATA = await GlobalGetData(data2.methodType, {
622
+ ...baseRequestConfig,
623
+ url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY
647
624
  });
648
625
  return DATA;
649
626
  }
650
627
  case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
651
- delete headers2.referer;
628
+ const customConfig = {
629
+ ...baseRequestConfig,
630
+ headers: {
631
+ ...baseRequestConfig.headers,
632
+ // 只有在外部配置没有referer时才删除内部的referer
633
+ ...{
634
+ referer: void 0
635
+ }
636
+ }
637
+ };
652
638
  const { host_mid } = data2;
653
- const result = await GlobalGetData({
654
- url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid }),
655
- headers: headers2,
656
- ...data2
639
+ const result = await GlobalGetData(data2.methodType, {
640
+ ...customConfig,
641
+ url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid })
657
642
  });
658
643
  return result;
659
644
  }
660
645
  case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
661
- delete headers2.referer;
662
- const dynamicINFO = await GlobalGetData({
663
- url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id }),
664
- headers: headers2,
665
- ...data2
646
+ const customConfig = {
647
+ ...baseRequestConfig,
648
+ headers: {
649
+ ...baseRequestConfig.headers,
650
+ // 只有在外部配置没有referer时才删除内部的referer
651
+ ...{
652
+ referer: void 0
653
+ }
654
+ }
655
+ };
656
+ const dynamicINFO = await GlobalGetData(data2.methodType, {
657
+ ...customConfig,
658
+ url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id })
666
659
  });
667
660
  return dynamicINFO;
668
661
  }
669
662
  case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
670
- delete headers2.referer;
663
+ const customConfig = {
664
+ ...baseRequestConfig,
665
+ headers: {
666
+ ...baseRequestConfig.headers,
667
+ // 只有在外部配置没有referer时才删除内部的referer
668
+ ...{
669
+ referer: void 0
670
+ }
671
+ }
672
+ };
671
673
  const { dynamic_id } = data2;
672
- const dynamicINFO_CARD = await GlobalGetData({
673
- url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id }),
674
- headers: headers2,
675
- ...data2
674
+ const dynamicINFO_CARD = await GlobalGetData(data2.methodType, {
675
+ ...customConfig,
676
+ url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id })
676
677
  });
677
678
  return dynamicINFO_CARD;
678
679
  }
679
680
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
680
681
  const { host_mid } = data2;
681
- const result = await GlobalGetData({
682
- url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid }),
683
- headers: headers2,
684
- ...data2
682
+ const result = await GlobalGetData(data2.methodType, {
683
+ ...baseRequestConfig,
684
+ url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid })
685
685
  });
686
686
  return result;
687
687
  }
688
688
  case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
689
- const result = await GlobalGetData({
690
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id }),
691
- headers: headers2,
692
- ...data2
689
+ const result = await GlobalGetData(data2.methodType, {
690
+ ...baseRequestConfig,
691
+ url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id })
693
692
  });
694
693
  return result;
695
694
  }
696
695
  case "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F": {
697
- const result = await GlobalGetData({
698
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id }),
699
- headers: headers2,
700
- ...data2
696
+ const result = await GlobalGetData(data2.methodType, {
697
+ ...baseRequestConfig,
698
+ url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id })
701
699
  });
702
700
  return result;
703
701
  }
704
702
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801": {
705
- const result = await GlobalGetData({
706
- url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801(),
707
- headers: headers2,
708
- ...data2
703
+ const result = await GlobalGetData(data2.methodType, {
704
+ ...baseRequestConfig,
705
+ url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801()
709
706
  });
710
707
  return result;
711
708
  }
712
709
  case "\u4E8C\u7EF4\u7801\u72B6\u6001": {
713
- const result = await new Networks({
714
- url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key }),
715
- headers: headers2,
716
- ...data2
717
- }).getHeadersAndData();
710
+ const result = await getHeadersAndData({
711
+ ...baseRequestConfig,
712
+ url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key })
713
+ });
718
714
  return result;
719
715
  }
720
716
  case "\u767B\u5F55\u57FA\u672C\u4FE1\u606F": {
721
- const result = await GlobalGetData({
722
- url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(),
723
- headers: headers2,
724
- ...data2
717
+ const result = await GlobalGetData(data2.methodType, {
718
+ ...baseRequestConfig,
719
+ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F()
725
720
  });
726
721
  return result;
727
722
  }
728
723
  case "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF": {
729
- const result = await GlobalGetData({
730
- url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid }),
731
- headers: headers2,
732
- ...data2
724
+ const result = await GlobalGetData(data2.methodType, {
725
+ ...baseRequestConfig,
726
+ url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid })
733
727
  });
734
728
  return result;
735
729
  }
@@ -758,19 +752,19 @@ var fetchBilibili = async (data2, cookie) => {
758
752
  return null;
759
753
  }
760
754
  };
761
- var GlobalGetData = async (options) => {
755
+ var GlobalGetData = async (type, options) => {
762
756
  let warningMessage = "";
763
757
  try {
764
- const result = await new Networks(options).getData();
758
+ const result = await fetchData(options);
765
759
  if (!result || result === "") {
766
760
  const Err = {
767
761
  errorDescription: "\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01",
768
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
762
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
769
763
  requestUrl: options.url
770
764
  };
771
765
  warningMessage = `
772
766
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
773
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
767
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
774
768
  \u8BF7\u6C42URL\uFF1A${options.url}
775
769
  `;
776
770
  logger.warn(warningMessage);
@@ -784,13 +778,13 @@ var GlobalGetData = async (options) => {
784
778
  const errorMessage = bilibiliErrorCodeMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
785
779
  const Err = {
786
780
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${errorMessage}\uFF01`,
787
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
781
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
788
782
  requestUrl: options.url
789
783
  };
790
784
  warningMessage = `
791
785
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(errorMessage)}
792
786
  \u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}
793
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
787
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
794
788
  \u8BF7\u6C42URL\uFF1A${options.url}
795
789
  `;
796
790
  logger.warn(warningMessage);
@@ -811,7 +805,7 @@ var GlobalGetData = async (options) => {
811
805
  data: error.data,
812
806
  amagiError: {
813
807
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
814
- requestType: options.methodType,
808
+ requestType: type,
815
809
  requestUrl: options.url
816
810
  },
817
811
  amagiMessage: warningMessage
@@ -1225,9 +1219,7 @@ var a_bogus_default = (url, user_agent) => {
1225
1219
  };
1226
1220
 
1227
1221
  // src/platform/douyin/sign/index.ts
1228
- var headers = {
1229
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
1230
- };
1222
+ var defaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36";
1231
1223
  var douyinSign = class {
1232
1224
  /**
1233
1225
  * 生成一个指定长度的随机字符串
@@ -1244,8 +1236,8 @@ var douyinSign = class {
1244
1236
  * @param url 需要签名的地址
1245
1237
  * @returns 对此地址签名后的URL查询参数
1246
1238
  */
1247
- static AB(url) {
1248
- return a_bogus_default(url, headers["User-Agent"]);
1239
+ static AB(url, userAgent) {
1240
+ return a_bogus_default(url, userAgent || defaultUserAgent);
1249
1241
  }
1250
1242
  /** 生成一个唯一的验证字符串 */
1251
1243
  static VerifyFpManager() {
@@ -1269,160 +1261,530 @@ var douyinSign = class {
1269
1261
  };
1270
1262
 
1271
1263
  // src/platform/douyin/API.ts
1264
+ var extractBrowserVersion = (userAgent) => {
1265
+ if (!userAgent) return "125.0.0.0";
1266
+ const chromeMatch = userAgent.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/);
1267
+ if (chromeMatch) {
1268
+ return chromeMatch[1];
1269
+ }
1270
+ const edgeMatch = userAgent.match(/Edg\/(\d+\.\d+\.\d+\.\d+)/);
1271
+ if (edgeMatch) {
1272
+ return edgeMatch[1];
1273
+ }
1274
+ return "125.0.0.0";
1275
+ };
1276
+ var buildQueryString = (params) => {
1277
+ return Object.entries(params).filter(([_, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join("&");
1278
+ };
1272
1279
  var fp = douyinSign.VerifyFpManager();
1273
1280
  var DouyinAPI = class {
1281
+ browserVersion;
1282
+ /**
1283
+ * 构造函数
1284
+ * @param userAgent - 用户代理字符串,用于提取浏览器版本信息
1285
+ */
1286
+ constructor(userAgent) {
1287
+ this.browserVersion = extractBrowserVersion(userAgent);
1288
+ }
1289
+ /**
1290
+ * 获取通用的基础参数
1291
+ * @returns 通用基础参数对象
1292
+ */
1293
+ getBaseParams() {
1294
+ return {
1295
+ device_platform: "webapp",
1296
+ aid: "6383",
1297
+ channel: "channel_pc_web",
1298
+ pc_client_type: "1",
1299
+ cookie_enabled: "true",
1300
+ browser_language: "zh-CN",
1301
+ browser_platform: "Win32",
1302
+ browser_name: "Chrome",
1303
+ browser_version: this.browserVersion,
1304
+ browser_online: "true",
1305
+ engine_name: "Blink",
1306
+ engine_version: this.browserVersion,
1307
+ os_name: "Windows",
1308
+ os_version: "10",
1309
+ cpu_core_num: "16",
1310
+ device_memory: "8",
1311
+ platform: "PC",
1312
+ downlink: "10",
1313
+ effective_type: "4g",
1314
+ msToken: douyinSign.Mstoken(116),
1315
+ verifyFp: fp,
1316
+ fp
1317
+ };
1318
+ }
1319
+ /**
1320
+ * 获取视频或图集数据的接口地址
1321
+ * @param data - 请求参数,包含aweme_id
1322
+ * @returns 完整的接口URL
1323
+ */
1274
1324
  \u89C6\u9891\u6216\u56FE\u96C6(data2) {
1275
- return `https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&update_version_code=170400&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=150&webid=7351848354471872041&msToken=${douyinSign.Mstoken(
1276
- 116
1277
- )}&verifyFp=${fp}&fp=${fp}`;
1325
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/aweme/detail/";
1326
+ const params = {
1327
+ ...this.getBaseParams(),
1328
+ aweme_id: data2.aweme_id,
1329
+ update_version_code: "170400",
1330
+ version_code: "190500",
1331
+ version_name: "19.5.0",
1332
+ screen_width: "2328",
1333
+ screen_height: "1310",
1334
+ round_trip_time: "150",
1335
+ webid: "7351848354471872041"
1336
+ };
1337
+ return `${baseUrl}?${buildQueryString(params)}`;
1278
1338
  }
1339
+ /**
1340
+ * 获取评论数据的接口地址
1341
+ * @param data - 请求参数,包含aweme_id、cursor、number等
1342
+ * @returns 完整的接口URL
1343
+ */
1279
1344
  \u8BC4\u8BBA(data2) {
1280
- return `https://www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&cursor=${data2.cursor ?? 0}&count=${data2.number ?? 50}&item_type=0&insert_ids=&whale_cut_token=&cut_version=1&rcFT=&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&msToken=${douyinSign.Mstoken(
1281
- 116
1282
- )}&verifyFp=${fp}&fp=${fp}`;
1345
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/comment/list/";
1346
+ const params = {
1347
+ ...this.getBaseParams(),
1348
+ aweme_id: data2.aweme_id,
1349
+ cursor: data2.cursor ?? 0,
1350
+ count: data2.number ?? 50,
1351
+ item_type: "0",
1352
+ insert_ids: "",
1353
+ whale_cut_token: "",
1354
+ cut_version: "1",
1355
+ rcFT: "",
1356
+ version_code: "170400",
1357
+ version_name: "17.4.0",
1358
+ screen_width: "1552",
1359
+ screen_height: "970",
1360
+ round_trip_time: "50"
1361
+ };
1362
+ return `${baseUrl}?${buildQueryString(params)}`;
1283
1363
  }
1364
+ /**
1365
+ * 获取二级评论数据的接口地址
1366
+ * @param data - 请求参数,包含aweme_id、comment_id等
1367
+ * @returns 完整的接口URL
1368
+ */
1284
1369
  \u4E8C\u7EA7\u8BC4\u8BBA(data2) {
1285
- return `https://www.douyin.com/aweme/v1/web/comment/list/reply/?device_platform=webapp&aid=6383&channel=channel_pc_web&item_id=${data2.aweme_id}&comment_id=${data2.comment_id}&cut_version=1&cursor=${data2.cursor}&count=${data2.number}&item_type=0&update_version_code=170400&pc_client_type=1&pc_libra_divert=Windows&support_h265=1&support_dash=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=132.0.0.0&browser_online=true&engine_name=Blink&engine_version=132.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7386217876267796006&verifyFp=${fp}&fp=${fp}`;
1370
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/comment/list/reply/";
1371
+ const params = {
1372
+ device_platform: "webapp",
1373
+ aid: "6383",
1374
+ channel: "channel_pc_web",
1375
+ item_id: data2.aweme_id,
1376
+ comment_id: data2.comment_id,
1377
+ cut_version: "1",
1378
+ cursor: data2.cursor,
1379
+ count: data2.number,
1380
+ item_type: "0",
1381
+ update_version_code: "170400",
1382
+ pc_client_type: "1",
1383
+ pc_libra_divert: "Windows",
1384
+ support_h265: "1",
1385
+ support_dash: "1",
1386
+ version_code: "170400",
1387
+ version_name: "17.4.0",
1388
+ cookie_enabled: "true",
1389
+ screen_width: "1552",
1390
+ screen_height: "970",
1391
+ browser_language: "zh-CN",
1392
+ browser_platform: "Win32",
1393
+ browser_name: "Edge",
1394
+ browser_version: "132.0.0.0",
1395
+ browser_online: "true",
1396
+ engine_name: "Blink",
1397
+ engine_version: "132.0.0.0",
1398
+ os_name: "Windows",
1399
+ os_version: "10",
1400
+ cpu_core_num: "16",
1401
+ device_memory: "8",
1402
+ platform: "PC",
1403
+ downlink: "10",
1404
+ effective_type: "4g",
1405
+ round_trip_time: "50",
1406
+ webid: "7386217876267796006",
1407
+ verifyFp: fp,
1408
+ fp
1409
+ };
1410
+ return `${baseUrl}?${buildQueryString(params)}`;
1286
1411
  }
1412
+ /**
1413
+ * 获取动图数据的接口地址
1414
+ * @param data - 请求参数,包含aweme_id
1415
+ * @returns 完整的接口URL
1416
+ */
1287
1417
  \u52A8\u56FE(data2) {
1288
- return `https://www.iesdouyin.com/web/api/v2/aweme/slidesinfo/?reflow_source=reflow_page&web_id=7326472315356857893&device_id=7326472315356857893&aweme_ids=[${data2.aweme_id}]&request_source=200&msToken=${douyinSign.Mstoken(
1289
- 116
1290
- )}&verifyFp=${fp}&fp=${fp}`;
1418
+ const baseUrl = "https://www.iesdouyin.com/web/api/v2/aweme/slidesinfo/";
1419
+ const params = {
1420
+ reflow_source: "reflow_page",
1421
+ web_id: "7326472315356857893",
1422
+ device_id: "7326472315356857893",
1423
+ aweme_ids: `[${data2.aweme_id}]`,
1424
+ request_source: "200",
1425
+ msToken: douyinSign.Mstoken(116),
1426
+ verifyFp: fp,
1427
+ fp
1428
+ };
1429
+ return `${baseUrl}?${buildQueryString(params)}`;
1291
1430
  }
1431
+ /**
1432
+ * 获取表情数据的接口地址
1433
+ * @returns 完整的接口URL
1434
+ */
1292
1435
  \u8868\u60C5() {
1293
1436
  return "https://www.douyin.com/aweme/v1/web/emoji/list";
1294
1437
  }
1438
+ /**
1439
+ * 获取用户主页视频数据的接口地址
1440
+ * @param data - 请求参数,包含sec_uid
1441
+ * @returns 完整的接口URL
1442
+ */
1295
1443
  \u7528\u6237\u4E3B\u9875\u89C6\u9891(data2) {
1296
- return `https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=${data2.sec_uid}&max_cursor=0&locate_query=false&show_live_replay_strategy=1&need_time_list=1&time_list_query=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
1297
- 116
1298
- )}&verifyFp=${fp}&fp=${fp}`;
1444
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/aweme/post/";
1445
+ const params = {
1446
+ ...this.getBaseParams(),
1447
+ sec_user_id: data2.sec_uid,
1448
+ max_cursor: "0",
1449
+ locate_query: "false",
1450
+ show_live_replay_strategy: "1",
1451
+ need_time_list: "1",
1452
+ time_list_query: "0",
1453
+ whale_cut_token: "",
1454
+ cut_version: "1",
1455
+ count: "18",
1456
+ publish_video_strategy_type: "2",
1457
+ version_code: "170400",
1458
+ version_name: "17.4.0",
1459
+ screen_width: "1552",
1460
+ screen_height: "970",
1461
+ round_trip_time: "50",
1462
+ webid: "7338423850134226495"
1463
+ };
1464
+ return `${baseUrl}?${buildQueryString(params)}`;
1299
1465
  }
1466
+ /**
1467
+ * 获取用户主页信息的接口地址
1468
+ * @param data - 请求参数,包含sec_uid
1469
+ * @returns 完整的接口URL
1470
+ */
1300
1471
  \u7528\u6237\u4E3B\u9875\u4FE1\u606F(data2) {
1301
- return `https://www.douyin.com/aweme/v1/web/user/profile/other/?device_platform=webapp&aid=6383&channel=channel_pc_web&publish_video_strategy_type=2&source=channel_pc_web&sec_user_id=${data2.sec_uid}&personal_center_strategy=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
1302
- 116
1303
- )}&verifyFp=${fp}&fp=${fp}`;
1472
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/user/profile/other/";
1473
+ const params = {
1474
+ ...this.getBaseParams(),
1475
+ publish_video_strategy_type: "2",
1476
+ source: "channel_pc_web",
1477
+ sec_user_id: data2.sec_uid,
1478
+ personal_center_strategy: "1",
1479
+ version_code: "170400",
1480
+ version_name: "17.4.0",
1481
+ screen_width: "1552",
1482
+ screen_height: "970",
1483
+ round_trip_time: "0",
1484
+ webid: "7327957959955580467"
1485
+ };
1486
+ return `${baseUrl}?${buildQueryString(params)}`;
1304
1487
  }
1488
+ /**
1489
+ * 获取热点词数据的接口地址
1490
+ * @param data - 请求参数,包含query
1491
+ * @returns 完整的接口URL
1492
+ */
1305
1493
  \u70ED\u70B9\u8BCD(data2) {
1306
- return `https://www.douyin.com/aweme/v1/web/api/suggest_words/?device_platform=webapp&aid=6383&channel=channel_pc_web&query=${data2.query}&business_id=30088&from_group_id=7129543174929812767&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh - CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
1307
- 116
1308
- )}&verifyFp=${fp}&fp=${fp}`;
1494
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/api/suggest_words/";
1495
+ const params = {
1496
+ ...this.getBaseParams(),
1497
+ query: data2.query,
1498
+ business_id: "30088",
1499
+ from_group_id: "7129543174929812767",
1500
+ version_code: "170400",
1501
+ version_name: "17.4.0",
1502
+ screen_width: "1552",
1503
+ screen_height: "970",
1504
+ round_trip_time: "50",
1505
+ webid: "7327957959955580467"
1506
+ };
1507
+ return `${baseUrl}?${buildQueryString(params)}`;
1309
1508
  }
1509
+ /**
1510
+ * 获取搜索数据的接口地址
1511
+ * @param data - 请求参数,包含query、number、search_id等
1512
+ * @returns 完整的接口URL
1513
+ */
1310
1514
  \u641C\u7D22(data2) {
1311
- return `https://www.douyin.com/aweme/v1/web/general/search/single/?device_platform=webapp&aid=6383&channel=channel_pc_web&search_channel=aweme_general&sort_type=0&publish_time=0&keyword=${data2.query}&search_source=normal_search&query_correct_type=1&is_filter_search=0&from_group_id=&offset=0&count=15&pc_client_type=1&version_code=190600&version_name=19.6.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
1312
- 116
1313
- )}&verifyFp=${fp}&fp=${fp}&search_id=${data2.search_id ?? ""}&count=${data2.number ?? 10}`;
1515
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/general/search/single/";
1516
+ const params = {
1517
+ ...this.getBaseParams(),
1518
+ search_channel: "aweme_general",
1519
+ sort_type: "0",
1520
+ publish_time: "0",
1521
+ keyword: data2.query,
1522
+ search_source: "normal_search",
1523
+ query_correct_type: "1",
1524
+ is_filter_search: "0",
1525
+ from_group_id: "",
1526
+ offset: "0",
1527
+ version_code: "190600",
1528
+ version_name: "19.6.0",
1529
+ screen_width: "1552",
1530
+ screen_height: "970",
1531
+ round_trip_time: "50",
1532
+ webid: "7338423850134226495",
1533
+ search_id: data2.search_id ?? "",
1534
+ count: data2.number ?? 10
1535
+ };
1536
+ return `${baseUrl}?${buildQueryString(params)}`;
1314
1537
  }
1538
+ /**
1539
+ * 获取互动表情数据的接口地址
1540
+ * @returns 完整的接口URL
1541
+ */
1315
1542
  \u4E92\u52A8\u8868\u60C5() {
1316
- return `https://www.douyin.com/aweme/v1/web/im/strategy/config?device_platform=webapp&aid=1128&channel=channel_pc_web&publish_video_strategy_type=2&app_id=1128&scenes=[%22interactive_resources%22]&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
1317
- 116
1318
- )}&verifyFp=${fp}&fp=${fp}`;
1543
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/im/strategy/config";
1544
+ const params = {
1545
+ device_platform: "webapp",
1546
+ aid: "1128",
1547
+ channel: "channel_pc_web",
1548
+ publish_video_strategy_type: "2",
1549
+ app_id: "1128",
1550
+ scenes: "[%22interactive_resources%22]",
1551
+ pc_client_type: "1",
1552
+ version_code: "170400",
1553
+ version_name: "17.4.0",
1554
+ cookie_enabled: "true",
1555
+ screen_width: "2328",
1556
+ screen_height: "1310",
1557
+ browser_language: "zh-CN",
1558
+ browser_platform: "Win32",
1559
+ browser_name: "Chrome",
1560
+ browser_version: "126.0.0.0",
1561
+ browser_online: "true",
1562
+ engine_name: "Blink",
1563
+ engine_version: "126.0.0.0",
1564
+ os_name: "Windows",
1565
+ os_version: "10",
1566
+ cpu_core_num: "16",
1567
+ device_memory: "8",
1568
+ platform: "PC",
1569
+ downlink: "1.5",
1570
+ effective_type: "4g",
1571
+ round_trip_time: "350",
1572
+ webid: "7347329698282833447",
1573
+ msToken: douyinSign.Mstoken(116),
1574
+ verifyFp: fp,
1575
+ fp
1576
+ };
1577
+ return `${baseUrl}?${buildQueryString(params)}`;
1319
1578
  }
1579
+ /**
1580
+ * 获取背景音乐数据的接口地址
1581
+ * @param data - 请求参数,包含music_id
1582
+ * @returns 完整的接口URL
1583
+ */
1320
1584
  \u80CC\u666F\u97F3\u4E50(data2) {
1321
- return `https://www.douyin.com/aweme/v1/web/music/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&music_id=${data2.music_id}&scene=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
1322
- 116
1323
- )}&verifyFp=${fp}&fp=${fp}`;
1585
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/music/detail/";
1586
+ const params = {
1587
+ device_platform: "webapp",
1588
+ aid: "6383",
1589
+ channel: "channel_pc_web",
1590
+ music_id: data2.music_id,
1591
+ scene: "1",
1592
+ pc_client_type: "1",
1593
+ version_code: "170400",
1594
+ version_name: "17.4.0",
1595
+ cookie_enabled: "true",
1596
+ screen_width: "2328",
1597
+ screen_height: "1310",
1598
+ browser_language: "zh-CN",
1599
+ browser_platform: "Win32",
1600
+ browser_name: "Chrome",
1601
+ browser_version: "126.0.0.0",
1602
+ browser_online: "true",
1603
+ engine_name: "Blink",
1604
+ engine_version: "126.0.0.0",
1605
+ os_name: "Windows",
1606
+ os_version: "10",
1607
+ cpu_core_num: "16",
1608
+ device_memory: "8",
1609
+ platform: "PC",
1610
+ downlink: "1.5",
1611
+ effective_type: "4g",
1612
+ round_trip_time: "350",
1613
+ webid: "7347329698282833447",
1614
+ msToken: douyinSign.Mstoken(116),
1615
+ verifyFp: fp,
1616
+ fp
1617
+ };
1618
+ return `${baseUrl}?${buildQueryString(params)}`;
1324
1619
  }
1620
+ /**
1621
+ * 获取直播间信息的接口地址
1622
+ * @param data - 请求参数,包含web_rid、room_id
1623
+ * @returns 完整的接口URL
1624
+ */
1325
1625
  \u76F4\u64AD\u95F4\u4FE1\u606F(data2) {
1326
- return `https://live.douyin.com/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&language=zh-CN&enter_from=web_share_link&cookie_enabled=true&screen_width=2048&screen_height=1152&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&web_rid=${data2.web_rid}&room_id_str=${data2.room_id}&enter_source=&is_need_double_stream=false&insert_task_id=&live_reason=&msToken=${douyinSign.Mstoken(
1327
- 116
1328
- )}&verifyFp=${fp}&fp=${fp}`;
1626
+ const baseUrl = "https://live.douyin.com/webcast/room/web/enter/";
1627
+ const params = {
1628
+ aid: "6383",
1629
+ app_name: "douyin_web",
1630
+ live_id: "1",
1631
+ device_platform: "web",
1632
+ language: "zh-CN",
1633
+ enter_from: "web_share_link",
1634
+ cookie_enabled: "true",
1635
+ screen_width: "2048",
1636
+ screen_height: "1152",
1637
+ browser_language: "zh-CN",
1638
+ browser_platform: "Win32",
1639
+ browser_name: "Chrome",
1640
+ browser_version: "125.0.0.0",
1641
+ web_rid: data2.web_rid,
1642
+ room_id_str: data2.room_id,
1643
+ enter_source: "",
1644
+ is_need_double_stream: "false",
1645
+ insert_task_id: "",
1646
+ live_reason: "",
1647
+ msToken: douyinSign.Mstoken(116),
1648
+ verifyFp: fp,
1649
+ fp
1650
+ };
1651
+ return `${baseUrl}?${buildQueryString(params)}`;
1329
1652
  }
1653
+ /**
1654
+ * 获取申请二维码的接口地址
1655
+ * @param data - 请求参数,包含verify_fp
1656
+ * @returns 完整的接口URL
1657
+ */
1330
1658
  \u7533\u8BF7\u4E8C\u7EF4\u7801(data2) {
1331
- return `https://sso.douyin.com/get_qrcode/?verifyFp=${data2.verify_fp}&fp=${data2.verify_fp}`;
1659
+ const baseUrl = "https://sso.douyin.com/get_qrcode/";
1660
+ const params = {
1661
+ verifyFp: data2.verify_fp,
1662
+ fp: data2.verify_fp
1663
+ };
1664
+ return `${baseUrl}?${buildQueryString(params)}`;
1332
1665
  }
1333
1666
  };
1667
+ var createDouyinApiUrls = (userAgent) => {
1668
+ return new DouyinAPI(userAgent);
1669
+ };
1334
1670
  var douyinApiUrls = new DouyinAPI();
1335
1671
 
1336
1672
  // src/platform/douyin/getdata.ts
1337
- var defheaders2 = {
1338
- accept: "*/*",
1339
- priority: "u=0, i",
1340
- "content-type": "application/json; charset=utf-8",
1341
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1342
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
1343
- referer: "https://www.douyin.com/",
1344
- "accept-encoding": "gzip, deflate, br",
1345
- connection: "keep-alive"
1346
- };
1347
- var DouyinData = async (data2, cookie) => {
1348
- var _a, _b;
1349
- const headers2 = {
1350
- ...defheaders2,
1351
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
1673
+ var DouyinData = async (data2, cookie, requestConfig) => {
1674
+ var _a, _b, _c, _d, _e;
1675
+ const defHeaders = getDouyinDefaultConfig(cookie)["headers"];
1676
+ const baseRequestConfig = {
1677
+ method: "GET",
1678
+ timeout: 1e4,
1679
+ ...requestConfig,
1680
+ headers: {
1681
+ ...defHeaders,
1682
+ ...(requestConfig == null ? void 0 : requestConfig.headers) || {}
1683
+ }
1352
1684
  };
1685
+ const userAgent = (_a = baseRequestConfig.headers) == null ? void 0 : _a["User-Agent"];
1686
+ const douyinApiUrls3 = createDouyinApiUrls(userAgent);
1353
1687
  switch (data2.methodType) {
1354
1688
  case "\u805A\u5408\u89E3\u6790":
1355
1689
  case "\u89C6\u9891\u4F5C\u54C1\u6570\u636E":
1356
1690
  case "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E":
1357
1691
  case "\u5408\u8F91\u4F5C\u54C1\u6570\u636E": {
1358
- const url = douyinApiUrls.\u89C6\u9891\u6216\u56FE\u96C6({ aweme_id: data2.aweme_id });
1359
- const VideoData = await GlobalGetData2({
1360
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1361
- headers: headers2,
1362
- ...data2
1692
+ const url = douyinApiUrls3.\u89C6\u9891\u6216\u56FE\u96C6({ aweme_id: data2.aweme_id });
1693
+ const VideoData = await GlobalGetData2(data2.methodType, {
1694
+ ...baseRequestConfig,
1695
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1363
1696
  });
1364
1697
  return VideoData;
1365
1698
  }
1366
1699
  case "\u8BC4\u8BBA\u6570\u636E": {
1367
- const urlGenerator = (params) => douyinApiUrls.\u8BC4\u8BBA(params);
1368
- const response = await fetchPaginatedData(urlGenerator, data2, 50, headers2);
1700
+ const urlGenerator = (params) => douyinApiUrls3.\u8BC4\u8BBA(params);
1701
+ const response = await fetchPaginatedData(
1702
+ data2.methodType,
1703
+ urlGenerator,
1704
+ data2,
1705
+ 50,
1706
+ baseRequestConfig
1707
+ );
1369
1708
  return response;
1370
1709
  }
1371
1710
  case "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": {
1372
- const urlGenerator = (params) => douyinApiUrls.\u4E8C\u7EA7\u8BC4\u8BBA(params);
1711
+ const urlGenerator = (params) => douyinApiUrls3.\u4E8C\u7EA7\u8BC4\u8BBA(params);
1712
+ const customConfig = {
1713
+ ...baseRequestConfig,
1714
+ headers: {
1715
+ ...baseRequestConfig.headers,
1716
+ // 只有在外部配置没有referer时才设置内部的referer
1717
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("referer" in requestConfig.headers)) && {
1718
+ referer: `https://www.douyin.com/note/${data2.aweme_id}`
1719
+ }
1720
+ }
1721
+ };
1373
1722
  const response = await fetchPaginatedData(
1723
+ data2.methodType,
1374
1724
  urlGenerator,
1375
1725
  data2,
1376
1726
  3,
1377
- {
1378
- ...headers2,
1379
- referer: `https://www.douyin.com/note/${data2.aweme_id}`
1380
- }
1727
+ customConfig
1381
1728
  );
1382
1729
  return response;
1383
1730
  }
1384
1731
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
1385
- const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1386
- const UserInfoData = await GlobalGetData2({
1387
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1732
+ const url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1733
+ const customConfig = {
1734
+ ...baseRequestConfig,
1388
1735
  headers: {
1389
- ...headers2,
1390
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1391
- },
1392
- ...data2
1736
+ ...baseRequestConfig.headers,
1737
+ // 只有在外部配置没有Referer时才设置内部的Referer
1738
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1739
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1740
+ }
1741
+ }
1742
+ };
1743
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1744
+ ...customConfig,
1745
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1393
1746
  });
1394
1747
  return UserInfoData;
1395
1748
  }
1396
1749
  case "Emoji\u6570\u636E": {
1397
- const url = douyinApiUrls.\u8868\u60C5();
1398
- const EmojiData = await GlobalGetData2({
1399
- url,
1400
- headers: headers2,
1401
- ...data2
1750
+ const url = douyinApiUrls3.\u8868\u60C5();
1751
+ const EmojiData = await GlobalGetData2(data2.methodType, {
1752
+ ...baseRequestConfig,
1753
+ url
1402
1754
  });
1403
1755
  return EmojiData;
1404
1756
  }
1405
1757
  case "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E": {
1406
- const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u89C6\u9891({ sec_uid: data2.sec_uid });
1407
- const UserVideoListData = await GlobalGetData2({
1408
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1758
+ const url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u89C6\u9891({ sec_uid: data2.sec_uid });
1759
+ const customConfig = {
1760
+ ...baseRequestConfig,
1409
1761
  headers: {
1410
- ...headers2,
1411
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1412
- },
1413
- ...data2
1762
+ ...baseRequestConfig.headers,
1763
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1764
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1765
+ }
1766
+ }
1767
+ };
1768
+ const UserVideoListData = await GlobalGetData2(data2.methodType, {
1769
+ ...customConfig,
1770
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1414
1771
  });
1415
1772
  return UserVideoListData;
1416
1773
  }
1417
1774
  case "\u70ED\u70B9\u8BCD\u6570\u636E": {
1418
- const url = douyinApiUrls.\u70ED\u70B9\u8BCD({ query: data2.query, number: data2.number ?? 10 });
1419
- const SuggestWordsData = await GlobalGetData2({
1420
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1775
+ const url = douyinApiUrls3.\u70ED\u70B9\u8BCD({ query: data2.query, number: data2.number ?? 10 });
1776
+ const customConfig = {
1777
+ ...baseRequestConfig,
1421
1778
  headers: {
1422
- ...headers2,
1423
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1424
- },
1425
- ...data2
1779
+ ...baseRequestConfig.headers,
1780
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1781
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1782
+ }
1783
+ }
1784
+ };
1785
+ const SuggestWordsData = await GlobalGetData2(data2.methodType, {
1786
+ ...customConfig,
1787
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1426
1788
  });
1427
1789
  return SuggestWordsData;
1428
1790
  }
@@ -1431,22 +1793,27 @@ var DouyinData = async (data2, cookie) => {
1431
1793
  const maxPageSize = 15;
1432
1794
  let fetchedSearchList = [];
1433
1795
  let tmpresp = {};
1796
+ const customConfig = {
1797
+ ...baseRequestConfig,
1798
+ headers: {
1799
+ ...baseRequestConfig.headers,
1800
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1801
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1802
+ }
1803
+ }
1804
+ };
1434
1805
  while (fetchedSearchList.length < Number(data2.number ?? 10)) {
1435
1806
  const requestCount = Math.min(Number(data2.number ?? 50) - fetchedSearchList.length, maxPageSize);
1436
- const url = douyinApiUrls.\u641C\u7D22({
1807
+ const url = douyinApiUrls3.\u641C\u7D22({
1437
1808
  query: data2.query,
1438
1809
  number: requestCount,
1439
1810
  search_id: search_id === "" ? void 0 : search_id
1440
1811
  });
1441
- const response = await GlobalGetData2({
1442
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1443
- headers: {
1444
- ...headers2,
1445
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1446
- },
1447
- ...data2
1812
+ const response = await GlobalGetData2(data2.methodType, {
1813
+ ...customConfig,
1814
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1448
1815
  });
1449
- if (response.data.length === 0) {
1816
+ if (((_b = response.data) == null ? void 0 : _b.length) === 0) {
1450
1817
  logger.warn("\u83B7\u53D6\u641C\u7D22\u6570\u636E\u5931\u8D25\uFF01\u8BF7\u6C42\u6210\u529F\u4F46\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\n\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01\n\u8BF7\u6C42\u7C7B\u578B\uFF1A" + data2.methodType);
1451
1818
  return false;
1452
1819
  }
@@ -1455,7 +1822,7 @@ var DouyinData = async (data2, cookie) => {
1455
1822
  }
1456
1823
  fetchedSearchList.push(...response.data);
1457
1824
  tmpresp = response;
1458
- search_id = response.log_pb.impr_id;
1825
+ search_id = (_c = response.log_pb) == null ? void 0 : _c.impr_id;
1459
1826
  }
1460
1827
  const finalResponse = {
1461
1828
  ...tmpresp,
@@ -1464,36 +1831,39 @@ var DouyinData = async (data2, cookie) => {
1464
1831
  return finalResponse;
1465
1832
  }
1466
1833
  case "\u52A8\u6001\u8868\u60C5\u6570\u636E": {
1467
- const url = douyinApiUrls.\u4E92\u52A8\u8868\u60C5();
1468
- const ExpressionPlusData = await GlobalGetData2({
1469
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1470
- headers: headers2,
1471
- ...data2
1834
+ const url = douyinApiUrls3.\u4E92\u52A8\u8868\u60C5();
1835
+ const ExpressionPlusData = await GlobalGetData2(data2.methodType, {
1836
+ ...baseRequestConfig,
1837
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1472
1838
  });
1473
1839
  return ExpressionPlusData;
1474
1840
  }
1475
1841
  case "\u97F3\u4E50\u6570\u636E": {
1476
- const url = douyinApiUrls.\u80CC\u666F\u97F3\u4E50({ music_id: data2.music_id });
1477
- const MusicData = await GlobalGetData2({
1478
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1479
- headers: headers2,
1480
- ...data2
1842
+ const url = douyinApiUrls3.\u80CC\u666F\u97F3\u4E50({ music_id: data2.music_id });
1843
+ const MusicData = await GlobalGetData2(data2.methodType, {
1844
+ ...baseRequestConfig,
1845
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1481
1846
  });
1482
1847
  return MusicData;
1483
1848
  }
1484
1849
  case "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E": {
1485
- let url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1486
- const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url)}`;
1487
- const UserInfoData = await GlobalGetData2({
1488
- url: fetchUrl,
1850
+ let url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1851
+ const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`;
1852
+ const customConfig = {
1853
+ ...baseRequestConfig,
1489
1854
  headers: {
1490
- ...headers2,
1491
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1492
- },
1493
- ...data2
1855
+ ...baseRequestConfig.headers,
1856
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1857
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1858
+ }
1859
+ }
1860
+ };
1861
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1862
+ ...customConfig,
1863
+ url: fetchUrl
1494
1864
  });
1495
- if (!((_a = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _a.live_status) || UserInfoData.user.live_status !== 1) {
1496
- logger.error((((_b = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _b.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1865
+ if (!((_d = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _d.live_status) || UserInfoData.user.live_status !== 1) {
1866
+ logger.error((((_e = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _e.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1497
1867
  const Err = {
1498
1868
  errorDescription: "\u68C0\u67E5\u5931\u8D25\uFF01\u8BE5\u7528\u6237\u5F53\u524D\u672A\u5728\u76F4\u64AD\uFF01 TypeError: Cannot read properties of undefined (reading 'live_status')",
1499
1869
  requestType: data2.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
@@ -1515,35 +1885,42 @@ var DouyinData = async (data2, cookie) => {
1515
1885
  };
1516
1886
  }
1517
1887
  const room_data = JSON.parse(UserInfoData.user.room_data);
1518
- url = douyinApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: UserInfoData.user.room_id_str, web_rid: room_data.owner.web_rid });
1519
- const LiveRoomData = await GlobalGetData2({
1520
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1888
+ url = douyinApiUrls3.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: UserInfoData.user.room_id_str, web_rid: room_data.owner.web_rid });
1889
+ const liveCustomConfig = {
1890
+ ...baseRequestConfig,
1521
1891
  headers: {
1522
- ...headers2,
1523
- Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1524
- },
1525
- ...data2
1892
+ ...baseRequestConfig.headers,
1893
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1894
+ Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1895
+ }
1896
+ }
1897
+ };
1898
+ const LiveRoomData = await GlobalGetData2(data2.methodType, {
1899
+ ...liveCustomConfig,
1900
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1526
1901
  });
1527
1902
  return LiveRoomData;
1528
1903
  }
1529
1904
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E": {
1530
- const url = douyinApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801({ verify_fp: data2.verify_fp });
1531
- const LoginQrcodeStatusData = await GlobalGetData2({
1532
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1533
- headers: headers2,
1534
- ...data2
1905
+ const url = douyinApiUrls3.\u7533\u8BF7\u4E8C\u7EF4\u7801({ verify_fp: data2.verify_fp });
1906
+ const LoginQrcodeStatusData = await GlobalGetData2(data2.methodType, {
1907
+ ...baseRequestConfig,
1908
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1535
1909
  });
1536
1910
  return LoginQrcodeStatusData;
1537
1911
  }
1538
- default:
1539
- logger.warn(`\u672A\u77E5\u7684B\u7AD9\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1912
+ default: {
1913
+ logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1540
1914
  return null;
1915
+ }
1541
1916
  }
1542
1917
  };
1543
- var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2) => {
1918
+ var fetchPaginatedData = async (type, apiUrlGenerator, params, maxPageSize, requestConfig) => {
1919
+ var _a;
1544
1920
  let cursor = params.cursor ?? 0;
1545
1921
  let fetchedData = [];
1546
1922
  let tmpresp = {};
1923
+ const userAgent = (_a = requestConfig.headers) == null ? void 0 : _a["User-Agent"];
1547
1924
  while (fetchedData.length < Number(params.number ?? maxPageSize)) {
1548
1925
  const requestCount = Math.min(Number(params.number ?? maxPageSize) - fetchedData.length, maxPageSize);
1549
1926
  const url = apiUrlGenerator({
@@ -1551,10 +1928,9 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1551
1928
  number: requestCount,
1552
1929
  cursor
1553
1930
  });
1554
- const response = await GlobalGetData2({
1555
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1556
- headers: headers2,
1557
- ...params
1931
+ const response = await GlobalGetData2(type, {
1932
+ ...requestConfig,
1933
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
1558
1934
  });
1559
1935
  fetchedData.push(...response.comments || response.data || []);
1560
1936
  tmpresp = response;
@@ -1570,20 +1946,20 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1570
1946
  };
1571
1947
  return finalResponse;
1572
1948
  };
1573
- var GlobalGetData2 = async (options) => {
1949
+ var GlobalGetData2 = async (type, config) => {
1574
1950
  let warningMessage = "";
1575
1951
  try {
1576
- const result = await new Networks(options).getData();
1952
+ const result = await fetchData(config);
1577
1953
  if (!result || result === "") {
1578
1954
  const Err = {
1579
1955
  errorDescription: "\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01",
1580
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1581
- requestUrl: options.url
1956
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1957
+ requestUrl: config.url
1582
1958
  };
1583
1959
  warningMessage = `
1584
1960
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
1585
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1586
- \u8BF7\u6C42URL\uFF1A${options.url}
1961
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1962
+ \u8BF7\u6C42URL\uFF1A${config.url}
1587
1963
  `;
1588
1964
  logger.warn(warningMessage);
1589
1965
  throw {
@@ -1596,13 +1972,13 @@ var GlobalGetData2 = async (options) => {
1596
1972
  const filterReason = result.filter_detail.filter_reason;
1597
1973
  const Err = {
1598
1974
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${filterReason}\uFF01`,
1599
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1600
- requestUrl: options.url
1975
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1976
+ requestUrl: config.url
1601
1977
  };
1602
1978
  warningMessage = `
1603
1979
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(filterReason)}
1604
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1605
- \u8BF7\u6C42URL\uFF1A${options.url}
1980
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1981
+ \u8BF7\u6C42URL\uFF1A${config.url}
1606
1982
  `;
1607
1983
  logger.warn(warningMessage);
1608
1984
  throw {
@@ -1622,8 +1998,8 @@ var GlobalGetData2 = async (options) => {
1622
1998
  data: null,
1623
1999
  amagiError: {
1624
2000
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1625
- requestType: options.methodType,
1626
- requestUrl: options.url
2001
+ requestType: type,
2002
+ requestUrl: config.url
1627
2003
  },
1628
2004
  amagiMessage: warningMessage
1629
2005
  };
@@ -1680,50 +2056,42 @@ var API = class {
1680
2056
  var kuaishouApiUrls = new API();
1681
2057
 
1682
2058
  // src/platform/kuaishou/getdata.ts
1683
- var defheaders3 = {
1684
- referer: "https://www.kuaishou.com/new-reco",
1685
- origin: "https://www.kuaishou.com",
1686
- accept: "*/*",
1687
- "content-type": "application/json",
1688
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1689
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
1690
- };
1691
- var KuaishouData = async (data2, cookie) => {
1692
- const headers2 = {
1693
- ...defheaders3,
1694
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
2059
+ var KuaishouData = async (data2, cookie, requestConfig) => {
2060
+ const defHeaders = getKuaishouDefaultConfig(cookie)["headers"];
2061
+ const baseRequestConfig = {
2062
+ method: "POST",
2063
+ timeout: 1e4,
2064
+ ...requestConfig,
2065
+ headers: {
2066
+ ...defHeaders,
2067
+ ...{}
2068
+ }
1695
2069
  };
1696
2070
  switch (data2.methodType) {
1697
2071
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
1698
2072
  const body = kuaishouApiUrls.\u5355\u4E2A\u4F5C\u54C1\u4FE1\u606F({ photoId: data2.photoId });
1699
- const VideoData = await GlobalGetData3({
2073
+ const VideoData = await GlobalGetData3(data2.methodType, {
2074
+ ...baseRequestConfig,
1700
2075
  url: body.url,
1701
- method: "POST",
1702
- headers: headers2,
1703
- body: body.body,
1704
- ...data2
2076
+ data: body.body
1705
2077
  });
1706
2078
  return VideoData;
1707
2079
  }
1708
2080
  case "\u8BC4\u8BBA\u6570\u636E": {
1709
2081
  const body = kuaishouApiUrls.\u4F5C\u54C1\u8BC4\u8BBA\u4FE1\u606F({ photoId: data2.photoId });
1710
- const VideoData = await GlobalGetData3({
2082
+ const VideoData = await GlobalGetData3(data2.methodType, {
2083
+ ...baseRequestConfig,
1711
2084
  url: body.url,
1712
- method: "POST",
1713
- headers: headers2,
1714
- body: body.body,
1715
- ...data2
2085
+ data: body.body
1716
2086
  });
1717
2087
  return VideoData;
1718
2088
  }
1719
2089
  case "Emoji\u6570\u636E": {
1720
2090
  const body = kuaishouApiUrls.\u8868\u60C5();
1721
- const EmojiData = await GlobalGetData3({
2091
+ const EmojiData = await GlobalGetData3(data2.methodType, {
2092
+ ...baseRequestConfig,
1722
2093
  url: body.url,
1723
- method: "POST",
1724
- headers: headers2,
1725
- body: body.body,
1726
- ...data2
2094
+ data: body.body
1727
2095
  });
1728
2096
  return EmojiData;
1729
2097
  }
@@ -1732,22 +2100,22 @@ var KuaishouData = async (data2, cookie) => {
1732
2100
  return null;
1733
2101
  }
1734
2102
  };
1735
- var GlobalGetData3 = async (options) => {
2103
+ var GlobalGetData3 = async (type, options) => {
1736
2104
  let warningMessage = "";
1737
2105
  try {
1738
- const result = await new Networks(options).getData();
2106
+ const result = await fetchData(options);
1739
2107
  if (result === "" || !result || result.result === 2) {
1740
2108
  const Err = {
1741
2109
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF01`,
1742
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
2110
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1743
2111
  requestUrl: options.url,
1744
- requestBody: JSON.stringify(options.body)
2112
+ requestBody: JSON.stringify(options.data)
1745
2113
  };
1746
2114
  warningMessage = `
1747
2115
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u5FEB\u624Bck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
1748
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
2116
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1749
2117
  \u8BF7\u6C42URL\uFF1A${options.url}
1750
- \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.body, null, 2)}
2118
+ \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.data, null, 2)}
1751
2119
  `;
1752
2120
  logger.warn(warningMessage);
1753
2121
  throw {
@@ -1767,7 +2135,7 @@ var GlobalGetData3 = async (options) => {
1767
2135
  data: null,
1768
2136
  amagiError: {
1769
2137
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1770
- requestType: options.methodType,
2138
+ requestType: type,
1771
2139
  requestUrl: options.url
1772
2140
  },
1773
2141
  amagiMessage: warningMessage
@@ -1991,23 +2359,26 @@ var createErrorResponse = (error, message, code = 500) => {
1991
2359
  };
1992
2360
 
1993
2361
  // src/model/DataFetchers.ts
1994
- async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2362
+ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
1995
2363
  try {
1996
2364
  let options;
1997
2365
  let cookie;
2366
+ let config;
1998
2367
  if (typeof optionsOrCookie === "string") {
1999
2368
  cookie = optionsOrCookie;
2000
2369
  options = cookieOrOptions;
2370
+ config = requestConfig;
2001
2371
  } else {
2002
2372
  options = optionsOrCookie;
2003
2373
  cookie = cookieOrOptions;
2374
+ config = requestConfig;
2004
2375
  }
2005
2376
  const { typeMode: _, ...validationOptions } = options || {};
2006
2377
  const validatedParams = validateDouyinParams(methodType, validationOptions);
2007
2378
  const apiParams = {
2008
2379
  ...validatedParams
2009
2380
  };
2010
- const rawData = await DouyinData(apiParams, cookie);
2381
+ const rawData = await DouyinData(apiParams, cookie, config);
2011
2382
  if (rawData.data === "") {
2012
2383
  return createErrorResponse(rawData.amagiError, "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
2013
2384
  }
@@ -2017,7 +2388,7 @@ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2017
2388
  throw new Error(`\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2018
2389
  }
2019
2390
  }
2020
- async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2391
+ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2021
2392
  try {
2022
2393
  let options;
2023
2394
  let cookie;
@@ -2043,7 +2414,7 @@ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2043
2414
  throw new Error(`B\u7AD9\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2044
2415
  }
2045
2416
  }
2046
- async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions) {
2417
+ async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2047
2418
  try {
2048
2419
  let options;
2049
2420
  let cookie;
@@ -2209,7 +2580,7 @@ var bilibili = {
2209
2580
  */
2210
2581
  convertBvToAv: createBilibiliApiMethod("BV\u8F6CAV")
2211
2582
  };
2212
- var createBoundBilibiliApi = (cookie) => {
2583
+ var createBoundBilibiliApi = (cookie, requestConfig) => {
2213
2584
  return {
2214
2585
  /**
2215
2586
  * 获取单个视频作品数据
@@ -2415,10 +2786,10 @@ var createValidationMiddleware = (validateFn, methodType) => {
2415
2786
  var createDouyinValidationMiddleware = (methodType) => createValidationMiddleware(validateDouyinParams, methodType);
2416
2787
  var createBilibiliValidationMiddleware = (methodType) => createValidationMiddleware(validateBilibiliParams, methodType);
2417
2788
  var createKuaishouValidationMiddleware = (methodType) => createValidationMiddleware(validateKuaishouParams, methodType);
2418
- var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2789
+ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2419
2790
  return async (req, res) => {
2420
2791
  try {
2421
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2792
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2422
2793
  res.json({
2423
2794
  ...result,
2424
2795
  requestPath: req.originalUrl
@@ -2432,97 +2803,97 @@ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2432
2803
  }
2433
2804
  };
2434
2805
  };
2435
- var createBilibiliRoutes = (cookie) => {
2806
+ var createBilibiliRoutes = (cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2436
2807
  const router = Router();
2437
2808
  router.get(
2438
2809
  "/fetch_one_video",
2439
2810
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2440
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2811
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2441
2812
  );
2442
2813
  router.get(
2443
2814
  "/fetch_video_playurl",
2444
2815
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2445
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2816
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2446
2817
  );
2447
2818
  router.get(
2448
2819
  "/fetch_work_comments",
2449
2820
  createBilibiliValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2450
- createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2821
+ createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2451
2822
  );
2452
2823
  router.get(
2453
2824
  "/fetch_user_profile",
2454
2825
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2455
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
2826
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2456
2827
  );
2457
2828
  router.get(
2458
2829
  "/fetch_user_dynamic",
2459
2830
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E"),
2460
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie)
2831
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie, requestConfig)
2461
2832
  );
2462
2833
  router.get(
2463
2834
  "/fetch_emoji_list",
2464
2835
  createBilibiliValidationMiddleware("Emoji\u6570\u636E"),
2465
- createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie)
2836
+ createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie, requestConfig)
2466
2837
  );
2467
2838
  router.get(
2468
2839
  "/fetch_bangumi_video_info",
2469
2840
  createBilibiliValidationMiddleware("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"),
2470
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie)
2841
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2471
2842
  );
2472
2843
  router.get(
2473
2844
  "/fetch_bangumi_video_playurl",
2474
2845
  createBilibiliValidationMiddleware("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2475
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2846
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2476
2847
  );
2477
2848
  router.get(
2478
2849
  "/fetch_dynamic_info",
2479
2850
  createBilibiliValidationMiddleware("\u52A8\u6001\u8BE6\u60C5\u6570\u636E"),
2480
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie)
2851
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie, requestConfig)
2481
2852
  );
2482
2853
  router.get(
2483
2854
  "/fetch_dynamic_card",
2484
2855
  createBilibiliValidationMiddleware("\u52A8\u6001\u5361\u7247\u6570\u636E"),
2485
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie)
2856
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie, requestConfig)
2486
2857
  );
2487
2858
  router.get(
2488
2859
  "/fetch_live_room_detail",
2489
2860
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F"),
2490
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie)
2861
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie, requestConfig)
2491
2862
  );
2492
2863
  router.get(
2493
2864
  "/fetch_liveroom_def",
2494
2865
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"),
2495
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie)
2866
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie, requestConfig)
2496
2867
  );
2497
2868
  router.get(
2498
2869
  "/login_basic_info",
2499
2870
  createBilibiliValidationMiddleware("\u767B\u5F55\u57FA\u672C\u4FE1\u606F"),
2500
- createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie)
2871
+ createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie, requestConfig)
2501
2872
  );
2502
2873
  router.get(
2503
2874
  "/new_login_qrcode",
2504
2875
  createBilibiliValidationMiddleware("\u7533\u8BF7\u4E8C\u7EF4\u7801"),
2505
- createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie)
2876
+ createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie, requestConfig)
2506
2877
  );
2507
2878
  router.get(
2508
2879
  "/check_qrcode",
2509
2880
  createBilibiliValidationMiddleware("\u4E8C\u7EF4\u7801\u72B6\u6001"),
2510
- createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie)
2881
+ createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie, requestConfig)
2511
2882
  );
2512
2883
  router.get(
2513
2884
  "/fetch_user_full_view",
2514
2885
  createBilibiliValidationMiddleware("\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"),
2515
- createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie)
2886
+ createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie, requestConfig)
2516
2887
  );
2517
2888
  router.get(
2518
2889
  "/av_to_bv",
2519
2890
  createBilibiliValidationMiddleware("AV\u8F6CBV"),
2520
- createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie)
2891
+ createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie, requestConfig)
2521
2892
  );
2522
2893
  router.get(
2523
2894
  "/bv_to_av",
2524
2895
  createBilibiliValidationMiddleware("BV\u8F6CAV"),
2525
- createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie)
2896
+ createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie, requestConfig)
2526
2897
  );
2527
2898
  return router;
2528
2899
  };
@@ -2540,13 +2911,13 @@ var bilibiliUtils = {
2540
2911
 
2541
2912
  // src/platform/douyin/DouyinApi.ts
2542
2913
  var createDouyinApiMethod = (methodType) => {
2543
- return async (options, cookie) => {
2544
- return await getDouyinData(methodType, options, cookie);
2914
+ return async (options, cookie, requestConfig) => {
2915
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2545
2916
  };
2546
2917
  };
2547
- var createBoundDouyinApiMethod = (methodType, cookie) => {
2918
+ var createBoundDouyinApiMethod = (methodType, cookie, requestConfig) => {
2548
2919
  return async (options) => {
2549
- return await getDouyinData(methodType, options, cookie);
2920
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2550
2921
  };
2551
2922
  };
2552
2923
  var douyin = {
@@ -2649,98 +3020,98 @@ var douyin = {
2649
3020
  */
2650
3021
  getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E")
2651
3022
  };
2652
- var createBoundDouyinApi = (cookie) => {
3023
+ var createBoundDouyinApi = (cookie, requestConfig) => {
2653
3024
  return {
2654
3025
  /**
2655
3026
  * 聚合解析 (视频/图集/合辑)
2656
3027
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2657
3028
  * @returns 统一格式的API响应,包含视频、图集或合辑数据
2658
3029
  */
2659
- getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie),
3030
+ getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie, requestConfig),
2660
3031
  /**
2661
3032
  * 获取视频作品数据
2662
3033
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2663
3034
  * @returns 统一格式的API响应,包含视频作品详细信息
2664
3035
  */
2665
- getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie),
3036
+ getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2666
3037
  /**
2667
3038
  * 获取图集作品数据
2668
3039
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2669
3040
  * @returns 统一格式的API响应,包含图集作品详细信息
2670
3041
  */
2671
- getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie),
3042
+ getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2672
3043
  /**
2673
3044
  * 获取合辑作品数据
2674
3045
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2675
3046
  * @returns 统一格式的API响应,包含合辑作品详细信息
2676
3047
  */
2677
- getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie),
3048
+ getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2678
3049
  /**
2679
3050
  * 获取评论数据
2680
3051
  * @param options 请求参数,包含 aweme_id, 可选的 number, cursor 和 typeMode
2681
3052
  * @returns 统一格式的API响应,包含评论列表数据
2682
3053
  */
2683
- getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie),
3054
+ getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig),
2684
3055
  /**
2685
3056
  * 获取指定评论回复数据
2686
3057
  * @param options 请求参数,包含 aweme_id, comment_id, 可选的 number, cursor 和 typeMode
2687
3058
  * @returns 统一格式的API响应,包含评论回复数据
2688
3059
  */
2689
- getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie),
3060
+ getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig),
2690
3061
  /**
2691
3062
  * 获取用户主页数据
2692
3063
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2693
3064
  * @returns 统一格式的API响应,包含用户详细信息
2694
3065
  */
2695
- getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie),
3066
+ getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig),
2696
3067
  /**
2697
3068
  * 获取 Emoji 数据
2698
3069
  * @param options 可选的请求参数 (主要用于 typeMode)
2699
3070
  * @returns 统一格式的API响应,包含Emoji列表数据
2700
3071
  */
2701
- getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie),
3072
+ getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie, requestConfig),
2702
3073
  /**
2703
3074
  * 获取动态表情数据
2704
3075
  * @param options 可选的请求参数 (主要用于 typeMode)
2705
3076
  * @returns 统一格式的API响应,包含动态表情数据
2706
3077
  */
2707
- getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie),
3078
+ getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig),
2708
3079
  /**
2709
3080
  * 获取用户主页视频列表数据
2710
3081
  * @param options 请求参数,包含 sec_uid, 可选的 number, max_cursor 和 typeMode
2711
3082
  * @returns 统一格式的API响应,包含用户发布的视频列表
2712
3083
  */
2713
- getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie),
3084
+ getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig),
2714
3085
  /**
2715
3086
  * 获取音乐数据
2716
3087
  * @param options 请求参数,包含 music_id 和可选的 typeMode
2717
3088
  * @returns 统一格式的API响应,包含音乐详细信息
2718
3089
  */
2719
- getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie),
3090
+ getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie, requestConfig),
2720
3091
  /**
2721
3092
  * 获取热点词数据
2722
3093
  * @param options 请求参数,包含 query, 可选的 number 和 typeMode
2723
3094
  * @returns 统一格式的API响应,包含热点搜索词列表
2724
3095
  */
2725
- getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie),
3096
+ getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig),
2726
3097
  /**
2727
3098
  * 获取搜索数据
2728
3099
  * @param options 请求参数,包含 query, 可选的 number, search_id, cursor 和 typeMode
2729
3100
  * @returns 统一格式的API响应,包含搜索结果数据
2730
3101
  */
2731
- search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie),
3102
+ search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie, requestConfig),
2732
3103
  /**
2733
3104
  * 获取直播间信息
2734
3105
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2735
3106
  * @returns 统一格式的API响应,包含直播间详细信息
2736
3107
  */
2737
- getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
3108
+ getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2738
3109
  };
2739
3110
  };
2740
- var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
3111
+ var createDouyinRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2741
3112
  return async (req, res) => {
2742
3113
  try {
2743
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
3114
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2744
3115
  res.json({
2745
3116
  ...result,
2746
3117
  requestPath: req.originalUrl
@@ -2754,77 +3125,77 @@ var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
2754
3125
  }
2755
3126
  };
2756
3127
  };
2757
- var createDouyinRoutes = (cookie) => {
3128
+ var createDouyinRoutes = (cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2758
3129
  const router = Router();
2759
3130
  router.get(
2760
3131
  "/fetch_one_work",
2761
3132
  createDouyinValidationMiddleware("\u805A\u5408\u89E3\u6790"),
2762
- createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie)
3133
+ createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie, requestConfig)
2763
3134
  );
2764
3135
  router.get(
2765
3136
  "/fetch_one_work",
2766
3137
  createDouyinValidationMiddleware("\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2767
- createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
3138
+ createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2768
3139
  );
2769
3140
  router.get(
2770
3141
  "/fetch_one_work",
2771
3142
  createDouyinValidationMiddleware("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E"),
2772
- createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie)
3143
+ createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2773
3144
  );
2774
3145
  router.get(
2775
3146
  "/fetch_one_work",
2776
3147
  createDouyinValidationMiddleware("\u5408\u8F91\u4F5C\u54C1\u6570\u636E"),
2777
- createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie)
3148
+ createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2778
3149
  );
2779
3150
  router.get(
2780
3151
  "/fetch_work_comments",
2781
3152
  createDouyinValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2782
- createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie)
3153
+ createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2783
3154
  );
2784
3155
  router.get(
2785
3156
  "/fetch_user_info",
2786
3157
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2787
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
3158
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2788
3159
  );
2789
3160
  router.get(
2790
3161
  "/fetch_user_post_videos",
2791
3162
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E"),
2792
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie)
3163
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig)
2793
3164
  );
2794
3165
  router.get(
2795
3166
  "/fetch_search_info",
2796
3167
  createDouyinValidationMiddleware("\u641C\u7D22\u6570\u636E"),
2797
- createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie)
3168
+ createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie, requestConfig)
2798
3169
  );
2799
3170
  router.get(
2800
3171
  "/fetch_suggest_words",
2801
3172
  createDouyinValidationMiddleware("\u70ED\u70B9\u8BCD\u6570\u636E"),
2802
- createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie)
3173
+ createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig)
2803
3174
  );
2804
3175
  router.get(
2805
3176
  "/fetch_music_work",
2806
3177
  createDouyinValidationMiddleware("\u97F3\u4E50\u6570\u636E"),
2807
- createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie)
3178
+ createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie, requestConfig)
2808
3179
  );
2809
3180
  router.get(
2810
3181
  "/fetch_emoji_list",
2811
3182
  createDouyinValidationMiddleware("Emoji\u6570\u636E"),
2812
- createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie)
3183
+ createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie, requestConfig)
2813
3184
  );
2814
3185
  router.get(
2815
3186
  "/fetch_emoji_pro_list",
2816
3187
  createDouyinValidationMiddleware("\u52A8\u6001\u8868\u60C5\u6570\u636E"),
2817
- createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie)
3188
+ createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig)
2818
3189
  );
2819
3190
  router.get(
2820
3191
  "/fetch_user_live_videos",
2821
3192
  createDouyinValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"),
2822
- createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
3193
+ createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2823
3194
  );
2824
3195
  router.get(
2825
3196
  "/fetch_video_comment_replies",
2826
3197
  createDouyinValidationMiddleware("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
2827
- createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie)
3198
+ createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig)
2828
3199
  );
2829
3200
  return router;
2830
3201
  };
@@ -2835,10 +3206,10 @@ var douyinUtils = {
2835
3206
  douyinApiUrls,
2836
3207
  api: douyin
2837
3208
  };
2838
- var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
3209
+ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2839
3210
  return async (req, res) => {
2840
3211
  try {
2841
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
3212
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2842
3213
  res.json({
2843
3214
  ...result,
2844
3215
  requestPath: req.originalUrl
@@ -2852,22 +3223,22 @@ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
2852
3223
  }
2853
3224
  };
2854
3225
  };
2855
- var createKuaishouRoutes = (cookie) => {
3226
+ var createKuaishouRoutes = (cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2856
3227
  const router = Router();
2857
3228
  router.get(
2858
3229
  "/fetch_one_work",
2859
3230
  createKuaishouValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2860
- createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
3231
+ createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2861
3232
  );
2862
3233
  router.get(
2863
3234
  "/fetch_work_comments",
2864
3235
  createKuaishouValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2865
- createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie)
3236
+ createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2866
3237
  );
2867
3238
  router.get(
2868
3239
  "/fetch_emoji_list",
2869
3240
  createKuaishouValidationMiddleware("Emoji\u6570\u636E"),
2870
- createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie)
3241
+ createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie, requestConfig)
2871
3242
  );
2872
3243
  return router;
2873
3244
  };
@@ -2906,7 +3277,7 @@ var kuaishou = {
2906
3277
  */
2907
3278
  getEmojiList: createKuaishouApiMethod("Emoji\u6570\u636E")
2908
3279
  };
2909
- var createBoundKuaishouApi = (cookie) => {
3280
+ var createBoundKuaishouApi = (cookie, requestConfig) => {
2910
3281
  return {
2911
3282
  /**
2912
3283
  * 获取单个视频作品数据
@@ -2934,161 +3305,83 @@ var kuaishouUtils = {
2934
3305
  kuaishouApiUrls,
2935
3306
  api: kuaishou
2936
3307
  };
2937
-
2938
- // src/v4/DataFetchers.ts
2939
- async function getDouyinData2(type, arg2, arg3) {
2940
- let cookie;
2941
- let options;
2942
- if (typeof arg2 === "string") {
2943
- cookie = arg2;
2944
- options = arg3;
2945
- } else {
2946
- options = arg2;
2947
- cookie = arg3;
2948
- }
2949
- const data2 = await DouyinData({ ...options, methodType: type }, cookie);
2950
- return data2;
2951
- }
2952
- async function getBilibiliData2(methodType, arg2, arg3) {
2953
- let cookie;
2954
- let options;
2955
- if (typeof arg2 === "string") {
2956
- cookie = arg2;
2957
- options = arg3;
2958
- } else {
2959
- options = arg2;
2960
- cookie = arg3;
2961
- }
2962
- const data2 = await fetchBilibili({ ...options, methodType }, cookie);
2963
- return data2;
2964
- }
2965
- async function getKuaishouData2(methodType, arg2, arg3) {
2966
- let cookie;
2967
- let options;
2968
- if (typeof arg2 === "string") {
2969
- cookie = arg2;
2970
- options = arg3;
2971
- } else {
2972
- options = arg2;
2973
- cookie = arg3;
2974
- }
2975
- const data2 = await KuaishouData({ ...options, methodType }, cookie);
2976
- return data2;
2977
- }
2978
- var fetchDouyinData = getDouyinData2;
2979
- var fetchBilibiliData = getBilibiliData2;
2980
- var fetchKuaishouData = getKuaishouData2;
2981
- var v4CompatibilityMiddleware = (req, res, next) => {
2982
- const originalJson = res.json;
2983
- res.json = (data2) => {
2984
- if (data2 && typeof data2 === "object" && "data" in data2 && "message" in data2 && "code" in data2) {
2985
- const v4Response = {
2986
- ...data2.data,
2987
- ...data2.requestPath && { requestPath: data2.requestPath }
2988
- };
2989
- return originalJson.call(void 0, v4Response);
2990
- }
2991
- return originalJson.call(void 0, data2);
2992
- };
2993
- next();
2994
- };
2995
- var amagiClient = class {
2996
- #douyin;
2997
- #bilibili;
2998
- #kuaishou;
2999
- /**
3000
- *
3001
- * @param cookie - 包含抖音ck、B站ck、快手ck的对象
3002
- */
3003
- constructor(options) {
3004
- this.#douyin = (options == null ? void 0 : options.douyin) ?? "";
3005
- this.#bilibili = (options == null ? void 0 : options.bilibili) ?? "";
3006
- this.#kuaishou = (options == null ? void 0 : options.kuaishou) ?? "";
3007
- }
3008
- /**
3009
- * 启动本地 HTTP 服务
3010
- * @param port - 监听端口
3011
- * @defaultValue `port` 4567
3012
- * @returns Express 应用实例
3013
- */
3014
- startClient = (port = 4567) => {
3308
+ var createAmagiClient = (options) => {
3309
+ var _a, _b, _c;
3310
+ const douyinCookie = ((_a = options == null ? void 0 : options.cookies) == null ? void 0 : _a.douyin) ?? "";
3311
+ const bilibiliCookie = ((_b = options == null ? void 0 : options.cookies) == null ? void 0 : _b.bilibili) ?? "";
3312
+ const kuaishouCookie = ((_c = options == null ? void 0 : options.cookies) == null ? void 0 : _c.kuaishou) ?? "";
3313
+ const requestConfig = (options == null ? void 0 : options.request) ?? {};
3314
+ const startServer = (port = 4567) => {
3015
3315
  const app = express();
3316
+ app.use(express.json());
3317
+ app.use(express.urlencoded({ extended: true }));
3016
3318
  app.get("/", (_req, res) => {
3017
3319
  res.redirect(301, "https://amagi.apifox.cn");
3018
3320
  });
3019
3321
  app.get("/docs", (_req, res) => {
3020
3322
  res.redirect(301, "https://amagi.apifox.cn");
3021
3323
  });
3022
- app.use(logMiddleware(["/api/douyin", "/api/bilibili", "/api/kuaishou"]));
3023
- app.use("/api/douyin", v4CompatibilityMiddleware);
3024
- app.use("/api/bilibili", v4CompatibilityMiddleware);
3025
- app.use("/api/kuaishou", v4CompatibilityMiddleware);
3026
- app.use("/api/douyin", createDouyinRoutes(this.#douyin));
3027
- app.use("/api/bilibili", createBilibiliRoutes(this.#bilibili));
3028
- app.use("/api/kuaishou", createKuaishouRoutes(this.#kuaishou));
3324
+ app.use("/api/douyin", createDouyinRoutes(douyinCookie, requestConfig));
3325
+ app.use("/api/bilibili", createBilibiliRoutes(bilibiliCookie, requestConfig));
3326
+ app.use("/api/kuaishou", createKuaishouRoutes(kuaishouCookie, requestConfig));
3029
3327
  app.listen(port, "::", () => {
3030
3328
  logger.mark(`Amagi server listening on ${logger.green(`http://localhost:${port}`)} ${logger.yellow("API docs: https://amagi.apifox.cn ")}`);
3031
3329
  });
3032
3330
  return app;
3033
3331
  };
3034
- /**
3035
- * 快捷获取抖音数据
3036
- * @param type - 请求数据类型
3037
- * @param options - 请求参数,是一个对象
3038
- * @returns 返回接口的原始数据
3039
- */
3040
- getDouyinData = async (methodType, options) => {
3041
- const fullOptions = {
3042
- methodType,
3043
- ...options
3044
- };
3045
- const result = await getDouyinData2(methodType, this.#douyin, fullOptions);
3046
- return result && typeof result === "object" && "data" in result ? result.data : result;
3332
+ const startClient = (port = 4567) => {
3333
+ return startServer(port);
3047
3334
  };
3048
- /**
3049
- * 快捷获取B站数据
3050
- * @param type - 请求数据类型
3051
- * @param options - 请求参数,是一个对象
3052
- * @returns 返回接口的原始数据
3053
- */
3054
- getBilibiliData = async (methodType, options) => {
3055
- const fullOptions = {
3056
- methodType,
3057
- ...options
3058
- };
3059
- const result = await getBilibiliData2(methodType, this.#bilibili, fullOptions);
3060
- return result && typeof result === "object" && "data" in result ? result.data : result;
3335
+ const getDouyinDataWithCookie = async (methodType, options2) => {
3336
+ return await getDouyinData(methodType, options2, douyinCookie, requestConfig);
3061
3337
  };
3062
- /**
3063
- * 快捷获取快手数据
3064
- * @param type - 请求数据类型
3065
- * @param options - 请求参数,是一个对象
3066
- * @returns 返回接口的原始数据
3067
- */
3068
- getKuaishouData = async (methodType, options) => {
3069
- const fullOptions = {
3070
- methodType,
3071
- ...options
3072
- };
3073
- const result = await getKuaishouData2(methodType, this.#kuaishou, fullOptions);
3074
- return result && typeof result === "object" && "data" in result ? result.data : result;
3338
+ const getBilibiliDataWithCookie = async (methodType, options2) => {
3339
+ return await getBilibiliData(methodType, options2, bilibiliCookie);
3340
+ };
3341
+ const getKuaishouDataWithCookie = async (methodType, options2) => {
3342
+ return await getKuaishouData(methodType, options2, kuaishouCookie);
3343
+ };
3344
+ return {
3345
+ /** 启动本地HTTP服务 */
3346
+ startServer,
3347
+ /** @deprecated 此方法已废弃,请使用 startServer 方法代替 */
3348
+ startClient,
3349
+ getDouyinData: getDouyinDataWithCookie,
3350
+ getBilibiliData: getBilibiliDataWithCookie,
3351
+ getKuaishouData: getKuaishouDataWithCookie,
3352
+ douyin: {
3353
+ ...douyinUtils,
3354
+ /** 绑定了cookie和请求配置的抖音API对象,调用时不需要传递cookie */
3355
+ api: createBoundDouyinApi(douyinCookie, requestConfig)
3356
+ },
3357
+ bilibili: {
3358
+ ...bilibiliUtils,
3359
+ /** 绑定了cookie和请求配置的B站API对象,调用时不需要传递cookie */
3360
+ api: createBoundBilibiliApi(bilibiliCookie)
3361
+ },
3362
+ kuaishou: {
3363
+ ...kuaishouUtils,
3364
+ /** 绑定了cookie和请求配置的快手API对象,调用时不需要传递cookie */
3365
+ api: createBoundKuaishouApi(kuaishouCookie)
3366
+ }
3075
3367
  };
3076
3368
  };
3077
3369
 
3078
3370
  // src/index.ts
3079
- function createAmagiClient(options = {}) {
3080
- if (!(this instanceof createAmagiClient)) {
3081
- return new createAmagiClient(options);
3371
+ var amagiClient = createAmagiClient;
3372
+ function CreateAmagiApp(options = {}) {
3373
+ if (!(this instanceof CreateAmagiApp)) {
3374
+ return createAmagiClient(options);
3082
3375
  }
3083
- return new amagiClient(options);
3376
+ return createAmagiClient(options);
3084
3377
  }
3085
- createAmagiClient.douyin = douyinUtils;
3086
- createAmagiClient.bilibili = bilibiliUtils;
3087
- createAmagiClient.kuaishou = kuaishouUtils;
3088
- createAmagiClient.getDouyinData = getDouyinData2;
3089
- createAmagiClient.getBilibiliData = getBilibiliData2;
3090
- createAmagiClient.getKuaishouData = getKuaishouData2;
3091
- var CreateApp = createAmagiClient;
3378
+ CreateAmagiApp.douyin = douyinUtils;
3379
+ CreateAmagiApp.bilibili = bilibiliUtils;
3380
+ CreateAmagiApp.kuaishou = kuaishouUtils;
3381
+ CreateAmagiApp.getDouyinData = getDouyinData;
3382
+ CreateAmagiApp.getBilibiliData = getBilibiliData;
3383
+ CreateAmagiApp.getKuaishouData = getKuaishouData;
3384
+ var CreateApp = CreateAmagiApp;
3092
3385
  var Client = CreateApp;
3093
3386
  var amagi = Client;
3094
3387
  /*!
@@ -3097,4 +3390,4 @@ var amagi = Client;
3097
3390
  * GPL-3.0 Licensed
3098
3391
  */
3099
3392
 
3100
- export { CreateApp, Networks, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createDouyinRoutes, createKuaishouRoutes, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchBilibiliData, fetchDouyinData, fetchKuaishouData, getBilibiliData2 as getBilibiliData, getDouyinData2 as getDouyinData, getKuaishouData2 as getKuaishouData, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, createDouyinRoutes as registerBilibiliRoutes, createBilibiliRoutes as registerDouyinRoutes, createKuaishouRoutes as registerKuaishouRoutes, wbi_sign };
3393
+ export { ApiError, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliCommentParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidationSchemas2 as BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CreateApp, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas2 as DouyinValidationSchemas, DouyinWorkParamsSchema, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouValidationSchemas2 as KuaishouValidationSchemas, KuaishouVideoParamsSchema, ValidationError, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createDouyinRoutes, createErrorResponse, createKuaishouRoutes, createSuccessResponse, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchData, fetchResponse, getBilibiliData, getDouyinData, getHeadersAndData, getKuaishouData, handleError, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, createBilibiliRoutes as registerBilibiliRoutes, createDouyinRoutes as registerDouyinRoutes, createKuaishouRoutes as registerKuaishouRoutes, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, wbi_sign };