@ikenxuan/amagi 4.5.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -151,142 +151,49 @@ var logMiddleware = (pathsToLog) => {
151
151
  next();
152
152
  };
153
153
  };
154
- var Networks = class {
155
- url;
156
- method;
157
- headers;
158
- type;
159
- body;
160
- axiosInstance;
161
- isGetResult;
162
- timeout;
163
- timer;
164
- data;
165
- constructor(data2) {
166
- this.headers = data2.headers ?? {};
167
- this.url = data2.url ?? "";
168
- this.type = data2.responseType ?? "json";
169
- this.method = data2.method ?? "GET";
170
- this.body = data2.body ?? null;
171
- this.data = {};
172
- this.timeout = data2.timeout ?? 15e3;
173
- this.isGetResult = false;
174
- this.timer = void 0;
175
- this.axiosInstance = axios.create({
176
- timeout: this.timeout,
177
- headers: this.headers,
178
- maxRedirects: 5,
179
- validateStatus: (status) => {
180
- return status >= 200 && status < 600;
181
- }
182
- });
183
- }
184
- get config() {
185
- let config = {
186
- url: this.url,
187
- method: this.method,
188
- headers: this.headers
189
- };
190
- if (this.method === "POST" && this.body) {
191
- config.data = this.body;
192
- }
193
- return config;
194
- }
195
- async getfetch() {
196
- try {
197
- const result = await this.returnResult();
198
- if (result.status === 504) {
199
- return result;
200
- }
201
- this.isGetResult = true;
202
- return result;
203
- } catch (error) {
204
- logger.info(error);
205
- return false;
206
- }
207
- }
208
- async returnResult() {
209
- return await this.axiosInstance(this.config);
210
- }
211
- /** 最终地址(跟随重定向) */
212
- async getLongLink() {
213
- try {
214
- const response = await this.axiosInstance({
215
- method: "GET",
216
- url: this.url
217
- });
218
- return response.request.res.responseUrl;
219
- } catch (error) {
220
- if (error instanceof AxiosError) {
221
- throw new Error(error.stack);
222
- }
223
- return "";
154
+ var fetchData = async (config) => {
155
+ try {
156
+ const response = await axios(config);
157
+ if (response.status === 429) {
158
+ logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
159
+ throw new Error("ratelimit triggered, \u89E6\u53D1\u901F\u7387\u9650\u5236\uFF01");
224
160
  }
225
- }
226
- /** 获取首个302 */
227
- async getLocation() {
228
- try {
229
- const response = await this.axiosInstance({
230
- method: "GET",
231
- url: this.url,
232
- maxRedirects: 0,
233
- // 禁止跟随重定向
234
- validateStatus: (status) => status >= 300 && status < 400
235
- // 仅处理3xx响应
236
- });
237
- return response.headers["location"];
238
- } catch (error) {
239
- if (error instanceof AxiosError) {
240
- throw new Error(error.stack);
241
- }
242
- return "";
161
+ return response.data;
162
+ } catch (error) {
163
+ if (error instanceof AxiosError) {
164
+ logger.error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25:", error.message);
165
+ throw error;
243
166
  }
167
+ throw error;
244
168
  }
245
- /** 获取数据并处理数据的格式化,默认json */
246
- async getData(new_fetch = "") {
247
- try {
248
- if (!new_fetch) {
249
- const result = await this.returnResult();
250
- if (result.status === 504) {
251
- return result;
252
- }
253
- if (result.status === 429) {
254
- logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
255
- throw new Error("ratelimit triggered, \u89E6\u53D1 https://www.douyin.com/ \u7684\u901F\u7387\u9650\u5236\uFF01\uFF01\uFF01");
256
- }
257
- this.axiosInstance = result;
258
- this.isGetResult = true;
259
- } else {
260
- this.axiosInstance = new_fetch;
261
- }
262
- return this.axiosInstance.data;
263
- } catch (error) {
264
- if (error instanceof AxiosError) {
265
- throw new Error(error.stack);
266
- }
267
- return false;
169
+ };
170
+ var fetchResponse = async (config) => {
171
+ try {
172
+ return await axios(config);
173
+ } catch (error) {
174
+ if (error instanceof AxiosError) {
175
+ throw error;
268
176
  }
177
+ throw new Error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25");
269
178
  }
270
- async getHeadersAndData() {
271
- try {
272
- const result = await this.axiosInstance(this.config);
273
- let headers2 = {};
274
- const fetchHeaders = result.headers;
275
- for (const [key, value] of Object.entries(fetchHeaders)) {
276
- headers2[key] = value;
277
- }
278
- return { headers: headers2, data: result.data };
279
- } catch (error) {
280
- console.error("\u83B7\u53D6\u54CD\u5E94\u5934\u548C\u6570\u636E\u5931\u8D25:", error);
281
- return { headers: null, data: null };
282
- }
179
+ };
180
+ var getHeadersAndData = async (config) => {
181
+ try {
182
+ const response = await fetchResponse(config);
183
+ return {
184
+ headers: response.headers,
185
+ data: response.data
186
+ };
187
+ } catch (error) {
188
+ logger.error("\u83B7\u53D6\u54CD\u5E94\u5934\u548C\u6570\u636E\u5931\u8D25:", error);
189
+ return { headers: {}, data: {} };
283
190
  }
284
191
  };
285
192
 
286
193
  // src/platform/bilibili/qtparam.ts
287
194
  var qtparam = async (BASEURL, cookie) => {
288
195
  if (cookie === "") return { QUERY: "&platform=html5", STATUS: "!isLogin" };
289
- const logininfo = await new Networks({ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } }).getData();
196
+ const logininfo = await fetchData({ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } });
290
197
  const sign = await wbi_sign(BASEURL, cookie);
291
198
  const qn = [6, 16, 32, 64, 74, 80, 112, 116, 120, 125, 126, 127];
292
199
  let isvip;
@@ -337,7 +244,20 @@ var BiLiBiLiAPI = class {
337
244
  }
338
245
  /** 评论区类型,type参数详见 [评论区类型代码](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/comment/readme.md#评论区类型代码) */
339
246
  \u8BC4\u8BBA\u533A\u660E\u7EC6(data2) {
340
- return `https://api.bilibili.com/x/v2/reply?sort=1&ps=${data2.number ?? 20}&type=${data2.type}&oid=${data2.oid}&pn=${data2.pn}`;
247
+ const params = new URLSearchParams({
248
+ oid: data2.oid.toString(),
249
+ type: data2.type.toString(),
250
+ mode: (data2.mode ?? 3).toString(),
251
+ plat: "1",
252
+ seek_rpid: "",
253
+ web_location: "1315875"
254
+ });
255
+ if (data2.pagination_str) {
256
+ params.append("pagination_str", JSON.stringify({ offset: data2.pagination_str }));
257
+ } else {
258
+ params.append("pagination_str", JSON.stringify({ offset: "" }));
259
+ }
260
+ return `https://api.bilibili.com/x/v2/reply/wbi/main?${params.toString()}`;
341
261
  }
342
262
  \u8BC4\u8BBA\u533A\u72B6\u6001(data2) {
343
263
  return `https://api.bilibili.com/x/v2/reply/subject/description?type=${data2.type}&oid=${data2.oid}`;
@@ -393,116 +313,293 @@ var kuaishouAPIErrorCode = /* @__PURE__ */ ((kuaishouAPIErrorCode2) => {
393
313
  kuaishouAPIErrorCode2["UNKNOWN"] = "UNKNOWN_ERROR" /* UNKNOWN */;
394
314
  return kuaishouAPIErrorCode2;
395
315
  })(kuaishouAPIErrorCode || {});
316
+ var mixinKeyEncTab = [
317
+ 46,
318
+ 47,
319
+ 18,
320
+ 2,
321
+ 53,
322
+ 8,
323
+ 23,
324
+ 32,
325
+ 15,
326
+ 50,
327
+ 10,
328
+ 31,
329
+ 58,
330
+ 3,
331
+ 45,
332
+ 35,
333
+ 27,
334
+ 43,
335
+ 5,
336
+ 49,
337
+ 33,
338
+ 9,
339
+ 42,
340
+ 19,
341
+ 29,
342
+ 28,
343
+ 14,
344
+ 39,
345
+ 12,
346
+ 38,
347
+ 41,
348
+ 13,
349
+ 37,
350
+ 48,
351
+ 7,
352
+ 16,
353
+ 24,
354
+ 55,
355
+ 40,
356
+ 61,
357
+ 26,
358
+ 17,
359
+ 0,
360
+ 1,
361
+ 60,
362
+ 51,
363
+ 30,
364
+ 4,
365
+ 22,
366
+ 25,
367
+ 54,
368
+ 21,
369
+ 56,
370
+ 59,
371
+ 6,
372
+ 63,
373
+ 57,
374
+ 62,
375
+ 11,
376
+ 36,
377
+ 20,
378
+ 34,
379
+ 44,
380
+ 52
381
+ ];
382
+ var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
383
+ var encWbi = (params, img_key, sub_key) => {
384
+ const mixin_key = getMixinKey(img_key + sub_key);
385
+ const curr_time = Math.round(Date.now() / 1e3);
386
+ const chr_filter = /[!'()*]/g;
387
+ Object.assign(params, { wts: curr_time });
388
+ const query = Object.keys(params).sort().map((key) => {
389
+ const value = params[key].toString().replace(chr_filter, "");
390
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
391
+ }).join("&");
392
+ const wbi_sign2 = crypto.createHash("md5").update(query + mixin_key).digest("hex");
393
+ return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
394
+ };
395
+ var getWbiKeys = async (cookie) => {
396
+ const res = await axios("https://api.bilibili.com/x/web-interface/nav", {
397
+ headers: {
398
+ Cookie: cookie
399
+ }
400
+ });
401
+ const response = res.data;
402
+ const {
403
+ data: {
404
+ wbi_img: { img_url, sub_url }
405
+ }
406
+ } = response;
407
+ return {
408
+ img_key: img_url.slice(img_url.lastIndexOf("/") + 1, img_url.lastIndexOf(".")),
409
+ sub_key: sub_url.slice(sub_url.lastIndexOf("/") + 1, sub_url.lastIndexOf("."))
410
+ };
411
+ };
412
+ var wbi_sign = async (BASEURL, cookie) => {
413
+ const web_keys = await getWbiKeys(cookie);
414
+ const url = new URL(BASEURL);
415
+ const params = {};
416
+ for (const [key, value] of url.searchParams.entries()) {
417
+ params[key] = value;
418
+ }
419
+ const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
420
+ return query;
421
+ };
422
+
423
+ // src/platform/defaultConfigs.ts
424
+ var generateSecChUa = (userAgent) => {
425
+ const chromeMatch = userAgent.match(/Chrome\/(\d+)/);
426
+ const chromeVersion = chromeMatch ? chromeMatch[1] : "125";
427
+ return `"Not)A;Brand";v="8", "Chromium";v="${chromeVersion}", "Google Chrome";v="${chromeVersion}"`;
428
+ };
429
+ var getDouyinDefaultConfig = (cookie, requestConfig) => {
430
+ var _a;
431
+ const finalUserAgent = ((_a = void 0 ) == null ? void 0 : _a["User-Agent"]) || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36";
432
+ const defHeaders = {
433
+ Accept: "application/json, text/plain, */*",
434
+ "Accept-Encoding": "gzip, deflate, br, zstd",
435
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
436
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : "",
437
+ Priority: "u=1, i",
438
+ Referer: "https://www.douyin.com/",
439
+ "Sec-Ch-Ua": generateSecChUa(finalUserAgent),
440
+ "Sec-Ch-Ua-Mobile": "?0",
441
+ "Sec-Ch-Ua-Platform": '"Windows"',
442
+ "Sec-Fetch-Dest": "empty",
443
+ "Sec-Fetch-Mode": "cors",
444
+ "Sec-Fetch-Site": "same-origin",
445
+ "User-Agent": finalUserAgent
446
+ };
447
+ return {
448
+ method: "GET",
449
+ timeout: 1e4,
450
+ ...requestConfig,
451
+ headers: {
452
+ ...defHeaders,
453
+ ...{}
454
+ }
455
+ };
456
+ };
457
+ var getBilibiliDefaultConfig = (cookie, requestConfig) => {
458
+ const defHeaders = {
459
+ Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
460
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
461
+ "Cache-Control": "max-age=0",
462
+ Priority: "u=0, i",
463
+ "Sec-Ch-Ua": '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
464
+ "Sec-Ch-Ua-Mobile": "?0",
465
+ "Sec-Ch-Ua-Platform": '"Windows"',
466
+ "Sec-Fetch-Dest": "document",
467
+ "Sec-Fetch-Mode": "navigate",
468
+ "Sec-Fetch-Site": "none",
469
+ "Sec-Fetch-User": "?1",
470
+ "Upgrade-Insecure-Requests": "1",
471
+ Referer: "https://www.bilibili.com/",
472
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
473
+ };
474
+ return {
475
+ method: "GET",
476
+ timeout: 1e4,
477
+ ...requestConfig,
478
+ headers: {
479
+ ...defHeaders,
480
+ ...{}
481
+ }
482
+ };
483
+ };
484
+ var getKuaishouDefaultConfig = (cookie, requestConfig) => {
485
+ const defHeaders = {
486
+ Referer: "https://www.kuaishou.com/new-reco",
487
+ Origin: "https://www.kuaishou.com",
488
+ Accept: "application/json, text/plain, */*",
489
+ "Accept-Encoding": "gzip, deflate, br, zstd",
490
+ "Content-Type": "application/json",
491
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
492
+ Priority: "u=0, i",
493
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
494
+ Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
495
+ };
496
+ return {
497
+ method: "POST",
498
+ timeout: 1e4,
499
+ ...requestConfig,
500
+ headers: {
501
+ ...defHeaders,
502
+ ...{}
503
+ }
504
+ };
505
+ };
396
506
 
397
507
  // src/platform/bilibili/getdata.ts
398
- var defheaders = {
399
- 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",
400
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
401
- "cache-control": "max-age=0",
402
- priority: "u=0, i",
403
- "sec-ch-ua": "'Microsoft Edge';v='131', 'Chromium';v='131', 'Not_A Brand';v='24'",
404
- "sec-ch-ua-mobile": "?0",
405
- "sec-ch-ua-platform": "'Windows'",
406
- "sec-fetch-dest": "document",
407
- "sec-fetch-mode": "navigate",
408
- "sec-fetch-site": "none",
409
- "sec-fetch-user": "?1",
410
- "upgrade-insecure-requests": "1",
411
- referer: "https://www.bilibili.com/"
412
- };
413
- var fetchBilibili = async (data2, cookie) => {
414
- const headers2 = {
415
- ...defheaders,
416
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
508
+ var fetchBilibili = async (data2, cookie, requestConfig) => {
509
+ var _a, _b, _c, _d, _e, _f;
510
+ const defHeaders = getBilibiliDefaultConfig(cookie)["headers"];
511
+ const baseRequestConfig = {
512
+ method: "GET",
513
+ timeout: 1e4,
514
+ ...requestConfig,
515
+ headers: {
516
+ ...defHeaders,
517
+ ...{}
518
+ }
417
519
  };
418
520
  switch (data2.methodType) {
419
521
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
420
- const INFODATA = await GlobalGetData({
421
- url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid }),
422
- ...data2
522
+ const INFODATA = await GlobalGetData(data2.methodType, {
523
+ ...baseRequestConfig,
524
+ url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid })
423
525
  });
424
526
  return INFODATA;
425
527
  }
426
528
  case "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
427
529
  const BASEURL = bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid });
428
- const SIGN = await qtparam(BASEURL, headers2.cookie);
429
- const DATA = await GlobalGetData({
430
- url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY,
431
- headers: headers2,
432
- ...data2
530
+ const SIGN = await qtparam(BASEURL, (_a = baseRequestConfig.headers) == null ? void 0 : _a.cookie);
531
+ const DATA = await GlobalGetData(data2.methodType, {
532
+ ...baseRequestConfig,
533
+ url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY
433
534
  });
434
535
  return DATA;
435
536
  }
436
537
  case "\u8BC4\u8BBA\u6570\u636E": {
437
- let { oid, number, pn, type } = data2;
538
+ let { oid, number, type, mode, pagination_str, plat, seek_rpid, web_location } = data2;
438
539
  let fetchedComments = [];
439
- pn = pn ?? 1;
440
540
  const maxRequestCount = 100;
441
- const commentGrowthStabilized = 5;
442
- let lastFetchedCount = 0;
443
- let stabilizedCount = 0;
444
541
  let requestCount = 0;
445
542
  let tmpresp;
446
- while (fetchedComments.length < Number(number ?? 20) && requestCount < maxRequestCount) {
447
- if (number === 0 || number === void 0) {
448
- requestCount = 0;
449
- } else {
450
- requestCount = Math.min(20, Number(number) - fetchedComments.length);
451
- }
452
- const url = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u660E\u7EC6({
543
+ let nextPaginationStr = pagination_str;
544
+ let isEnd = false;
545
+ const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
546
+ const checkStatusRes = await GlobalGetData(data2.methodType, {
547
+ ...baseRequestConfig,
548
+ url: checkStatusUrl
549
+ });
550
+ if (checkStatusRes.data === null) {
551
+ logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
552
+ return {
553
+ code: 404,
554
+ message: "\u8BC4\u8BBA\u533A\u672A\u5F00\u653E",
555
+ data: null
556
+ };
557
+ }
558
+ while (fetchedComments.length < Number(number ?? 20) && requestCount < maxRequestCount && !isEnd) {
559
+ const baseUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u660E\u7EC6({
453
560
  type,
454
561
  oid,
455
- number: requestCount,
456
- pn
457
- });
458
- const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
459
- const checkStatusRes = await GlobalGetData({
460
- url: checkStatusUrl,
461
- headers: headers2,
462
- ...data2
562
+ mode: mode ?? 3,
563
+ pagination_str: nextPaginationStr,
564
+ plat: plat ?? 1,
565
+ seek_rpid,
566
+ web_location: web_location ?? "1315875"
463
567
  });
464
- if (checkStatusRes.data === null) {
465
- logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
466
- return {
467
- code: 404,
468
- message: "\u8BC4\u8BBA\u533A\u672A\u5F00\u653E",
469
- data: null
470
- };
471
- }
472
- const response = await GlobalGetData({
473
- url,
474
- headers: headers2,
475
- ...data2
568
+ const wbiSignQuery = await wbi_sign(baseUrl, (_b = baseRequestConfig.headers) == null ? void 0 : _b.cookie);
569
+ const finalUrl = baseUrl + wbiSignQuery;
570
+ const response = await GlobalGetData(data2.methodType, {
571
+ ...baseRequestConfig,
572
+ url: finalUrl
476
573
  });
477
574
  tmpresp = response;
478
- const currentCount = response.data.replies ? response.data.replies.length : 0;
479
- fetchedComments.push(...response.data.replies || []);
480
- if (currentCount === lastFetchedCount) {
481
- stabilizedCount++;
575
+ const currentComments = ((_c = response.data) == null ? void 0 : _c.replies) || [];
576
+ fetchedComments.push(...currentComments);
577
+ if ((_d = response.data) == null ? void 0 : _d.cursor) {
578
+ nextPaginationStr = (_e = response.data.cursor.pagination_reply) == null ? void 0 : _e.next_offset;
579
+ isEnd = response.data.cursor.is_end;
482
580
  } else {
483
- stabilizedCount = 0;
581
+ isEnd = true;
484
582
  }
485
- lastFetchedCount = currentCount;
486
- if (stabilizedCount >= commentGrowthStabilized || requestCount >= maxRequestCount) {
583
+ requestCount++;
584
+ if (isEnd || currentComments.length === 0 || !nextPaginationStr) {
585
+ logger.info("\u5DF2\u5230\u8FBE\u8BC4\u8BBA\u672B\u5C3E\u6216\u65E0\u66F4\u591A\u8BC4\u8BBA");
487
586
  break;
488
587
  }
489
- pn++;
490
- requestCount++;
491
588
  }
492
589
  const finalResponse = {
493
590
  ...tmpresp,
494
591
  data: {
495
592
  ...tmpresp.data,
496
- // 去重
497
- replies: Array.from(new Map(fetchedComments.map((item) => [item.rpid, item])).values()).slice(0, Number(data2.number))
593
+ // 去重并限制数量
594
+ replies: Array.from(new Map(fetchedComments.map((item) => [item.rpid, item])).values()).slice(0, Number(data2.number || 20))
498
595
  }
499
596
  };
500
597
  return finalResponse;
501
598
  }
502
599
  case "Emoji\u6570\u636E": {
503
- return await GlobalGetData({
504
- url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868(),
505
- ...data2
600
+ return await GlobalGetData(data2.methodType, {
601
+ ...baseRequestConfig,
602
+ url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868()
506
603
  });
507
604
  }
508
605
  case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
@@ -512,106 +609,121 @@ var fetchBilibili = async (data2, cookie) => {
512
609
  }
513
610
  const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
514
611
  const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
515
- const INFO = await GlobalGetData({
516
- url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId }),
517
- headers: headers2,
518
- ...data2
612
+ const INFO = await GlobalGetData(data2.methodType, {
613
+ ...baseRequestConfig,
614
+ url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId })
519
615
  });
520
616
  return INFO;
521
617
  }
522
618
  case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
523
619
  const BASEURL = bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
524
- const SIGN = await qtparam(BASEURL, headers2.cookie);
525
- const DATA = await GlobalGetData({
526
- url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY,
527
- headers: headers2,
528
- ...data2
620
+ const SIGN = await qtparam(BASEURL, (_f = baseRequestConfig.headers) == null ? void 0 : _f.cookie);
621
+ const DATA = await GlobalGetData(data2.methodType, {
622
+ ...baseRequestConfig,
623
+ url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY
529
624
  });
530
625
  return DATA;
531
626
  }
532
627
  case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
533
- delete headers2.referer;
628
+ const customConfig = {
629
+ ...baseRequestConfig,
630
+ headers: {
631
+ ...baseRequestConfig.headers,
632
+ // 只有在外部配置没有referer时才删除内部的referer
633
+ ...{
634
+ referer: void 0
635
+ }
636
+ }
637
+ };
534
638
  const { host_mid } = data2;
535
- const result = await GlobalGetData({
536
- url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid }),
537
- headers: headers2,
538
- ...data2
639
+ const result = await GlobalGetData(data2.methodType, {
640
+ ...customConfig,
641
+ url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid })
539
642
  });
540
643
  return result;
541
644
  }
542
645
  case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
543
- delete headers2.referer;
544
- const dynamicINFO = await GlobalGetData({
545
- url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id }),
546
- headers: headers2,
547
- ...data2
646
+ const customConfig = {
647
+ ...baseRequestConfig,
648
+ headers: {
649
+ ...baseRequestConfig.headers,
650
+ // 只有在外部配置没有referer时才删除内部的referer
651
+ ...{
652
+ referer: void 0
653
+ }
654
+ }
655
+ };
656
+ const dynamicINFO = await GlobalGetData(data2.methodType, {
657
+ ...customConfig,
658
+ url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id })
548
659
  });
549
660
  return dynamicINFO;
550
661
  }
551
662
  case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
552
- delete headers2.referer;
663
+ const customConfig = {
664
+ ...baseRequestConfig,
665
+ headers: {
666
+ ...baseRequestConfig.headers,
667
+ // 只有在外部配置没有referer时才删除内部的referer
668
+ ...{
669
+ referer: void 0
670
+ }
671
+ }
672
+ };
553
673
  const { dynamic_id } = data2;
554
- const dynamicINFO_CARD = await GlobalGetData({
555
- url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id }),
556
- headers: headers2,
557
- ...data2
674
+ const dynamicINFO_CARD = await GlobalGetData(data2.methodType, {
675
+ ...customConfig,
676
+ url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id })
558
677
  });
559
678
  return dynamicINFO_CARD;
560
679
  }
561
680
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
562
681
  const { host_mid } = data2;
563
- const result = await GlobalGetData({
564
- url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid }),
565
- headers: headers2,
566
- ...data2
682
+ const result = await GlobalGetData(data2.methodType, {
683
+ ...baseRequestConfig,
684
+ url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid })
567
685
  });
568
686
  return result;
569
687
  }
570
688
  case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
571
- const result = await GlobalGetData({
572
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id }),
573
- headers: headers2,
574
- ...data2
689
+ const result = await GlobalGetData(data2.methodType, {
690
+ ...baseRequestConfig,
691
+ url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id })
575
692
  });
576
693
  return result;
577
694
  }
