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