578
695
  case "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F": {
579
- const result = await GlobalGetData({
580
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id }),
581
- headers: headers2,
582
- ...data2
696
+ const result = await GlobalGetData(data2.methodType, {
697
+ ...baseRequestConfig,
698
+ url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id })
583
699
  });
584
700
  return result;
585
701
  }
586
702
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801": {
587
- const result = await GlobalGetData({
588
- url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801(),
589
- headers: headers2,
590
- ...data2
703
+ const result = await GlobalGetData(data2.methodType, {
704
+ ...baseRequestConfig,
705
+ url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801()
591
706
  });
592
707
  return result;
593
708
  }
594
709
  case "\u4E8C\u7EF4\u7801\u72B6\u6001": {
595
- const result = await new Networks({
596
- url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key }),
597
- headers: headers2,
598
- ...data2
599
- }).getHeadersAndData();
710
+ const result = await getHeadersAndData({
711
+ ...baseRequestConfig,
712
+ url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key })
713
+ });
600
714
  return result;
601
715
  }
602
716
  case "\u767B\u5F55\u57FA\u672C\u4FE1\u606F": {
603
- const result = await GlobalGetData({
604
- url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(),
605
- headers: headers2,
606
- ...data2
717
+ const result = await GlobalGetData(data2.methodType, {
718
+ ...baseRequestConfig,
719
+ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F()
607
720
  });
608
721
  return result;
609
722
  }
610
723
  case "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF": {
611
- const result = await GlobalGetData({
612
- url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid }),
613
- headers: headers2,
614
- ...data2
724
+ const result = await GlobalGetData(data2.methodType, {
725
+ ...baseRequestConfig,
726
+ url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid })
615
727
  });
616
728
  return result;
617
729
  }
@@ -640,19 +752,19 @@ var fetchBilibili = async (data2, cookie) => {
640
752
  return null;
641
753
  }
642
754
  };
643
- var GlobalGetData = async (options) => {
755
+ var GlobalGetData = async (type, options) => {
644
756
  let warningMessage = "";
645
757
  try {
646
- const result = await new Networks(options).getData();
758
+ const result = await fetchData(options);
647
759
  if (!result || result === "") {
648
760
  const Err = {
649
761
  errorDescription: "\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01",
650
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
762
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
651
763
  requestUrl: options.url
652
764
  };
653
765
  warningMessage = `
654
766
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
655
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
767
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
656
768
  \u8BF7\u6C42URL\uFF1A${options.url}
657
769
  `;
658
770
  logger.warn(warningMessage);
@@ -666,13 +778,13 @@ var GlobalGetData = async (options) => {
666
778
  const errorMessage = bilibiliErrorCodeMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
667
779
  const Err = {
668
780
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${errorMessage}\uFF01`,
669
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
781
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
670
782
  requestUrl: options.url
671
783
  };
672
784
  warningMessage = `
673
785
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(errorMessage)}
674
786
  \u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}
675
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
787
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
676
788
  \u8BF7\u6C42URL\uFF1A${options.url}
677
789
  `;
678
790
  logger.warn(warningMessage);
@@ -693,7 +805,7 @@ var GlobalGetData = async (options) => {
693
805
  data: error.data,
694
806
  amagiError: {
695
807
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
696
- requestType: options.methodType,
808
+ requestType: type,
697
809
  requestUrl: options.url
698
810
  },
699
811
  amagiMessage: warningMessage
@@ -751,112 +863,6 @@ var bilibiliErrorCodeMap = {
751
863
  "-799": "\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
752
864
  "-8888": "\u5BF9\u4E0D\u8D77\uFF0C\u670D\u52A1\u5668\u5F00\u5C0F\u5DEE\u4E86~ (\u0CA5\uFE4F\u0CA5)"
753
865
  };
754
- var mixinKeyEncTab = [
755
- 46,
756
- 47,
757
- 18,
758
- 2,
759
- 53,
760
- 8,
761
- 23,
762
- 32,
763
- 15,
764
- 50,
765
- 10,
766
- 31,
767
- 58,
768
- 3,
769
- 45,
770
- 35,
771
- 27,
772
- 43,
773
- 5,
774
- 49,
775
- 33,
776
- 9,
777
- 42,
778
- 19,
779
- 29,
780
- 28,
781
- 14,
782
- 39,
783
- 12,
784
- 38,
785
- 41,
786
- 13,
787
- 37,
788
- 48,
789
- 7,
790
- 16,
791
- 24,
792
- 55,
793
- 40,
794
- 61,
795
- 26,
796
- 17,
797
- 0,
798
- 1,
799
- 60,
800
- 51,
801
- 30,
802
- 4,
803
- 22,
804
- 25,
805
- 54,
806
- 21,
807
- 56,
808
- 59,
809
- 6,
810
- 63,
811
- 57,
812
- 62,
813
- 11,
814
- 36,
815
- 20,
816
- 34,
817
- 44,
818
- 52
819
- ];
820
- var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
821
- var encWbi = (params, img_key, sub_key) => {
822
- const mixin_key = getMixinKey(img_key + sub_key);
823
- const curr_time = Math.round(Date.now() / 1e3);
824
- const chr_filter = /[!'()*]/g;
825
- Object.assign(params, { wts: curr_time });
826
- const query = Object.keys(params).sort().map((key) => {
827
- const value = params[key].toString().replace(chr_filter, "");
828
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
829
- }).join("&");
830
- const wbi_sign2 = crypto.createHash("md5").update(query + mixin_key).digest("hex");
831
- return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
832
- };
833
- var getWbiKeys = async (cookie) => {
834
- const res = await axios("https://api.bilibili.com/x/web-interface/nav", {
835
- headers: {
836
- Cookie: cookie
837
- }
838
- });
839
- const response = res.data;
840
- const {
841
- data: {
842
- wbi_img: { img_url, sub_url }
843
- }
844
- } = response;
845
- return {
846
- img_key: img_url.slice(img_url.lastIndexOf("/") + 1, img_url.lastIndexOf(".")),
847
- sub_key: sub_url.slice(sub_url.lastIndexOf("/") + 1, sub_url.lastIndexOf("."))
848
- };
849
- };
850
- var wbi_sign = async (BASEURL, cookie) => {
851
- const web_keys = await getWbiKeys(cookie);
852
- const url = new URL(BASEURL);
853
- const params = {};
854
- for (const [key, value] of url.searchParams.entries()) {
855
- params[key] = value;
856
- }
857
- const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
858
- return query;
859
- };
860
866
 
861
867
  // src/platform/douyin/sign/a_bogus.ts
862
868
  var SM3 = class {
@@ -1322,21 +1328,17 @@ var DouyinAPI = class {
1322
1328
  var douyinApiUrls = new DouyinAPI();
1323
1329
 
1324
1330
  // src/platform/douyin/getdata.ts
1325
- var defheaders2 = {
1326
- accept: "*/*",
1327
- priority: "u=0, i",
1328
- "content-type": "application/json; charset=utf-8",
1329
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1330
- "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",
1331
- referer: "https://www.douyin.com/",
1332
- "accept-encoding": "gzip, deflate, br",
1333
- connection: "keep-alive"
1334
- };
1335
- var DouyinData = async (data2, cookie) => {
1336
- var _a, _b;
1337
- const headers2 = {
1338
- ...defheaders2,
1339
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
1331
+ var DouyinData = async (data2, cookie, requestConfig) => {
1332
+ var _a, _b, _c, _d;
1333
+ const defHeaders = getDouyinDefaultConfig(cookie)["headers"];
1334
+ const baseRequestConfig = {
1335
+ method: "GET",
1336
+ timeout: 1e4,
1337
+ ...requestConfig,
1338
+ headers: {
1339
+ ...defHeaders,
1340
+ ...(requestConfig == null ? void 0 : requestConfig.headers) || {}
1341
+ }
1340
1342
  };
1341
1343
  switch (data2.methodType) {
1342
1344
  case "\u805A\u5408\u89E3\u6790":
@@ -1344,73 +1346,101 @@ var DouyinData = async (data2, cookie) => {
1344
1346
  case "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E":
1345
1347
  case "\u5408\u8F91\u4F5C\u54C1\u6570\u636E": {
1346
1348
  const url = douyinApiUrls.\u89C6\u9891\u6216\u56FE\u96C6({ aweme_id: data2.aweme_id });
1347
- const VideoData = await GlobalGetData2({
1348
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1349
- headers: headers2,
1350
- ...data2
1349
+ const VideoData = await GlobalGetData2(data2.methodType, {
1350
+ ...baseRequestConfig,
1351
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1351
1352
  });
1352
1353
  return VideoData;
1353
1354
  }
1354
1355
  case "\u8BC4\u8BBA\u6570\u636E": {
1355
1356
  const urlGenerator = (params) => douyinApiUrls.\u8BC4\u8BBA(params);
1356
- const response = await fetchPaginatedData(urlGenerator, data2, 50, headers2);
1357
+ const response = await fetchPaginatedData(
1358
+ data2.methodType,
1359
+ urlGenerator,
1360
+ data2,
1361
+ 50,
1362
+ baseRequestConfig
1363
+ );
1357
1364
  return response;
1358
1365
  }
1359
1366
  case "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": {
1360
1367
  const urlGenerator = (params) => douyinApiUrls.\u4E8C\u7EA7\u8BC4\u8BBA(params);
1368
+ const customConfig = {
1369
+ ...baseRequestConfig,
1370
+ headers: {
1371
+ ...baseRequestConfig.headers,
1372
+ // 只有在外部配置没有referer时才设置内部的referer
1373
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("referer" in requestConfig.headers)) && {
1374
+ referer: `https://www.douyin.com/note/${data2.aweme_id}`
1375
+ }
1376
+ }
1377
+ };
1361
1378
  const response = await fetchPaginatedData(
1379
+ data2.methodType,
1362
1380
  urlGenerator,
1363
1381
  data2,
1364
1382
  3,
1365
- {
1366
- ...headers2,
1367
- referer: `https://www.douyin.com/note/${data2.aweme_id}`
1368
- }
1383
+ customConfig
1369
1384
  );
1370
1385
  return response;
1371
1386
  }
1372
1387
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
1373
1388
  const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1374
- const UserInfoData = await GlobalGetData2({
1375
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1389
+ const customConfig = {
1390
+ ...baseRequestConfig,
1376
1391
  headers: {
1377
- ...headers2,
1378
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1379
- },
1380
- ...data2
1392
+ ...baseRequestConfig.headers,
1393
+ // 只有在外部配置没有Referer时才设置内部的Referer
1394
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1395
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1396
+ }
1397
+ }
1398
+ };
1399
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1400
+ ...customConfig,
1401
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1381
1402
  });
1382
1403
  return UserInfoData;
1383
1404
  }
1384
1405
  case "Emoji\u6570\u636E": {
1385
1406
  const url = douyinApiUrls.\u8868\u60C5();
1386
- const EmojiData = await GlobalGetData2({
1387
- url,
1388
- headers: headers2,
1389
- ...data2
1407
+ const EmojiData = await GlobalGetData2(data2.methodType, {
1408
+ ...baseRequestConfig,
1409
+ url
1390
1410
  });
1391
1411
  return EmojiData;
1392
1412
  }
1393
1413
  case "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E": {
1394
1414
  const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u89C6\u9891({ sec_uid: data2.sec_uid });
1395
- const UserVideoListData = await GlobalGetData2({
1396
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1415
+ const customConfig = {
1416
+ ...baseRequestConfig,
1397
1417
  headers: {
1398
- ...headers2,
1399
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1400
- },
1401
- ...data2
1418
+ ...baseRequestConfig.headers,
1419
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1420
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1421
+ }
1422
+ }
1423
+ };
1424
+ const UserVideoListData = await GlobalGetData2(data2.methodType, {
1425
+ ...customConfig,
1426
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1402
1427
  });
1403
1428
  return UserVideoListData;
1404
1429
  }
1405
1430
  case "\u70ED\u70B9\u8BCD\u6570\u636E": {
1406
1431
  const url = douyinApiUrls.\u70ED\u70B9\u8BCD({ query: data2.query, number: data2.number ?? 10 });
1407
- const SuggestWordsData = await GlobalGetData2({
1408
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1432
+ const customConfig = {
1433
+ ...baseRequestConfig,
1409
1434
  headers: {
1410
- ...headers2,
1411
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1412
- },
1413
- ...data2
1435
+ ...baseRequestConfig.headers,
1436
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1437
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1438
+ }
1439
+ }
1440
+ };
1441
+ const SuggestWordsData = await GlobalGetData2(data2.methodType, {
1442
+ ...customConfig,
1443
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1414
1444
  });
1415
1445
  return SuggestWordsData;
1416
1446
  }
@@ -1419,6 +1449,15 @@ var DouyinData = async (data2, cookie) => {
1419
1449
  const maxPageSize = 15;
1420
1450
  let fetchedSearchList = [];
1421
1451
  let tmpresp = {};
1452
+ const customConfig = {
1453
+ ...baseRequestConfig,
1454
+ headers: {
1455
+ ...baseRequestConfig.headers,
1456
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1457
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1458
+ }
1459
+ }
1460
+ };
1422
1461
  while (fetchedSearchList.length < Number(data2.number ?? 10)) {
1423
1462
  const requestCount = Math.min(Number(data2.number ?? 50) - fetchedSearchList.length, maxPageSize);
1424
1463
  const url = douyinApiUrls.\u641C\u7D22({
@@ -1426,15 +1465,11 @@ var DouyinData = async (data2, cookie) => {
1426
1465
  number: requestCount,
1427
1466
  search_id: search_id === "" ? void 0 : search_id
1428
1467
  });
1429
- const response = await GlobalGetData2({
1430
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1431
- headers: {
1432
- ...headers2,
1433
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1434
- },
1435
- ...data2
1468
+ const response = await GlobalGetData2(data2.methodType, {
1469
+ ...customConfig,
1470
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1436
1471
  });
1437
- if (response.data.length === 0) {
1472
+ if (((_a = response.data) == null ? void 0 : _a.length) === 0) {
1438
1473
  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);
1439
1474
  return false;
1440
1475
  }
@@ -1443,7 +1478,7 @@ var DouyinData = async (data2, cookie) => {
1443
1478
  }
1444
1479
  fetchedSearchList.push(...response.data);
1445
1480
  tmpresp = response;
1446
- search_id = response.log_pb.impr_id;
1481
+ search_id = (_b = response.log_pb) == null ? void 0 : _b.impr_id;
1447
1482
  }
1448
1483
  const finalResponse = {
1449
1484
  ...tmpresp,
@@ -1453,35 +1488,38 @@ var DouyinData = async (data2, cookie) => {
1453
1488
  }
1454
1489
  case "\u52A8\u6001\u8868\u60C5\u6570\u636E": {
1455
1490
  const url = douyinApiUrls.\u4E92\u52A8\u8868\u60C5();
1456
- const ExpressionPlusData = await GlobalGetData2({
1457
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1458
- headers: headers2,
1459
- ...data2
1491
+ const ExpressionPlusData = await GlobalGetData2(data2.methodType, {
1492
+ ...baseRequestConfig,
1493
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1460
1494
  });
1461
1495
  return ExpressionPlusData;
1462
1496
  }
1463
1497
  case "\u97F3\u4E50\u6570\u636E": {
1464
1498
  const url = douyinApiUrls.\u80CC\u666F\u97F3\u4E50({ music_id: data2.music_id });
1465
- const MusicData = await GlobalGetData2({
1466
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1467
- headers: headers2,
1468
- ...data2
1499
+ const MusicData = await GlobalGetData2(data2.methodType, {
1500
+ ...baseRequestConfig,
1501
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1469
1502
  });
1470
1503
  return MusicData;
1471
1504
  }
1472
1505
  case "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E": {
1473
1506
  let url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1474
1507
  const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url)}`;
1475
- const UserInfoData = await GlobalGetData2({
1476
- url: fetchUrl,
1508
+ const customConfig = {
1509
+ ...baseRequestConfig,
1477
1510
  headers: {
1478
- ...headers2,
1479
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1480
- },
1481
- ...data2
1511
+ ...baseRequestConfig.headers,
1512
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1513
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1514
+ }
1515
+ }
1516
+ };
1517
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1518
+ ...customConfig,
1519
+ url: fetchUrl
1482
1520
  });
1483
- if (!((_a = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _a.live_status) || UserInfoData.user.live_status !== 1) {
1484
- logger.error((((_b = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _b.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1521
+ if (!((_c = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _c.live_status) || UserInfoData.user.live_status !== 1) {
1522
+ logger.error((((_d = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _d.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1485
1523
  const Err = {
1486
1524
  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')",
1487
1525
  requestType: data2.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
@@ -1504,31 +1542,36 @@ var DouyinData = async (data2, cookie) => {
1504
1542
  }
1505
1543
  const room_data = JSON.parse(UserInfoData.user.room_data);
1506
1544
  url = douyinApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: UserInfoData.user.room_id_str, web_rid: room_data.owner.web_rid });
1507
- const LiveRoomData = await GlobalGetData2({
1508
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1545
+ const liveCustomConfig = {
1546
+ ...baseRequestConfig,
1509
1547
  headers: {
1510
- ...headers2,
1511
- Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1512
- },
1513
- ...data2
1548
+ ...baseRequestConfig.headers,
1549
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1550
+ Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1551
+ }
1552
+ }
1553
+ };
1554
+ const LiveRoomData = await GlobalGetData2(data2.methodType, {
1555
+ ...liveCustomConfig,
1556
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1514
1557
  });
1515
1558
  return LiveRoomData;
1516
1559
  }
1517
1560
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E": {
1518
1561
  const url = douyinApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801({ verify_fp: data2.verify_fp });
1519
- const LoginQrcodeStatusData = await GlobalGetData2({
1520
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1521
- headers: headers2,
1522
- ...data2
1562
+ const LoginQrcodeStatusData = await GlobalGetData2(data2.methodType, {
1563
+ ...baseRequestConfig,
1564
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1523
1565
  });
1524
1566
  return LoginQrcodeStatusData;
1525
1567
  }
1526
- default:
1527
- logger.warn(`\u672A\u77E5\u7684B\u7AD9\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1568
+ default: {
1569
+ logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1528
1570
  return null;
1571
+ }
1529
1572
  }
1530
1573
  };
1531
- var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2) => {
1574
+ var fetchPaginatedData = async (type, apiUrlGenerator, params, maxPageSize, requestConfig) => {
1532
1575
  let cursor = params.cursor ?? 0;
1533
1576
  let fetchedData = [];
1534
1577
  let tmpresp = {};
@@ -1539,10 +1582,9 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1539
1582
  number: requestCount,
1540
1583
  cursor
1541
1584
  });
1542
- const response = await GlobalGetData2({
1543
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1544
- headers: headers2,
1545
- ...params
1585
+ const response = await GlobalGetData2(type, {
1586
+ ...requestConfig,
1587
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1546
1588
  });
1547
1589
  fetchedData.push(...response.comments || response.data || []);
1548
1590
  tmpresp = response;
@@ -1558,20 +1600,20 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1558
1600
  };
1559
1601
  return finalResponse;
1560
1602
  };
1561
- var GlobalGetData2 = async (options) => {
1603
+ var GlobalGetData2 = async (type, config) => {
1562
1604
  let warningMessage = "";
1563
1605
  try {
1564
- const result = await new Networks(options).getData();
1606
+ const result = await fetchData(config);
1565
1607
  if (!result || result === "") {
1566
1608
  const Err = {
1567
1609
  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",
1568
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1569
- requestUrl: options.url
1610
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1611
+ requestUrl: config.url
1570
1612
  };
1571
1613
  warningMessage = `
1572
1614
  \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")}
1573
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1574
- \u8BF7\u6C42URL\uFF1A${options.url}
1615
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1616
+ \u8BF7\u6C42URL\uFF1A${config.url}
1575
1617
  `;
1576
1618
  logger.warn(warningMessage);
1577
1619
  throw {
@@ -1584,13 +1626,13 @@ var GlobalGetData2 = async (options) => {
1584
1626
  const filterReason = result.filter_detail.filter_reason;
1585
1627
  const Err = {
1586
1628
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${filterReason}\uFF01`,
1587
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1588
- requestUrl: options.url
1629
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1630
+ requestUrl: config.url
1589
1631
  };
1590
1632
  warningMessage = `
1591
1633
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(filterReason)}
1592
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1593
- \u8BF7\u6C42URL\uFF1A${options.url}
1634
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1635
+ \u8BF7\u6C42URL\uFF1A${config.url}
1594
1636
  `;
1595
1637
  logger.warn(warningMessage);
1596
1638
  throw {
@@ -1610,8 +1652,8 @@ var GlobalGetData2 = async (options) => {
1610
1652
  data: null,
1611
1653
  amagiError: {
1612
1654
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1613
- requestType: options.methodType,
1614
- requestUrl: options.url
1655
+ requestType: type,
1656
+ requestUrl: config.url
1615
1657
  },
1616
1658
  amagiMessage: warningMessage
1617
1659
  };
@@ -1668,50 +1710,42 @@ var API = class {
1668
1710
  var kuaishouApiUrls = new API();
1669
1711
 
1670
1712
  // src/platform/kuaishou/getdata.ts
1671
- var defheaders3 = {
1672
- referer: "https://www.kuaishou.com/new-reco",
1673
- origin: "https://www.kuaishou.com",
1674
- accept: "*/*",
1675
- "content-type": "application/json",
1676
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1677
- "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"
1678
- };
1679
- var KuaishouData = async (data2, cookie) => {
1680
- const headers2 = {
1681
- ...defheaders3,
1682
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
1713
+ var KuaishouData = async (data2, cookie, requestConfig) => {
1714
+ const defHeaders = getKuaishouDefaultConfig(cookie)["headers"];
1715
+ const baseRequestConfig = {
1716
+ method: "POST",
1717
+ timeout: 1e4,
1718
+ ...requestConfig,
1719
+ headers: {
1720
+ ...defHeaders,
1721
+ ...{}
1722
+ }
1683
1723
  };
1684
1724
  switch (data2.methodType) {
1685
1725
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
1686
1726
  const body = kuaishouApiUrls.\u5355\u4E2A\u4F5C\u54C1\u4FE1\u606F({ photoId: data2.photoId });
1687
- const VideoData = await GlobalGetData3({
1727
+ const VideoData = await GlobalGetData3(data2.methodType, {
1728
+ ...baseRequestConfig,
1688
1729
  url: body.url,
1689
- method: "POST",
1690
- headers: headers2,
1691
- body: body.body,
1692
- ...data2
1730
+ data: body.body
1693
1731
  });
1694
1732
  return VideoData;
1695
1733
  }
1696
1734
  case "\u8BC4\u8BBA\u6570\u636E": {
1697
1735
  const body = kuaishouApiUrls.\u4F5C\u54C1\u8BC4\u8BBA\u4FE1\u606F({ photoId: data2.photoId });
1698
- const VideoData = await GlobalGetData3({
1736
+ const VideoData = await GlobalGetData3(data2.methodType, {
1737
+ ...baseRequestConfig,
1699
1738
  url: body.url,
1700
- method: "POST",
1701
- headers: headers2,
1702
- body: body.body,
1703
- ...data2
1739
+ data: body.body
1704
1740
  });
1705
1741
  return VideoData;
1706
1742
  }
1707
1743
  case "Emoji\u6570\u636E": {
1708
1744
  const body = kuaishouApiUrls.\u8868\u60C5();
1709
- const EmojiData = await GlobalGetData3({
1745
+ const EmojiData = await GlobalGetData3(data2.methodType, {
1746
+ ...baseRequestConfig,
1710
1747
  url: body.url,
1711
- method: "POST",
1712
- headers: headers2,
1713
- body: body.body,
1714
- ...data2
1748
+ data: body.body
1715
1749
  });
1716
1750
  return EmojiData;
1717
1751
  }
@@ -1720,22 +1754,22 @@ var KuaishouData = async (data2, cookie) => {
1720
1754
  return null;
1721
1755
  }
1722
1756
  };
1723
- var GlobalGetData3 = async (options) => {
1757
+ var GlobalGetData3 = async (type, options) => {
1724
1758
  let warningMessage = "";
1725
1759
  try {
1726
- const result = await new Networks(options).getData();
1760
+ const result = await fetchData(options);
1727
1761
  if (result === "" || !result || result.result === 2) {
1728
1762
  const Err = {
1729
1763
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF01`,
1730
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1764
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1731
1765
  requestUrl: options.url,
1732
- requestBody: JSON.stringify(options.body)
1766
+ requestBody: JSON.stringify(options.data)
1733
1767
  };
1734
1768
  warningMessage = `
1735
1769
  \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")}
1736
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1770
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1737
1771
  \u8BF7\u6C42URL\uFF1A${options.url}
1738
- \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.body, null, 2)}
1772
+ \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.data, null, 2)}
1739
1773
  `;
1740
1774
  logger.warn(warningMessage);
1741
1775
  throw {
@@ -1755,7 +1789,7 @@ var GlobalGetData3 = async (options) => {
1755
1789
  data: null,
1756
1790
  amagiError: {
1757
1791
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1758
- requestType: options.methodType,
1792
+ requestType: type,
1759
1793
  requestUrl: options.url
1760
1794
  },
1761
1795
  amagiMessage: warningMessage
@@ -1843,7 +1877,7 @@ var BilibiliVideoDownloadParamsSchema = z.object({
1843
1877
  });
1844
1878
  var BilibiliCommentParamsSchema = z.object({
1845
1879
  methodType: z.literal("\u8BC4\u8BBA\u6570\u636E"),
1846
- oid: smartNumber("OID\u4E0D\u80FD\u4E3A\u7A7A", 1, true),
1880
+ oid: z.string({ required_error: "OID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "OID\u4E0D\u80FD\u4E3A\u7A7A"),
1847
1881
  type: smartNumber("\u8BC4\u8BBA\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A", 1, true).refine(
1848
1882
  (val) => [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 33].includes(val),
1849
1883
  { message: "\u65E0\u6548\u7684\u8BC4\u8BBA\u533A\u7C7B\u578B" }
@@ -1979,23 +2013,26 @@ var createErrorResponse = (error, message, code = 500) => {
1979
2013
  };
1980
2014
 
1981
2015
  // src/model/DataFetchers.ts
1982
- async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2016
+ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
1983
2017
  try {
1984
2018
  let options;
1985
2019
  let cookie;
2020
+ let config;
1986
2021
  if (typeof optionsOrCookie === "string") {
1987
2022
  cookie = optionsOrCookie;
1988
2023
  options = cookieOrOptions;
2024
+ config = requestConfig;
1989
2025
  } else {
1990
2026
  options = optionsOrCookie;
1991
2027
  cookie = cookieOrOptions;
2028
+ config = requestConfig;
1992
2029
  }
1993
2030
  const { typeMode: _, ...validationOptions } = options || {};
1994
2031
  const validatedParams = validateDouyinParams(methodType, validationOptions);
1995
2032
  const apiParams = {
1996
2033
  ...validatedParams
1997
2034
  };
1998
- const rawData = await DouyinData(apiParams, cookie);
2035
+ const rawData = await DouyinData(apiParams, cookie, config);
1999
2036
  if (rawData.data === "") {
2000
2037
  return createErrorResponse(rawData.amagiError, "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
2001
2038
  }
@@ -2005,7 +2042,7 @@ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2005
2042
  throw new Error(`\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2006
2043
  }
2007
2044
  }
2008
- async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2045
+ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2009
2046
  try {
2010
2047
  let options;
2011
2048
  let cookie;
@@ -2031,7 +2068,7 @@ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2031
2068
  throw new Error(`B\u7AD9\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2032
2069
  }
2033
2070
  }
2034
- async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions) {
2071
+ async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2035
2072
  try {
2036
2073
  let options;
2037
2074
  let cookie;
@@ -2197,7 +2234,7 @@ var bilibili = {
2197
2234
  */
2198
2235
  convertBvToAv: createBilibiliApiMethod("BV\u8F6CAV")
2199
2236
  };
2200
- var createBoundBilibiliApi = (cookie) => {
2237
+ var createBoundBilibiliApi = (cookie, requestConfig) => {
2201
2238
  return {
2202
2239
  /**
2203
2240
  * 获取单个视频作品数据
@@ -2403,10 +2440,10 @@ var createValidationMiddleware = (validateFn, methodType) => {
2403
2440
  var createDouyinValidationMiddleware = (methodType) => createValidationMiddleware(validateDouyinParams, methodType);
2404
2441
  var createBilibiliValidationMiddleware = (methodType) => createValidationMiddleware(validateBilibiliParams, methodType);
2405
2442
  var createKuaishouValidationMiddleware = (methodType) => createValidationMiddleware(validateKuaishouParams, methodType);
2406
- var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2443
+ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2407
2444
  return async (req, res) => {
2408
2445
  try {
2409
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2446
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2410
2447
  res.json({
2411
2448
  ...result,
2412
2449
  requestPath: req.originalUrl
@@ -2420,97 +2457,97 @@ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2420
2457
  }
2421
2458
  };
2422
2459
  };
2423
- var createBilibiliRoutes = (cookie) => {
2460
+ var createBilibiliRoutes = (cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2424
2461
  const router = Router();
2425
2462
  router.get(
2426
2463
  "/fetch_one_video",
2427
2464
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2428
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2465
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2429
2466
  );
2430
2467
  router.get(
2431
2468
  "/fetch_video_playurl",
2432
2469
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2433
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2470
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2434
2471
  );
2435
2472
  router.get(
2436
2473
  "/fetch_work_comments",
2437
2474
  createBilibiliValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2438
- createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2475
+ createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2439
2476
  );
2440
2477
  router.get(
2441
2478
  "/fetch_user_profile",
2442
2479
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2443
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
2480
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2444
2481
  );
2445
2482
  router.get(
2446
2483
  "/fetch_user_dynamic",
2447
2484
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E"),
2448
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie)
2485
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie, requestConfig)
2449
2486
  );
2450
2487
  router.get(
2451
2488
  "/fetch_emoji_list",
2452
2489
  createBilibiliValidationMiddleware("Emoji\u6570\u636E"),
2453
- createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie)
2490
+ createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie, requestConfig)
2454
2491
  );
2455
2492
  router.get(
2456
2493
  "/fetch_bangumi_video_info",
2457
2494
  createBilibiliValidationMiddleware("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"),
2458
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie)
2495
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2459
2496
  );
2460
2497
  router.get(
2461
2498
  "/fetch_bangumi_video_playurl",
2462
2499
  createBilibiliValidationMiddleware("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2463
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2500
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2464
2501
  );
2465
2502
  router.get(
2466
2503
  "/fetch_dynamic_info",
2467
2504
  createBilibiliValidationMiddleware("\u52A8\u6001\u8BE6\u60C5\u6570\u636E"),
2468
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie)
2505
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie, requestConfig)
2469
2506
  );
2470
2507
  router.get(
2471
2508
  "/fetch_dynamic_card",
2472
2509
  createBilibiliValidationMiddleware("\u52A8\u6001\u5361\u7247\u6570\u636E"),
2473
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie)
2510
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie, requestConfig)
2474
2511
  );
2475
2512
  router.get(
2476
2513
  "/fetch_live_room_detail",
2477
2514
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F"),
2478
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie)
2515
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie, requestConfig)
2479
2516
  );
2480
2517
  router.get(
2481
2518
  "/fetch_liveroom_def",
2482
2519
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"),
2483
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie)
2520
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie, requestConfig)
2484
2521
  );
2485
2522
  router.get(
2486
2523
  "/login_basic_info",
2487
2524
  createBilibiliValidationMiddleware("\u767B\u5F55\u57FA\u672C\u4FE1\u606F"),
2488
- createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie)
2525
+ createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie, requestConfig)
2489
2526
  );
2490
2527
  router.get(
2491
2528
  "/new_login_qrcode",
2492
2529
  createBilibiliValidationMiddleware("\u7533\u8BF7\u4E8C\u7EF4\u7801"),
2493
- createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie)
2530
+ createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie, requestConfig)
2494
2531
  );
2495
2532
  router.get(
2496
2533
  "/check_qrcode",
2497
2534
  createBilibiliValidationMiddleware("\u4E8C\u7EF4\u7801\u72B6\u6001"),
2498
- createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie)
2535
+ createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie, requestConfig)
2499
2536
  );
2500
2537
  router.get(
2501
2538
  "/fetch_user_full_view",
2502
2539
  createBilibiliValidationMiddleware("\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"),
2503
- createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie)
2540
+ createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie, requestConfig)
2504
2541
  );
2505
2542
  router.get(
2506
2543
  "/av_to_bv",
2507
2544
  createBilibiliValidationMiddleware("AV\u8F6CBV"),
2508
- createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie)
2545
+ createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie, requestConfig)
2509
2546
  );
2510
2547
  router.get(
2511
2548
  "/bv_to_av",
2512
2549
  createBilibiliValidationMiddleware("BV\u8F6CAV"),
2513
- createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie)
2550
+ createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie, requestConfig)
2514
2551
  );
2515
2552
  return router;
2516
2553
  };
@@ -2528,13 +2565,13 @@ var bilibiliUtils = {
2528
2565
 
2529
2566
  // src/platform/douyin/DouyinApi.ts
2530
2567
  var createDouyinApiMethod = (methodType) => {
2531
- return async (options, cookie) => {
2532
- return await getDouyinData(methodType, options, cookie);
2568
+ return async (options, cookie, requestConfig) => {
2569
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2533
2570
  };
2534
2571
  };
2535
- var createBoundDouyinApiMethod = (methodType, cookie) => {
2572
+ var createBoundDouyinApiMethod = (methodType, cookie, requestConfig) => {
2536
2573
  return async (options) => {
2537
- return await getDouyinData(methodType, options, cookie);
2574
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2538
2575
  };
2539
2576
  };
2540
2577
  var douyin = {
@@ -2637,98 +2674,98 @@ var douyin = {
2637
2674
  */
2638
2675
  getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E")
2639
2676
  };
2640
- var createBoundDouyinApi = (cookie) => {
2677
+ var createBoundDouyinApi = (cookie, requestConfig) => {
2641
2678
  return {
2642
2679
  /**
2643
2680
  * 聚合解析 (视频/图集/合辑)
2644
2681
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2645
2682
  * @returns 统一格式的API响应,包含视频、图集或合辑数据
2646
2683
  */
2647
- getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie),
2684
+ getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie, requestConfig),
2648
2685
  /**
2649
2686
  * 获取视频作品数据
2650
2687
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2651
2688
  * @returns 统一格式的API响应,包含视频作品详细信息
2652
2689
  */
2653
- getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie),
2690
+ getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2654
2691
  /**
2655
2692
  * 获取图集作品数据
2656
2693
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2657
2694
  * @returns 统一格式的API响应,包含图集作品详细信息
2658
2695
  */
2659
- getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie),
2696
+ getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2660
2697
  /**
2661
2698
  * 获取合辑作品数据
2662
2699
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2663
2700
  * @returns 统一格式的API响应,包含合辑作品详细信息
2664
2701
  */
2665
- getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie),
2702
+ getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2666
2703
  /**
2667
2704
  * 获取评论数据
2668
2705
  * @param options 请求参数,包含 aweme_id, 可选的 number, cursor 和 typeMode
2669
2706
  * @returns 统一格式的API响应,包含评论列表数据
2670
2707
  */
2671
- getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie),
2708
+ getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig),
2672
2709
  /**
2673
2710
  * 获取指定评论回复数据
2674
2711
  * @param options 请求参数,包含 aweme_id, comment_id, 可选的 number, cursor 和 typeMode
2675
2712
  * @returns 统一格式的API响应,包含评论回复数据
2676
2713
  */
2677
- getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie),
2714
+ getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig),
2678
2715
  /**
2679
2716
  * 获取用户主页数据
2680
2717
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2681
2718
  * @returns 统一格式的API响应,包含用户详细信息
2682
2719
  */
2683
- getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie),
2720
+ getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig),
2684
2721
  /**
2685
2722
  * 获取 Emoji 数据
2686
2723
  * @param options 可选的请求参数 (主要用于 typeMode)
2687
2724
  * @returns 统一格式的API响应,包含Emoji列表数据
2688
2725
  */
2689
- getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie),
2726
+ getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie, requestConfig),
2690
2727
  /**
2691
2728
  * 获取动态表情数据
2692
2729
  * @param options 可选的请求参数 (主要用于 typeMode)
2693
2730
  * @returns 统一格式的API响应,包含动态表情数据
2694
2731
  */
2695
- getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie),
2732
+ getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig),
2696
2733
  /**
2697
2734
  * 获取用户主页视频列表数据
2698
2735
  * @param options 请求参数,包含 sec_uid, 可选的 number, max_cursor 和 typeMode
2699
2736
  * @returns 统一格式的API响应,包含用户发布的视频列表
2700
2737
  */
2701
- getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie),
2738
+ getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig),
2702
2739
  /**
2703
2740
  * 获取音乐数据
2704
2741
  * @param options 请求参数,包含 music_id 和可选的 typeMode
2705
2742
  * @returns 统一格式的API响应,包含音乐详细信息
2706
2743
  */
2707
- getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie),
2744
+ getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie, requestConfig),
2708
2745
  /**
2709
2746
  * 获取热点词数据
2710
2747
  * @param options 请求参数,包含 query, 可选的 number 和 typeMode
2711
2748
  * @returns 统一格式的API响应,包含热点搜索词列表
2712
2749
  */
2713
- getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie),
2750
+ getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig),
2714
2751
  /**
2715
2752
  * 获取搜索数据
2716
2753
  * @param options 请求参数,包含 query, 可选的 number, search_id, cursor 和 typeMode
2717
2754
  * @returns 统一格式的API响应,包含搜索结果数据
2718
2755
  */
2719
- search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie),
2756
+ search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie, requestConfig),
2720
2757
  /**
2721
2758
  * 获取直播间信息
2722
2759
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2723
2760
  * @returns 统一格式的API响应,包含直播间详细信息
2724
2761
  */
2725
- getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
2762
+ getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2726
2763
  };
2727
2764
  };
2728
- var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
2765
+ var createDouyinRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2729
2766
  return async (req, res) => {
2730
2767
  try {
2731
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2768
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2732
2769
  res.json({
2733
2770
  ...result,
2734
2771
  requestPath: req.originalUrl
@@ -2742,77 +2779,77 @@ var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
2742
2779
  }
2743
2780
  };
2744
2781
  };
2745
- var createDouyinRoutes = (cookie) => {
2782
+ var createDouyinRoutes = (cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2746
2783
  const router = Router();
2747
2784
  router.get(
2748
2785
  "/fetch_one_work",
2749
2786
  createDouyinValidationMiddleware("\u805A\u5408\u89E3\u6790"),
2750
- createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie)
2787
+ createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie, requestConfig)
2751
2788
  );
2752
2789
  router.get(
2753
2790
  "/fetch_one_work",
2754
2791
  createDouyinValidationMiddleware("\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2755
- createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2792
+ createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2756
2793
  );
2757
2794
  router.get(
2758
2795
  "/fetch_one_work",
2759
2796
  createDouyinValidationMiddleware("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E"),
2760
- createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie)
2797
+ createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2761
2798
  );
2762
2799
  router.get(
2763
2800
  "/fetch_one_work",
2764
2801
  createDouyinValidationMiddleware("\u5408\u8F91\u4F5C\u54C1\u6570\u636E"),
2765
- createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie)
2802
+ createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2766
2803
  );
2767
2804
  router.get(
2768
2805
  "/fetch_work_comments",
2769
2806
  createDouyinValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2770
- createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2807
+ createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2771
2808
  );
2772
2809
  router.get(
2773
2810
  "/fetch_user_info",
2774
2811
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2775
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
2812
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2776
2813
  );
2777
2814
  router.get(
2778
2815
  "/fetch_user_post_videos",
2779
2816
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E"),
2780
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie)
2817
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig)
2781
2818
  );
2782
2819
  router.get(
2783
2820
  "/fetch_search_info",
2784
2821
  createDouyinValidationMiddleware("\u641C\u7D22\u6570\u636E"),
2785
- createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie)
2822
+ createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie, requestConfig)
2786
2823
  );
2787
2824
  router.get(
2788
2825
  "/fetch_suggest_words",
2789
2826
  createDouyinValidationMiddleware("\u70ED\u70B9\u8BCD\u6570\u636E"),
2790
- createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie)
2827
+ createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig)
2791
2828
  );
2792
2829
  router.get(
2793
2830
  "/fetch_music_work",
2794
2831
  createDouyinValidationMiddleware("\u97F3\u4E50\u6570\u636E"),
2795
- createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie)
2832
+ createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie, requestConfig)
2796
2833
  );
2797
2834
  router.get(
2798
2835
  "/fetch_emoji_list",
2799
2836
  createDouyinValidationMiddleware("Emoji\u6570\u636E"),
2800
- createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie)
2837
+ createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie, requestConfig)
2801
2838
  );
2802
2839
  router.get(
2803
2840
  "/fetch_emoji_pro_list",
2804
2841
  createDouyinValidationMiddleware("\u52A8\u6001\u8868\u60C5\u6570\u636E"),
2805
- createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie)
2842
+ createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig)
2806
2843
  );
2807
2844
  router.get(
2808
2845
  "/fetch_user_live_videos",
2809
2846
  createDouyinValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"),
2810
- createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
2847
+ createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2811
2848
  );
2812
2849
  router.get(
2813
2850
  "/fetch_video_comment_replies",
2814
2851
  createDouyinValidationMiddleware("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
2815
- createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie)
2852
+ createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig)
2816
2853
  );
2817
2854
  return router;
2818
2855
  };
@@ -2823,10 +2860,10 @@ var douyinUtils = {
2823
2860
  douyinApiUrls,
2824
2861
  api: douyin
2825
2862
  };
2826
- var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
2863
+ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2827
2864
  return async (req, res) => {
2828
2865
  try {
2829
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2866
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2830
2867
  res.json({
2831
2868
  ...result,
2832
2869
  requestPath: req.originalUrl
@@ -2840,22 +2877,22 @@ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
2840
2877
  }
2841
2878
  };
2842
2879
  };
2843
- var createKuaishouRoutes = (cookie) => {
2880
+ var createKuaishouRoutes = (cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2844
2881
  const router = Router();
2845
2882
  router.get(
2846
2883
  "/fetch_one_work",
2847
2884
  createKuaishouValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2848
- createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2885
+ createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2849
2886
  );
2850
2887
  router.get(
2851
2888
  "/fetch_work_comments",
2852
2889
  createKuaishouValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2853
- createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2890
+ createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2854
2891
  );
2855
2892
  router.get(
2856
2893
  "/fetch_emoji_list",
2857
2894
  createKuaishouValidationMiddleware("Emoji\u6570\u636E"),
2858
- createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie)
2895
+ createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie, requestConfig)
2859
2896
  );
2860
2897
  return router;
2861
2898
  };
@@ -2894,7 +2931,7 @@ var kuaishou = {
2894
2931
  */
2895
2932
  getEmojiList: createKuaishouApiMethod("Emoji\u6570\u636E")
2896
2933
  };
2897
- var createBoundKuaishouApi = (cookie) => {
2934
+ var createBoundKuaishouApi = (cookie, requestConfig) => {
2898
2935
  return {
2899
2936
  /**
2900
2937
  * 获取单个视频作品数据
@@ -2922,161 +2959,83 @@ var kuaishouUtils = {
2922
2959
  kuaishouApiUrls,
2923
2960
  api: kuaishou
2924
2961
  };
2925
-
2926
- // src/v4/DataFetchers.ts
2927
- async function getDouyinData2(type, arg2, arg3) {
2928
- let cookie;
2929
- let options;
2930
- if (typeof arg2 === "string") {
2931
- cookie = arg2;
2932
- options = arg3;
2933
- } else {
2934
- options = arg2;
2935
- cookie = arg3;
2936
- }
2937
- const data2 = await DouyinData({ ...options, methodType: type }, cookie);
2938
- return data2;
2939
- }
2940
- async function getBilibiliData2(methodType, arg2, arg3) {
2941
- let cookie;
2942
- let options;
2943
- if (typeof arg2 === "string") {
2944
- cookie = arg2;
2945
- options = arg3;
2946
- } else {
2947
- options = arg2;
2948
- cookie = arg3;
2949
- }
2950
- const data2 = await fetchBilibili({ ...options, methodType }, cookie);
2951
- return data2;
2952
- }
2953
- async function getKuaishouData2(methodType, arg2, arg3) {
2954
- let cookie;
2955
- let options;
2956
- if (typeof arg2 === "string") {
2957
- cookie = arg2;
2958
- options = arg3;
2959
- } else {
2960
- options = arg2;
2961
- cookie = arg3;
2962
- }
2963
- const data2 = await KuaishouData({ ...options, methodType }, cookie);
2964
- return data2;
2965
- }
2966
- var fetchDouyinData = getDouyinData2;
2967
- var fetchBilibiliData = getBilibiliData2;
2968
- var fetchKuaishouData = getKuaishouData2;
2969
- var v4CompatibilityMiddleware = (req, res, next) => {
2970
- const originalJson = res.json;
2971
- res.json = (data2) => {
2972
- if (data2 && typeof data2 === "object" && "data" in data2 && "message" in data2 && "code" in data2) {
2973
- const v4Response = {
2974
- ...data2.data,
2975
- ...data2.requestPath && { requestPath: data2.requestPath }
2976
- };
2977
- return originalJson.call(void 0, v4Response);
2978
- }
2979
- return originalJson.call(void 0, data2);
2980
- };
2981
- next();
2982
- };
2983
- var amagiClient = class {
2984
- #douyin;
2985
- #bilibili;
2986
- #kuaishou;
2987
- /**
2988
- *
2989
- * @param cookie - 包含抖音ck、B站ck、快手ck的对象
2990
- */
2991
- constructor(options) {
2992
- this.#douyin = (options == null ? void 0 : options.douyin) ?? "";
2993
- this.#bilibili = (options == null ? void 0 : options.bilibili) ?? "";
2994
- this.#kuaishou = (options == null ? void 0 : options.kuaishou) ?? "";
2995
- }
2996
- /**
2997
- * 启动本地 HTTP 服务
2998
- * @param port - 监听端口
2999
- * @defaultValue `port` 4567
3000
- * @returns Express 应用实例
3001
- */
3002
- startClient = (port = 4567) => {
2962
+ var createAmagiClient = (options) => {
2963
+ var _a, _b, _c;
2964
+ const douyinCookie = ((_a = options == null ? void 0 : options.cookies) == null ? void 0 : _a.douyin) ?? "";
2965
+ const bilibiliCookie = ((_b = options == null ? void 0 : options.cookies) == null ? void 0 : _b.bilibili) ?? "";
2966
+ const kuaishouCookie = ((_c = options == null ? void 0 : options.cookies) == null ? void 0 : _c.kuaishou) ?? "";
2967
+ const requestConfig = (options == null ? void 0 : options.request) ?? {};
2968
+ const startServer = (port = 4567) => {
3003
2969
  const app = express();
2970
+ app.use(express.json());
2971
+ app.use(express.urlencoded({ extended: true }));
3004
2972
  app.get("/", (_req, res) => {
3005
2973
  res.redirect(301, "https://amagi.apifox.cn");
3006
2974
  });
3007
2975
  app.get("/docs", (_req, res) => {
3008
2976
  res.redirect(301, "https://amagi.apifox.cn");
3009
2977
  });
3010
- app.use(logMiddleware(["/api/douyin", "/api/bilibili", "/api/kuaishou"]));
3011
- app.use("/api/douyin", v4CompatibilityMiddleware);
3012
- app.use("/api/bilibili", v4CompatibilityMiddleware);
3013
- app.use("/api/kuaishou", v4CompatibilityMiddleware);
3014
- app.use("/api/douyin", createDouyinRoutes(this.#douyin));
3015
- app.use("/api/bilibili", createBilibiliRoutes(this.#bilibili));
3016
- app.use("/api/kuaishou", createKuaishouRoutes(this.#kuaishou));
2978
+ app.use("/api/douyin", createDouyinRoutes(douyinCookie, requestConfig));
2979
+ app.use("/api/bilibili", createBilibiliRoutes(bilibiliCookie, requestConfig));
2980
+ app.use("/api/kuaishou", createKuaishouRoutes(kuaishouCookie, requestConfig));
3017
2981
  app.listen(port, "::", () => {
3018
2982
  logger.mark(`Amagi server listening on ${logger.green(`http://localhost:${port}`)} ${logger.yellow("API docs: https://amagi.apifox.cn ")}`);
3019
2983
  });
3020
2984
  return app;
3021
2985
  };
3022
- /**
3023
- * 快捷获取抖音数据
3024
- * @param type - 请求数据类型
3025
- * @param options - 请求参数,是一个对象
3026
- * @returns 返回接口的原始数据
3027
- */
3028
- getDouyinData = async (methodType, options) => {
3029
- const fullOptions = {
3030
- methodType,
3031
- ...options
3032
- };
3033
- const result = await getDouyinData2(methodType, this.#douyin, fullOptions);
3034
- return result && typeof result === "object" && "data" in result ? result.data : result;
2986
+ const startClient = (port = 4567) => {
2987
+ return startServer(port);
3035
2988
  };
3036
- /**
3037
- * 快捷获取B站数据
3038
- * @param type - 请求数据类型
3039
- * @param options - 请求参数,是一个对象
3040
- * @returns 返回接口的原始数据
3041
- */
3042
- getBilibiliData = async (methodType, options) => {
3043
- const fullOptions = {
3044
- methodType,
3045
- ...options
3046
- };
3047
- const result = await getBilibiliData2(methodType, this.#bilibili, fullOptions);
3048
- return result && typeof result === "object" && "data" in result ? result.data : result;
2989
+ const getDouyinDataWithCookie = async (methodType, options2) => {
2990
+ return await getDouyinData(methodType, options2, douyinCookie, requestConfig);
3049
2991
  };
3050
- /**
3051
- * 快捷获取快手数据
3052
- * @param type - 请求数据类型
3053
- * @param options - 请求参数,是一个对象
3054
- * @returns 返回接口的原始数据
3055
- */
3056
- getKuaishouData = async (methodType, options) => {
3057
- const fullOptions = {
3058
- methodType,
3059
- ...options
3060
- };
3061
- const result = await getKuaishouData2(methodType, this.#kuaishou, fullOptions);
3062
- return result && typeof result === "object" && "data" in result ? result.data : result;
2992
+ const getBilibiliDataWithCookie = async (methodType, options2) => {
2993
+ return await getBilibiliData(methodType, options2, bilibiliCookie);
2994
+ };
2995
+ const getKuaishouDataWithCookie = async (methodType, options2) => {
2996
+ return await getKuaishouData(methodType, options2, kuaishouCookie);
2997
+ };
2998
+ return {
2999
+ /** 启动本地HTTP服务 */
3000
+ startServer,
3001
+ /** @deprecated 此方法已废弃,请使用 startServer 方法代替 */
3002
+ startClient,
3003
+ getDouyinData: getDouyinDataWithCookie,
3004
+ getBilibiliData: getBilibiliDataWithCookie,
3005
+ getKuaishouData: getKuaishouDataWithCookie,
3006
+ douyin: {
3007
+ ...douyinUtils,
3008
+ /** 绑定了cookie和请求配置的抖音API对象,调用时不需要传递cookie */
3009
+ api: createBoundDouyinApi(douyinCookie, requestConfig)
3010
+ },
3011
+ bilibili: {
3012
+ ...bilibiliUtils,
3013
+ /** 绑定了cookie和请求配置的B站API对象,调用时不需要传递cookie */
3014
+ api: createBoundBilibiliApi(bilibiliCookie)
3015
+ },
3016
+ kuaishou: {
3017
+ ...kuaishouUtils,
3018
+ /** 绑定了cookie和请求配置的快手API对象,调用时不需要传递cookie */
3019
+ api: createBoundKuaishouApi(kuaishouCookie)
3020
+ }
3063
3021
  };
3064
3022
  };
3065
3023
 
3066
3024
  // src/index.ts
3067
- function createAmagiClient(options = {}) {
3068
- if (!(this instanceof createAmagiClient)) {
3069
- return new createAmagiClient(options);
3025
+ var amagiClient = createAmagiClient;
3026
+ function CreateAmagiApp(options = {}) {
3027
+ if (!(this instanceof CreateAmagiApp)) {
3028
+ return createAmagiClient(options);
3070
3029
  }
3071
- return new amagiClient(options);
3030
+ return createAmagiClient(options);
3072
3031
  }
3073
- createAmagiClient.douyin = douyinUtils;
3074
- createAmagiClient.bilibili = bilibiliUtils;
3075
- createAmagiClient.kuaishou = kuaishouUtils;
3076
- createAmagiClient.getDouyinData = getDouyinData2;
3077
- createAmagiClient.getBilibiliData = getBilibiliData2;
3078
- createAmagiClient.getKuaishouData = getKuaishouData2;
3079
- var CreateApp = createAmagiClient;
3032
+ CreateAmagiApp.douyin = douyinUtils;
3033
+ CreateAmagiApp.bilibili = bilibiliUtils;
3034
+ CreateAmagiApp.kuaishou = kuaishouUtils;
3035
+ CreateAmagiApp.getDouyinData = getDouyinData;
3036
+ CreateAmagiApp.getBilibiliData = getBilibiliData;
3037
+ CreateAmagiApp.getKuaishouData = getKuaishouData;
3038
+ var CreateApp = CreateAmagiApp;
3080
3039
  var Client = CreateApp;
3081
3040
  var amagi = Client;
3082
3041
  /*!
@@ -3085,4 +3044,4 @@ var amagi = Client;
3085
3044
  * GPL-3.0 Licensed
3086
3045
  */
3087
3046
 
3088
- export { CreateApp, Networks, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createDouyinRoutes, createKuaishouRoutes, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchBilibiliData, fetchDouyinData, fetchKuaishouData, getBilibiliData2 as getBilibiliData, getDouyinData2 as getDouyinData, getKuaishouData2 as getKuaishouData, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, createDouyinRoutes as registerBilibiliRoutes, createBilibiliRoutes as registerDouyinRoutes, createKuaishouRoutes as registerKuaishouRoutes, wbi_sign };
3047
+ export { ApiError, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliCommentParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidationSchemas2 as BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CreateApp, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas2 as DouyinValidationSchemas, DouyinWorkParamsSchema, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouValidationSchemas2 as KuaishouValidationSchemas, KuaishouVideoParamsSchema, ValidationError, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createDouyinRoutes, createErrorResponse, createKuaishouRoutes, createSuccessResponse, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchData, fetchResponse, getBilibiliData, getDouyinData, getHeadersAndData, getKuaishouData, handleError, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, createBilibiliRoutes as registerBilibiliRoutes, createDouyinRoutes as registerDouyinRoutes, createKuaishouRoutes as registerKuaishouRoutes, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, wbi_sign };