@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.
@@ -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.9_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.12.14_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;
@@ -353,7 +260,20 @@ var BiLiBiLiAPI = class {
353
260
  }
354
261
  /** 评论区类型,type参数详见 [评论区类型代码](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/comment/readme.md#评论区类型代码) */
355
262
  \u8BC4\u8BBA\u533A\u660E\u7EC6(data2) {
356
- return `https://api.bilibili.com/x/v2/reply?sort=1&ps=${data2.number ?? 20}&type=${data2.type}&oid=${data2.oid}&pn=${data2.pn}`;
263
+ const params = new URLSearchParams({
264
+ oid: data2.oid.toString(),
265
+ type: data2.type.toString(),
266
+ mode: (data2.mode ?? 3).toString(),
267
+ plat: "1",
268
+ seek_rpid: "",
269
+ web_location: "1315875"
270
+ });
271
+ if (data2.pagination_str) {
272
+ params.append("pagination_str", JSON.stringify({ offset: data2.pagination_str }));
273
+ } else {
274
+ params.append("pagination_str", JSON.stringify({ offset: "" }));
275
+ }
276
+ return `https://api.bilibili.com/x/v2/reply/wbi/main?${params.toString()}`;
357
277
  }
358
278
  \u8BC4\u8BBA\u533A\u72B6\u6001(data2) {
359
279
  return `https://api.bilibili.com/x/v2/reply/subject/description?type=${data2.type}&oid=${data2.oid}`;
@@ -409,116 +329,293 @@ var kuaishouAPIErrorCode = /* @__PURE__ */ ((kuaishouAPIErrorCode2) => {
409
329
  kuaishouAPIErrorCode2["UNKNOWN"] = "UNKNOWN_ERROR" /* UNKNOWN */;
410
330
  return kuaishouAPIErrorCode2;
411
331
  })(kuaishouAPIErrorCode || {});
332
+ var mixinKeyEncTab = [
333
+ 46,
334
+ 47,
335
+ 18,
336
+ 2,
337
+ 53,
338
+ 8,
339
+ 23,
340
+ 32,
341
+ 15,
342
+ 50,
343
+ 10,
344
+ 31,
345
+ 58,
346
+ 3,
347
+ 45,
348
+ 35,
349
+ 27,
350
+ 43,
351
+ 5,
352
+ 49,
353
+ 33,
354
+ 9,
355
+ 42,
356
+ 19,
357
+ 29,
358
+ 28,
359
+ 14,
360
+ 39,
361
+ 12,
362
+ 38,
363
+ 41,
364
+ 13,
365
+ 37,
366
+ 48,
367
+ 7,
368
+ 16,
369
+ 24,
370
+ 55,
371
+ 40,
372
+ 61,
373
+ 26,
374
+ 17,
375
+ 0,
376
+ 1,
377
+ 60,
378
+ 51,
379
+ 30,
380
+ 4,
381
+ 22,
382
+ 25,
383
+ 54,
384
+ 21,
385
+ 56,
386
+ 59,
387
+ 6,
388
+ 63,
389
+ 57,
390
+ 62,
391
+ 11,
392
+ 36,
393
+ 20,
394
+ 34,
395
+ 44,
396
+ 52
397
+ ];
398
+ var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
399
+ var encWbi = (params, img_key, sub_key) => {
400
+ const mixin_key = getMixinKey(img_key + sub_key);
401
+ const curr_time = Math.round(Date.now() / 1e3);
402
+ const chr_filter = /[!'()*]/g;
403
+ Object.assign(params, { wts: curr_time });
404
+ const query = Object.keys(params).sort().map((key) => {
405
+ const value = params[key].toString().replace(chr_filter, "");
406
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
407
+ }).join("&");
408
+ const wbi_sign2 = crypto__default.default.createHash("md5").update(query + mixin_key).digest("hex");
409
+ return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
410
+ };
411
+ var getWbiKeys = async (cookie) => {
412
+ const res = await axios__default.default("https://api.bilibili.com/x/web-interface/nav", {
413
+ headers: {
414
+ Cookie: cookie
415
+ }
416
+ });
417
+ const response = res.data;
418
+ const {
419
+ data: {
420
+ wbi_img: { img_url, sub_url }
421
+ }
422
+ } = response;
423
+ return {
424
+ img_key: img_url.slice(img_url.lastIndexOf("/") + 1, img_url.lastIndexOf(".")),
425
+ sub_key: sub_url.slice(sub_url.lastIndexOf("/") + 1, sub_url.lastIndexOf("."))
426
+ };
427
+ };
428
+ var wbi_sign = async (BASEURL, cookie) => {
429
+ const web_keys = await getWbiKeys(cookie);
430
+ const url = new URL(BASEURL);
431
+ const params = {};
432
+ for (const [key, value] of url.searchParams.entries()) {
433
+ params[key] = value;
434
+ }
435
+ const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
436
+ return query;
437
+ };
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
+ };
412
522
 
413
523
  // src/platform/bilibili/getdata.ts
414
- var defheaders = {
415
- 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",
416
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
417
- "cache-control": "max-age=0",
418
- priority: "u=0, i",
419
- "sec-ch-ua": "'Microsoft Edge';v='131', 'Chromium';v='131', 'Not_A Brand';v='24'",
420
- "sec-ch-ua-mobile": "?0",
421
- "sec-ch-ua-platform": "'Windows'",
422
- "sec-fetch-dest": "document",
423
- "sec-fetch-mode": "navigate",
424
- "sec-fetch-site": "none",
425
- "sec-fetch-user": "?1",
426
- "upgrade-insecure-requests": "1",
427
- referer: "https://www.bilibili.com/"
428
- };
429
- var fetchBilibili = async (data2, cookie) => {
430
- const headers2 = {
431
- ...defheaders,
432
- 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
+ }
433
535
  };
434
536
  switch (data2.methodType) {
435
537
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
436
- const INFODATA = await GlobalGetData({
437
- url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid }),
438
- ...data2
538
+ const INFODATA = await GlobalGetData(data2.methodType, {
539
+ ...baseRequestConfig,
540
+ url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid })
439
541
  });
440
542
  return INFODATA;
441
543
  }
442
544
  case "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
443
545
  const BASEURL = bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid });
444
- const SIGN = await qtparam(BASEURL, headers2.cookie);
445
- const DATA = await GlobalGetData({
446
- url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY,
447
- headers: headers2,
448
- ...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
449
550
  });
450
551
  return DATA;
451
552
  }
452
553
  case "\u8BC4\u8BBA\u6570\u636E": {
453
- let { oid, number, pn, type } = data2;
554
+ let { oid, number, type, mode, pagination_str, plat, seek_rpid, web_location } = data2;
454
555
  let fetchedComments = [];
455
- pn = pn ?? 1;
456
556
  const maxRequestCount = 100;
457
- const commentGrowthStabilized = 5;
458
- let lastFetchedCount = 0;
459
- let stabilizedCount = 0;
460
557
  let requestCount = 0;
461
558
  let tmpresp;
462
- while (fetchedComments.length < Number(number ?? 20) && requestCount < maxRequestCount) {
463
- if (number === 0 || number === void 0) {
464
- requestCount = 0;
465
- } else {
466
- requestCount = Math.min(20, Number(number) - fetchedComments.length);
467
- }
468
- const url = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u660E\u7EC6({
559
+ let nextPaginationStr = pagination_str;
560
+ let isEnd = false;
561
+ const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
562
+ const checkStatusRes = await GlobalGetData(data2.methodType, {
563
+ ...baseRequestConfig,
564
+ url: checkStatusUrl
565
+ });
566
+ if (checkStatusRes.data === null) {
567
+ logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
568
+ return {
569
+ code: 404,
570
+ message: "\u8BC4\u8BBA\u533A\u672A\u5F00\u653E",
571
+ data: null
572
+ };
573
+ }
574
+ while (fetchedComments.length < Number(number ?? 20) && requestCount < maxRequestCount && !isEnd) {
575
+ const baseUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u660E\u7EC6({
469
576
  type,
470
577
  oid,
471
- number: requestCount,
472
- pn
473
- });
474
- const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
475
- const checkStatusRes = await GlobalGetData({
476
- url: checkStatusUrl,
477
- headers: headers2,
478
- ...data2
578
+ mode: mode ?? 3,
579
+ pagination_str: nextPaginationStr,
580
+ plat: plat ?? 1,
581
+ seek_rpid,
582
+ web_location: web_location ?? "1315875"
479
583
  });
480
- if (checkStatusRes.data === null) {
481
- logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
482
- return {
483
- code: 404,
484
- message: "\u8BC4\u8BBA\u533A\u672A\u5F00\u653E",
485
- data: null
486
- };
487
- }
488
- const response = await GlobalGetData({
489
- url,
490
- headers: headers2,
491
- ...data2
584
+ const wbiSignQuery = await wbi_sign(baseUrl, (_b = baseRequestConfig.headers) == null ? void 0 : _b.cookie);
585
+ const finalUrl = baseUrl + wbiSignQuery;
586
+ const response = await GlobalGetData(data2.methodType, {
587
+ ...baseRequestConfig,
588
+ url: finalUrl
492
589
  });
493
590
  tmpresp = response;
494
- const currentCount = response.data.replies ? response.data.replies.length : 0;
495
- fetchedComments.push(...response.data.replies || []);
496
- if (currentCount === lastFetchedCount) {
497
- stabilizedCount++;
591
+ const currentComments = ((_c = response.data) == null ? void 0 : _c.replies) || [];
592
+ fetchedComments.push(...currentComments);
593
+ if ((_d = response.data) == null ? void 0 : _d.cursor) {
594
+ nextPaginationStr = (_e = response.data.cursor.pagination_reply) == null ? void 0 : _e.next_offset;
595
+ isEnd = response.data.cursor.is_end;
498
596
  } else {
499
- stabilizedCount = 0;
597
+ isEnd = true;
500
598
  }
501
- lastFetchedCount = currentCount;
502
- if (stabilizedCount >= commentGrowthStabilized || requestCount >= maxRequestCount) {
599
+ requestCount++;
600
+ if (isEnd || currentComments.length === 0 || !nextPaginationStr) {
601
+ logger.info("\u5DF2\u5230\u8FBE\u8BC4\u8BBA\u672B\u5C3E\u6216\u65E0\u66F4\u591A\u8BC4\u8BBA");
503
602
  break;
504
603
  }
505
- pn++;
506
- requestCount++;
507
604
  }
508
605
  const finalResponse = {
509
606
  ...tmpresp,
510
607
  data: {
511
608
  ...tmpresp.data,
512
- // 去重
513
- replies: Array.from(new Map(fetchedComments.map((item) => [item.rpid, item])).values()).slice(0, Number(data2.number))
609
+ // 去重并限制数量
610
+ replies: Array.from(new Map(fetchedComments.map((item) => [item.rpid, item])).values()).slice(0, Number(data2.number || 20))
514
611
  }
515
612
  };
516
613
  return finalResponse;
517
614
  }
518
615
  case "Emoji\u6570\u636E": {
519
- return await GlobalGetData({
520
- url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868(),
521
- ...data2
616
+ return await GlobalGetData(data2.methodType, {
617
+ ...baseRequestConfig,
618
+ url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868()
522
619
  });
523
620
  }
524
621
  case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
@@ -528,106 +625,121 @@ var fetchBilibili = async (data2, cookie) => {
528
625
  }
529
626
  const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
530
627
  const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
531
- const INFO = await GlobalGetData({
532
- url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId }),
533
- headers: headers2,
534
- ...data2
628
+ const INFO = await GlobalGetData(data2.methodType, {
629
+ ...baseRequestConfig,
630
+ url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId })
535
631
  });
536
632
  return INFO;
537
633
  }
538
634
  case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
539
635
  const BASEURL = bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
540
- const SIGN = await qtparam(BASEURL, headers2.cookie);
541
- const DATA = await GlobalGetData({
542
- url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY,
543
- headers: headers2,
544
- ...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
545
640
  });
546
641
  return DATA;
547
642
  }
548
643
  case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
549
- delete headers2.referer;
644
+ const customConfig = {
645
+ ...baseRequestConfig,
646
+ headers: {
647
+ ...baseRequestConfig.headers,
648
+ // 只有在外部配置没有referer时才删除内部的referer
649
+ ...{
650
+ referer: void 0
651
+ }
652
+ }
653
+ };
550
654
  const { host_mid } = data2;
551
- const result = await GlobalGetData({
552
- url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid }),
553
- headers: headers2,
554
- ...data2
655
+ const result = await GlobalGetData(data2.methodType, {
656
+ ...customConfig,
657
+ url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid })
555
658
  });
556
659
  return result;
557
660
  }
558
661
  case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
559
- delete headers2.referer;
560
- const dynamicINFO = await GlobalGetData({
561
- url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id }),
562
- headers: headers2,
563
- ...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 })
564
675
  });
565
676
  return dynamicINFO;
566
677
  }
567
678
  case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
568
- delete headers2.referer;
679
+ const customConfig = {
680
+ ...baseRequestConfig,
681
+ headers: {
682
+ ...baseRequestConfig.headers,
683
+ // 只有在外部配置没有referer时才删除内部的referer
684
+ ...{
685
+ referer: void 0
686
+ }
687
+ }
688
+ };
569
689
  const { dynamic_id } = data2;
570
- const dynamicINFO_CARD = await GlobalGetData({
571
- url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id }),
572
- headers: headers2,
573
- ...data2
690
+ const dynamicINFO_CARD = await GlobalGetData(data2.methodType, {
691
+ ...customConfig,
692
+ url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id })
574
693
  });
575
694
  return dynamicINFO_CARD;
576
695
  }
577
696
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
578
697
  const { host_mid } = data2;
579
- const result = await GlobalGetData({
580
- url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid }),
581
- headers: headers2,
582
- ...data2
698
+ const result = await GlobalGetData(data2.methodType, {
699
+ ...baseRequestConfig,
700
+ url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid })
583
701
  });
584
702
  return result;
585
703
  }
586
704
  case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
587
- const result = await GlobalGetData({
588
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id }),
589
- headers: headers2,
590
- ...data2
705
+ const result = await GlobalGetData(data2.methodType, {
706
+ ...baseRequestConfig,
707
+ url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id })
591
708
  });
592
709
  return result;
593
710
  }
594
711
  case "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F": {
595
- const result = await GlobalGetData({
596
- url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id }),
597
- headers: headers2,
598
- ...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 })
599
715
  });
600
716
  return result;
601
717
  }
602
718
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801": {
603
- const result = await GlobalGetData({
604
- url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801(),
605
- headers: headers2,
606
- ...data2
719
+ const result = await GlobalGetData(data2.methodType, {
720
+ ...baseRequestConfig,
721
+ url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801()
607
722
  });
608
723
  return result;
609
724
  }
610
725
  case "\u4E8C\u7EF4\u7801\u72B6\u6001": {
611
- const result = await new Networks({
612
- url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key }),
613
- headers: headers2,
614
- ...data2
615
- }).getHeadersAndData();
726
+ const result = await getHeadersAndData({
727
+ ...baseRequestConfig,
728
+ url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key })
729
+ });
616
730
  return result;
617
731
  }
618
732
  case "\u767B\u5F55\u57FA\u672C\u4FE1\u606F": {
619
- const result = await GlobalGetData({
620
- url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(),
621
- headers: headers2,
622
- ...data2
733
+ const result = await GlobalGetData(data2.methodType, {
734
+ ...baseRequestConfig,
735
+ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F()
623
736
  });
624
737
  return result;
625
738
  }
626
739
  case "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF": {
627
- const result = await GlobalGetData({
628
- url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid }),
629
- headers: headers2,
630
- ...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 })
631
743
  });
632
744
  return result;
633
745
  }
@@ -656,19 +768,19 @@ var fetchBilibili = async (data2, cookie) => {
656
768
  return null;
657
769
  }
658
770
  };
659
- var GlobalGetData = async (options) => {
771
+ var GlobalGetData = async (type, options) => {
660
772
  let warningMessage = "";
661
773
  try {
662
- const result = await new Networks(options).getData();
774
+ const result = await fetchData(options);
663
775
  if (!result || result === "") {
664
776
  const Err = {
665
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",
666
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
778
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
667
779
  requestUrl: options.url
668
780
  };
669
781
  warningMessage = `
670
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")}
671
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
783
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
672
784
  \u8BF7\u6C42URL\uFF1A${options.url}
673
785
  `;
674
786
  logger.warn(warningMessage);
@@ -682,13 +794,13 @@ var GlobalGetData = async (options) => {
682
794
  const errorMessage = bilibiliErrorCodeMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
683
795
  const Err = {
684
796
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${errorMessage}\uFF01`,
685
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
797
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
686
798
  requestUrl: options.url
687
799
  };
688
800
  warningMessage = `
689
801
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(errorMessage)}
690
802
  \u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}
691
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
803
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
692
804
  \u8BF7\u6C42URL\uFF1A${options.url}
693
805
  `;
694
806
  logger.warn(warningMessage);
@@ -709,7 +821,7 @@ var GlobalGetData = async (options) => {
709
821
  data: error.data,
710
822
  amagiError: {
711
823
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
712
- requestType: options.methodType,
824
+ requestType: type,
713
825
  requestUrl: options.url
714
826
  },
715
827
  amagiMessage: warningMessage
@@ -767,112 +879,6 @@ var bilibiliErrorCodeMap = {
767
879
  "-799": "\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
768
880
  "-8888": "\u5BF9\u4E0D\u8D77\uFF0C\u670D\u52A1\u5668\u5F00\u5C0F\u5DEE\u4E86~ (\u0CA5\uFE4F\u0CA5)"
769
881
  };
770
- var mixinKeyEncTab = [
771
- 46,
772
- 47,
773
- 18,
774
- 2,
775
- 53,
776
- 8,
777
- 23,
778
- 32,
779
- 15,
780
- 50,
781
- 10,
782
- 31,
783
- 58,
784
- 3,
785
- 45,
786
- 35,
787
- 27,
788
- 43,
789
- 5,
790
- 49,
791
- 33,
792
- 9,
793
- 42,
794
- 19,
795
- 29,
796
- 28,
797
- 14,
798
- 39,
799
- 12,
800
- 38,
801
- 41,
802
- 13,
803
- 37,
804
- 48,
805
- 7,
806
- 16,
807
- 24,
808
- 55,
809
- 40,
810
- 61,
811
- 26,
812
- 17,
813
- 0,
814
- 1,
815
- 60,
816
- 51,
817
- 30,
818
- 4,
819
- 22,
820
- 25,
821
- 54,
822
- 21,
823
- 56,
824
- 59,
825
- 6,
826
- 63,
827
- 57,
828
- 62,
829
- 11,
830
- 36,
831
- 20,
832
- 34,
833
- 44,
834
- 52
835
- ];
836
- var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
837
- var encWbi = (params, img_key, sub_key) => {
838
- const mixin_key = getMixinKey(img_key + sub_key);
839
- const curr_time = Math.round(Date.now() / 1e3);
840
- const chr_filter = /[!'()*]/g;
841
- Object.assign(params, { wts: curr_time });
842
- const query = Object.keys(params).sort().map((key) => {
843
- const value = params[key].toString().replace(chr_filter, "");
844
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
845
- }).join("&");
846
- const wbi_sign2 = crypto__default.default.createHash("md5").update(query + mixin_key).digest("hex");
847
- return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
848
- };
849
- var getWbiKeys = async (cookie) => {
850
- const res = await axios__default.default("https://api.bilibili.com/x/web-interface/nav", {
851
- headers: {
852
- Cookie: cookie
853
- }
854
- });
855
- const response = res.data;
856
- const {
857
- data: {
858
- wbi_img: { img_url, sub_url }
859
- }
860
- } = response;
861
- return {
862
- img_key: img_url.slice(img_url.lastIndexOf("/") + 1, img_url.lastIndexOf(".")),
863
- sub_key: sub_url.slice(sub_url.lastIndexOf("/") + 1, sub_url.lastIndexOf("."))
864
- };
865
- };
866
- var wbi_sign = async (BASEURL, cookie) => {
867
- const web_keys = await getWbiKeys(cookie);
868
- const url = new URL(BASEURL);
869
- const params = {};
870
- for (const [key, value] of url.searchParams.entries()) {
871
- params[key] = value;
872
- }
873
- const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
874
- return query;
875
- };
876
882
 
877
883
  // src/platform/douyin/sign/a_bogus.ts
878
884
  var SM3 = class {
@@ -1338,21 +1344,17 @@ var DouyinAPI = class {
1338
1344
  var douyinApiUrls = new DouyinAPI();
1339
1345
 
1340
1346
  // src/platform/douyin/getdata.ts
1341
- var defheaders2 = {
1342
- accept: "*/*",
1343
- priority: "u=0, i",
1344
- "content-type": "application/json; charset=utf-8",
1345
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1346
- "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",
1347
- referer: "https://www.douyin.com/",
1348
- "accept-encoding": "gzip, deflate, br",
1349
- connection: "keep-alive"
1350
- };
1351
- var DouyinData = async (data2, cookie) => {
1352
- var _a, _b;
1353
- const headers2 = {
1354
- ...defheaders2,
1355
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
1347
+ var DouyinData = async (data2, cookie, requestConfig) => {
1348
+ var _a, _b, _c, _d;
1349
+ const defHeaders = getDouyinDefaultConfig(cookie)["headers"];
1350
+ const baseRequestConfig = {
1351
+ method: "GET",
1352
+ timeout: 1e4,
1353
+ ...requestConfig,
1354
+ headers: {
1355
+ ...defHeaders,
1356
+ ...(requestConfig == null ? void 0 : requestConfig.headers) || {}
1357
+ }
1356
1358
  };
1357
1359
  switch (data2.methodType) {
1358
1360
  case "\u805A\u5408\u89E3\u6790":
@@ -1360,73 +1362,101 @@ var DouyinData = async (data2, cookie) => {
1360
1362
  case "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E":
1361
1363
  case "\u5408\u8F91\u4F5C\u54C1\u6570\u636E": {
1362
1364
  const url = douyinApiUrls.\u89C6\u9891\u6216\u56FE\u96C6({ aweme_id: data2.aweme_id });
1363
- const VideoData = await GlobalGetData2({
1364
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1365
- headers: headers2,
1366
- ...data2
1365
+ const VideoData = await GlobalGetData2(data2.methodType, {
1366
+ ...baseRequestConfig,
1367
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1367
1368
  });
1368
1369
  return VideoData;
1369
1370
  }
1370
1371
  case "\u8BC4\u8BBA\u6570\u636E": {
1371
1372
  const urlGenerator = (params) => douyinApiUrls.\u8BC4\u8BBA(params);
1372
- const response = await fetchPaginatedData(urlGenerator, data2, 50, headers2);
1373
+ const response = await fetchPaginatedData(
1374
+ data2.methodType,
1375
+ urlGenerator,
1376
+ data2,
1377
+ 50,
1378
+ baseRequestConfig
1379
+ );
1373
1380
  return response;
1374
1381
  }
1375
1382
  case "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": {
1376
1383
  const urlGenerator = (params) => douyinApiUrls.\u4E8C\u7EA7\u8BC4\u8BBA(params);
1384
+ const customConfig = {
1385
+ ...baseRequestConfig,
1386
+ headers: {
1387
+ ...baseRequestConfig.headers,
1388
+ // 只有在外部配置没有referer时才设置内部的referer
1389
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("referer" in requestConfig.headers)) && {
1390
+ referer: `https://www.douyin.com/note/${data2.aweme_id}`
1391
+ }
1392
+ }
1393
+ };
1377
1394
  const response = await fetchPaginatedData(
1395
+ data2.methodType,
1378
1396
  urlGenerator,
1379
1397
  data2,
1380
1398
  3,
1381
- {
1382
- ...headers2,
1383
- referer: `https://www.douyin.com/note/${data2.aweme_id}`
1384
- }
1399
+ customConfig
1385
1400
  );
1386
1401
  return response;
1387
1402
  }
1388
1403
  case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
1389
1404
  const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1390
- const UserInfoData = await GlobalGetData2({
1391
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1405
+ const customConfig = {
1406
+ ...baseRequestConfig,
1392
1407
  headers: {
1393
- ...headers2,
1394
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1395
- },
1396
- ...data2
1408
+ ...baseRequestConfig.headers,
1409
+ // 只有在外部配置没有Referer时才设置内部的Referer
1410
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1411
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1412
+ }
1413
+ }
1414
+ };
1415
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1416
+ ...customConfig,
1417
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1397
1418
  });
1398
1419
  return UserInfoData;
1399
1420
  }
1400
1421
  case "Emoji\u6570\u636E": {
1401
1422
  const url = douyinApiUrls.\u8868\u60C5();
1402
- const EmojiData = await GlobalGetData2({
1403
- url,
1404
- headers: headers2,
1405
- ...data2
1423
+ const EmojiData = await GlobalGetData2(data2.methodType, {
1424
+ ...baseRequestConfig,
1425
+ url
1406
1426
  });
1407
1427
  return EmojiData;
1408
1428
  }
1409
1429
  case "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E": {
1410
1430
  const url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u89C6\u9891({ sec_uid: data2.sec_uid });
1411
- const UserVideoListData = await GlobalGetData2({
1412
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1431
+ const customConfig = {
1432
+ ...baseRequestConfig,
1413
1433
  headers: {
1414
- ...headers2,
1415
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1416
- },
1417
- ...data2
1434
+ ...baseRequestConfig.headers,
1435
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1436
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1437
+ }
1438
+ }
1439
+ };
1440
+ const UserVideoListData = await GlobalGetData2(data2.methodType, {
1441
+ ...customConfig,
1442
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1418
1443
  });
1419
1444
  return UserVideoListData;
1420
1445
  }
1421
1446
  case "\u70ED\u70B9\u8BCD\u6570\u636E": {
1422
1447
  const url = douyinApiUrls.\u70ED\u70B9\u8BCD({ query: data2.query, number: data2.number ?? 10 });
1423
- const SuggestWordsData = await GlobalGetData2({
1424
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1448
+ const customConfig = {
1449
+ ...baseRequestConfig,
1425
1450
  headers: {
1426
- ...headers2,
1427
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1428
- },
1429
- ...data2
1451
+ ...baseRequestConfig.headers,
1452
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1453
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1454
+ }
1455
+ }
1456
+ };
1457
+ const SuggestWordsData = await GlobalGetData2(data2.methodType, {
1458
+ ...customConfig,
1459
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1430
1460
  });
1431
1461
  return SuggestWordsData;
1432
1462
  }
@@ -1435,6 +1465,15 @@ var DouyinData = async (data2, cookie) => {
1435
1465
  const maxPageSize = 15;
1436
1466
  let fetchedSearchList = [];
1437
1467
  let tmpresp = {};
1468
+ const customConfig = {
1469
+ ...baseRequestConfig,
1470
+ headers: {
1471
+ ...baseRequestConfig.headers,
1472
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1473
+ Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1474
+ }
1475
+ }
1476
+ };
1438
1477
  while (fetchedSearchList.length < Number(data2.number ?? 10)) {
1439
1478
  const requestCount = Math.min(Number(data2.number ?? 50) - fetchedSearchList.length, maxPageSize);
1440
1479
  const url = douyinApiUrls.\u641C\u7D22({
@@ -1442,15 +1481,11 @@ var DouyinData = async (data2, cookie) => {
1442
1481
  number: requestCount,
1443
1482
  search_id: search_id === "" ? void 0 : search_id
1444
1483
  });
1445
- const response = await GlobalGetData2({
1446
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1447
- headers: {
1448
- ...headers2,
1449
- Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
1450
- },
1451
- ...data2
1484
+ const response = await GlobalGetData2(data2.methodType, {
1485
+ ...customConfig,
1486
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1452
1487
  });
1453
- if (response.data.length === 0) {
1488
+ if (((_a = response.data) == null ? void 0 : _a.length) === 0) {
1454
1489
  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);
1455
1490
  return false;
1456
1491
  }
@@ -1459,7 +1494,7 @@ var DouyinData = async (data2, cookie) => {
1459
1494
  }
1460
1495
  fetchedSearchList.push(...response.data);
1461
1496
  tmpresp = response;
1462
- search_id = response.log_pb.impr_id;
1497
+ search_id = (_b = response.log_pb) == null ? void 0 : _b.impr_id;
1463
1498
  }
1464
1499
  const finalResponse = {
1465
1500
  ...tmpresp,
@@ -1469,35 +1504,38 @@ var DouyinData = async (data2, cookie) => {
1469
1504
  }
1470
1505
  case "\u52A8\u6001\u8868\u60C5\u6570\u636E": {
1471
1506
  const url = douyinApiUrls.\u4E92\u52A8\u8868\u60C5();
1472
- const ExpressionPlusData = await GlobalGetData2({
1473
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1474
- headers: headers2,
1475
- ...data2
1507
+ const ExpressionPlusData = await GlobalGetData2(data2.methodType, {
1508
+ ...baseRequestConfig,
1509
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1476
1510
  });
1477
1511
  return ExpressionPlusData;
1478
1512
  }
1479
1513
  case "\u97F3\u4E50\u6570\u636E": {
1480
1514
  const url = douyinApiUrls.\u80CC\u666F\u97F3\u4E50({ music_id: data2.music_id });
1481
- const MusicData = await GlobalGetData2({
1482
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1483
- headers: headers2,
1484
- ...data2
1515
+ const MusicData = await GlobalGetData2(data2.methodType, {
1516
+ ...baseRequestConfig,
1517
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1485
1518
  });
1486
1519
  return MusicData;
1487
1520
  }
1488
1521
  case "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E": {
1489
1522
  let url = douyinApiUrls.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
1490
1523
  const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url)}`;
1491
- const UserInfoData = await GlobalGetData2({
1492
- url: fetchUrl,
1524
+ const customConfig = {
1525
+ ...baseRequestConfig,
1493
1526
  headers: {
1494
- ...headers2,
1495
- Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1496
- },
1497
- ...data2
1527
+ ...baseRequestConfig.headers,
1528
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1529
+ Referer: `https://www.douyin.com/user/${data2.sec_uid}`
1530
+ }
1531
+ }
1532
+ };
1533
+ const UserInfoData = await GlobalGetData2(data2.methodType, {
1534
+ ...customConfig,
1535
+ url: fetchUrl
1498
1536
  });
1499
- if (!((_a = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _a.live_status) || UserInfoData.user.live_status !== 1) {
1500
- logger.error((((_b = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _b.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1537
+ if (!((_c = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _c.live_status) || UserInfoData.user.live_status !== 1) {
1538
+ logger.error((((_d = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _d.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
1501
1539
  const Err = {
1502
1540
  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')",
1503
1541
  requestType: data2.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
@@ -1520,31 +1558,36 @@ var DouyinData = async (data2, cookie) => {
1520
1558
  }
1521
1559
  const room_data = JSON.parse(UserInfoData.user.room_data);
1522
1560
  url = douyinApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: UserInfoData.user.room_id_str, web_rid: room_data.owner.web_rid });
1523
- const LiveRoomData = await GlobalGetData2({
1524
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1561
+ const liveCustomConfig = {
1562
+ ...baseRequestConfig,
1525
1563
  headers: {
1526
- ...headers2,
1527
- Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1528
- },
1529
- ...data2
1564
+ ...baseRequestConfig.headers,
1565
+ ...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
1566
+ Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
1567
+ }
1568
+ }
1569
+ };
1570
+ const LiveRoomData = await GlobalGetData2(data2.methodType, {
1571
+ ...liveCustomConfig,
1572
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1530
1573
  });
1531
1574
  return LiveRoomData;
1532
1575
  }
1533
1576
  case "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E": {
1534
1577
  const url = douyinApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801({ verify_fp: data2.verify_fp });
1535
- const LoginQrcodeStatusData = await GlobalGetData2({
1536
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1537
- headers: headers2,
1538
- ...data2
1578
+ const LoginQrcodeStatusData = await GlobalGetData2(data2.methodType, {
1579
+ ...baseRequestConfig,
1580
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1539
1581
  });
1540
1582
  return LoginQrcodeStatusData;
1541
1583
  }
1542
- default:
1543
- logger.warn(`\u672A\u77E5\u7684B\u7AD9\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1584
+ default: {
1585
+ logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1544
1586
  return null;
1587
+ }
1545
1588
  }
1546
1589
  };
1547
- var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2) => {
1590
+ var fetchPaginatedData = async (type, apiUrlGenerator, params, maxPageSize, requestConfig) => {
1548
1591
  let cursor = params.cursor ?? 0;
1549
1592
  let fetchedData = [];
1550
1593
  let tmpresp = {};
@@ -1555,10 +1598,9 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1555
1598
  number: requestCount,
1556
1599
  cursor
1557
1600
  });
1558
- const response = await GlobalGetData2({
1559
- url: `${url}&a_bogus=${douyinSign.AB(url)}`,
1560
- headers: headers2,
1561
- ...params
1601
+ const response = await GlobalGetData2(type, {
1602
+ ...requestConfig,
1603
+ url: `${url}&a_bogus=${douyinSign.AB(url)}`
1562
1604
  });
1563
1605
  fetchedData.push(...response.comments || response.data || []);
1564
1606
  tmpresp = response;
@@ -1574,20 +1616,20 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
1574
1616
  };
1575
1617
  return finalResponse;
1576
1618
  };
1577
- var GlobalGetData2 = async (options) => {
1619
+ var GlobalGetData2 = async (type, config) => {
1578
1620
  let warningMessage = "";
1579
1621
  try {
1580
- const result = await new Networks(options).getData();
1622
+ const result = await fetchData(config);
1581
1623
  if (!result || result === "") {
1582
1624
  const Err = {
1583
1625
  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",
1584
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1585
- requestUrl: options.url
1626
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1627
+ requestUrl: config.url
1586
1628
  };
1587
1629
  warningMessage = `
1588
1630
  \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")}
1589
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1590
- \u8BF7\u6C42URL\uFF1A${options.url}
1631
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1632
+ \u8BF7\u6C42URL\uFF1A${config.url}
1591
1633
  `;
1592
1634
  logger.warn(warningMessage);
1593
1635
  throw {
@@ -1600,13 +1642,13 @@ var GlobalGetData2 = async (options) => {
1600
1642
  const filterReason = result.filter_detail.filter_reason;
1601
1643
  const Err = {
1602
1644
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${filterReason}\uFF01`,
1603
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1604
- requestUrl: options.url
1645
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1646
+ requestUrl: config.url
1605
1647
  };
1606
1648
  warningMessage = `
1607
1649
  \u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(filterReason)}
1608
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1609
- \u8BF7\u6C42URL\uFF1A${options.url}
1650
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1651
+ \u8BF7\u6C42URL\uFF1A${config.url}
1610
1652
  `;
1611
1653
  logger.warn(warningMessage);
1612
1654
  throw {
@@ -1626,8 +1668,8 @@ var GlobalGetData2 = async (options) => {
1626
1668
  data: null,
1627
1669
  amagiError: {
1628
1670
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1629
- requestType: options.methodType,
1630
- requestUrl: options.url
1671
+ requestType: type,
1672
+ requestUrl: config.url
1631
1673
  },
1632
1674
  amagiMessage: warningMessage
1633
1675
  };
@@ -1684,50 +1726,42 @@ var API = class {
1684
1726
  var kuaishouApiUrls = new API();
1685
1727
 
1686
1728
  // src/platform/kuaishou/getdata.ts
1687
- var defheaders3 = {
1688
- referer: "https://www.kuaishou.com/new-reco",
1689
- origin: "https://www.kuaishou.com",
1690
- accept: "*/*",
1691
- "content-type": "application/json",
1692
- "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
1693
- "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"
1694
- };
1695
- var KuaishouData = async (data2, cookie) => {
1696
- const headers2 = {
1697
- ...defheaders3,
1698
- cookie: cookie ? cookie.replace(/\s+/g, "") : ""
1729
+ var KuaishouData = async (data2, cookie, requestConfig) => {
1730
+ const defHeaders = getKuaishouDefaultConfig(cookie)["headers"];
1731
+ const baseRequestConfig = {
1732
+ method: "POST",
1733
+ timeout: 1e4,
1734
+ ...requestConfig,
1735
+ headers: {
1736
+ ...defHeaders,
1737
+ ...{}
1738
+ }
1699
1739
  };
1700
1740
  switch (data2.methodType) {
1701
1741
  case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
1702
1742
  const body = kuaishouApiUrls.\u5355\u4E2A\u4F5C\u54C1\u4FE1\u606F({ photoId: data2.photoId });
1703
- const VideoData = await GlobalGetData3({
1743
+ const VideoData = await GlobalGetData3(data2.methodType, {
1744
+ ...baseRequestConfig,
1704
1745
  url: body.url,
1705
- method: "POST",
1706
- headers: headers2,
1707
- body: body.body,
1708
- ...data2
1746
+ data: body.body
1709
1747
  });
1710
1748
  return VideoData;
1711
1749
  }
1712
1750
  case "\u8BC4\u8BBA\u6570\u636E": {
1713
1751
  const body = kuaishouApiUrls.\u4F5C\u54C1\u8BC4\u8BBA\u4FE1\u606F({ photoId: data2.photoId });
1714
- const VideoData = await GlobalGetData3({
1752
+ const VideoData = await GlobalGetData3(data2.methodType, {
1753
+ ...baseRequestConfig,
1715
1754
  url: body.url,
1716
- method: "POST",
1717
- headers: headers2,
1718
- body: body.body,
1719
- ...data2
1755
+ data: body.body
1720
1756
  });
1721
1757
  return VideoData;
1722
1758
  }
1723
1759
  case "Emoji\u6570\u636E": {
1724
1760
  const body = kuaishouApiUrls.\u8868\u60C5();
1725
- const EmojiData = await GlobalGetData3({
1761
+ const EmojiData = await GlobalGetData3(data2.methodType, {
1762
+ ...baseRequestConfig,
1726
1763
  url: body.url,
1727
- method: "POST",
1728
- headers: headers2,
1729
- body: body.body,
1730
- ...data2
1764
+ data: body.body
1731
1765
  });
1732
1766
  return EmojiData;
1733
1767
  }
@@ -1736,22 +1770,22 @@ var KuaishouData = async (data2, cookie) => {
1736
1770
  return null;
1737
1771
  }
1738
1772
  };
1739
- var GlobalGetData3 = async (options) => {
1773
+ var GlobalGetData3 = async (type, options) => {
1740
1774
  let warningMessage = "";
1741
1775
  try {
1742
- const result = await new Networks(options).getData();
1776
+ const result = await fetchData(options);
1743
1777
  if (result === "" || !result || result.result === 2) {
1744
1778
  const Err = {
1745
1779
  errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF01`,
1746
- requestType: options.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1780
+ requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
1747
1781
  requestUrl: options.url,
1748
- requestBody: JSON.stringify(options.body)
1782
+ requestBody: JSON.stringify(options.data)
1749
1783
  };
1750
1784
  warningMessage = `
1751
1785
  \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")}
1752
- \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
1786
+ \u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
1753
1787
  \u8BF7\u6C42URL\uFF1A${options.url}
1754
- \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.body, null, 2)}
1788
+ \u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.data, null, 2)}
1755
1789
  `;
1756
1790
  logger.warn(warningMessage);
1757
1791
  throw {
@@ -1771,7 +1805,7 @@ var GlobalGetData3 = async (options) => {
1771
1805
  data: null,
1772
1806
  amagiError: {
1773
1807
  errorDescription: "\u672A\u77E5\u9519\u8BEF",
1774
- requestType: options.methodType,
1808
+ requestType: type,
1775
1809
  requestUrl: options.url
1776
1810
  },
1777
1811
  amagiMessage: warningMessage
@@ -1859,7 +1893,7 @@ var BilibiliVideoDownloadParamsSchema = zod.z.object({
1859
1893
  });
1860
1894
  var BilibiliCommentParamsSchema = zod.z.object({
1861
1895
  methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E"),
1862
- oid: smartNumber("OID\u4E0D\u80FD\u4E3A\u7A7A", 1, true),
1896
+ oid: zod.z.string({ required_error: "OID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "OID\u4E0D\u80FD\u4E3A\u7A7A"),
1863
1897
  type: smartNumber("\u8BC4\u8BBA\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A", 1, true).refine(
1864
1898
  (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),
1865
1899
  { message: "\u65E0\u6548\u7684\u8BC4\u8BBA\u533A\u7C7B\u578B" }
@@ -1995,23 +2029,26 @@ var createErrorResponse = (error, message, code = 500) => {
1995
2029
  };
1996
2030
 
1997
2031
  // src/model/DataFetchers.ts
1998
- async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2032
+ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
1999
2033
  try {
2000
2034
  let options;
2001
2035
  let cookie;
2036
+ let config;
2002
2037
  if (typeof optionsOrCookie === "string") {
2003
2038
  cookie = optionsOrCookie;
2004
2039
  options = cookieOrOptions;
2040
+ config = requestConfig;
2005
2041
  } else {
2006
2042
  options = optionsOrCookie;
2007
2043
  cookie = cookieOrOptions;
2044
+ config = requestConfig;
2008
2045
  }
2009
2046
  const { typeMode: _, ...validationOptions } = options || {};
2010
2047
  const validatedParams = validateDouyinParams(methodType, validationOptions);
2011
2048
  const apiParams = {
2012
2049
  ...validatedParams
2013
2050
  };
2014
- const rawData = await DouyinData(apiParams, cookie);
2051
+ const rawData = await DouyinData(apiParams, cookie, config);
2015
2052
  if (rawData.data === "") {
2016
2053
  return createErrorResponse(rawData.amagiError, "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
2017
2054
  }
@@ -2021,7 +2058,7 @@ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
2021
2058
  throw new Error(`\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2022
2059
  }
2023
2060
  }
2024
- async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2061
+ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2025
2062
  try {
2026
2063
  let options;
2027
2064
  let cookie;
@@ -2047,7 +2084,7 @@ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
2047
2084
  throw new Error(`B\u7AD9\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
2048
2085
  }
2049
2086
  }
2050
- async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions) {
2087
+ async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
2051
2088
  try {
2052
2089
  let options;
2053
2090
  let cookie;
@@ -2213,7 +2250,7 @@ var bilibili = {
2213
2250
  */
2214
2251
  convertBvToAv: createBilibiliApiMethod("BV\u8F6CAV")
2215
2252
  };
2216
- var createBoundBilibiliApi = (cookie) => {
2253
+ var createBoundBilibiliApi = (cookie, requestConfig) => {
2217
2254
  return {
2218
2255
  /**
2219
2256
  * 获取单个视频作品数据
@@ -2419,10 +2456,10 @@ var createValidationMiddleware = (validateFn, methodType) => {
2419
2456
  var createDouyinValidationMiddleware = (methodType) => createValidationMiddleware(validateDouyinParams, methodType);
2420
2457
  var createBilibiliValidationMiddleware = (methodType) => createValidationMiddleware(validateBilibiliParams, methodType);
2421
2458
  var createKuaishouValidationMiddleware = (methodType) => createValidationMiddleware(validateKuaishouParams, methodType);
2422
- var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2459
+ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2423
2460
  return async (req, res) => {
2424
2461
  try {
2425
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2462
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2426
2463
  res.json({
2427
2464
  ...result,
2428
2465
  requestPath: req.originalUrl
@@ -2436,97 +2473,97 @@ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
2436
2473
  }
2437
2474
  };
2438
2475
  };
2439
- var createBilibiliRoutes = (cookie) => {
2476
+ var createBilibiliRoutes = (cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
2440
2477
  const router = express.Router();
2441
2478
  router.get(
2442
2479
  "/fetch_one_video",
2443
2480
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2444
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2481
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2445
2482
  );
2446
2483
  router.get(
2447
2484
  "/fetch_video_playurl",
2448
2485
  createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2449
- createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2486
+ createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2450
2487
  );
2451
2488
  router.get(
2452
2489
  "/fetch_work_comments",
2453
2490
  createBilibiliValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2454
- createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2491
+ createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2455
2492
  );
2456
2493
  router.get(
2457
2494
  "/fetch_user_profile",
2458
2495
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2459
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
2496
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2460
2497
  );
2461
2498
  router.get(
2462
2499
  "/fetch_user_dynamic",
2463
2500
  createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E"),
2464
- createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie)
2501
+ createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie, requestConfig)
2465
2502
  );
2466
2503
  router.get(
2467
2504
  "/fetch_emoji_list",
2468
2505
  createBilibiliValidationMiddleware("Emoji\u6570\u636E"),
2469
- createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie)
2506
+ createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie, requestConfig)
2470
2507
  );
2471
2508
  router.get(
2472
2509
  "/fetch_bangumi_video_info",
2473
2510
  createBilibiliValidationMiddleware("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"),
2474
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie)
2511
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2475
2512
  );
2476
2513
  router.get(
2477
2514
  "/fetch_bangumi_video_playurl",
2478
2515
  createBilibiliValidationMiddleware("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2479
- createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
2516
+ createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2480
2517
  );
2481
2518
  router.get(
2482
2519
  "/fetch_dynamic_info",
2483
2520
  createBilibiliValidationMiddleware("\u52A8\u6001\u8BE6\u60C5\u6570\u636E"),
2484
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie)
2521
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie, requestConfig)
2485
2522
  );
2486
2523
  router.get(
2487
2524
  "/fetch_dynamic_card",
2488
2525
  createBilibiliValidationMiddleware("\u52A8\u6001\u5361\u7247\u6570\u636E"),
2489
- createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie)
2526
+ createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie, requestConfig)
2490
2527
  );
2491
2528
  router.get(
2492
2529
  "/fetch_live_room_detail",
2493
2530
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F"),
2494
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie)
2531
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie, requestConfig)
2495
2532
  );
2496
2533
  router.get(
2497
2534
  "/fetch_liveroom_def",
2498
2535
  createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"),
2499
- createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie)
2536
+ createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie, requestConfig)
2500
2537
  );
2501
2538
  router.get(
2502
2539
  "/login_basic_info",
2503
2540
  createBilibiliValidationMiddleware("\u767B\u5F55\u57FA\u672C\u4FE1\u606F"),
2504
- createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie)
2541
+ createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie, requestConfig)
2505
2542
  );
2506
2543
  router.get(
2507
2544
  "/new_login_qrcode",
2508
2545
  createBilibiliValidationMiddleware("\u7533\u8BF7\u4E8C\u7EF4\u7801"),
2509
- createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie)
2546
+ createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie, requestConfig)
2510
2547
  );
2511
2548
  router.get(
2512
2549
  "/check_qrcode",
2513
2550
  createBilibiliValidationMiddleware("\u4E8C\u7EF4\u7801\u72B6\u6001"),
2514
- createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie)
2551
+ createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie, requestConfig)
2515
2552
  );
2516
2553
  router.get(
2517
2554
  "/fetch_user_full_view",
2518
2555
  createBilibiliValidationMiddleware("\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"),
2519
- createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie)
2556
+ createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie, requestConfig)
2520
2557
  );
2521
2558
  router.get(
2522
2559
  "/av_to_bv",
2523
2560
  createBilibiliValidationMiddleware("AV\u8F6CBV"),
2524
- createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie)
2561
+ createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie, requestConfig)
2525
2562
  );
2526
2563
  router.get(
2527
2564
  "/bv_to_av",
2528
2565
  createBilibiliValidationMiddleware("BV\u8F6CAV"),
2529
- createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie)
2566
+ createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie, requestConfig)
2530
2567
  );
2531
2568
  return router;
2532
2569
  };
@@ -2544,13 +2581,13 @@ var bilibiliUtils = {
2544
2581
 
2545
2582
  // src/platform/douyin/DouyinApi.ts
2546
2583
  var createDouyinApiMethod = (methodType) => {
2547
- return async (options, cookie) => {
2548
- return await getDouyinData(methodType, options, cookie);
2584
+ return async (options, cookie, requestConfig) => {
2585
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2549
2586
  };
2550
2587
  };
2551
- var createBoundDouyinApiMethod = (methodType, cookie) => {
2588
+ var createBoundDouyinApiMethod = (methodType, cookie, requestConfig) => {
2552
2589
  return async (options) => {
2553
- return await getDouyinData(methodType, options, cookie);
2590
+ return await getDouyinData(methodType, options, cookie, requestConfig);
2554
2591
  };
2555
2592
  };
2556
2593
  var douyin = {
@@ -2653,98 +2690,98 @@ var douyin = {
2653
2690
  */
2654
2691
  getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E")
2655
2692
  };
2656
- var createBoundDouyinApi = (cookie) => {
2693
+ var createBoundDouyinApi = (cookie, requestConfig) => {
2657
2694
  return {
2658
2695
  /**
2659
2696
  * 聚合解析 (视频/图集/合辑)
2660
2697
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2661
2698
  * @returns 统一格式的API响应,包含视频、图集或合辑数据
2662
2699
  */
2663
- getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie),
2700
+ getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie, requestConfig),
2664
2701
  /**
2665
2702
  * 获取视频作品数据
2666
2703
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2667
2704
  * @returns 统一格式的API响应,包含视频作品详细信息
2668
2705
  */
2669
- getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie),
2706
+ getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2670
2707
  /**
2671
2708
  * 获取图集作品数据
2672
2709
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2673
2710
  * @returns 统一格式的API响应,包含图集作品详细信息
2674
2711
  */
2675
- getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie),
2712
+ getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2676
2713
  /**
2677
2714
  * 获取合辑作品数据
2678
2715
  * @param options 请求参数,包含 aweme_id 和可选的 typeMode
2679
2716
  * @returns 统一格式的API响应,包含合辑作品详细信息
2680
2717
  */
2681
- getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie),
2718
+ getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
2682
2719
  /**
2683
2720
  * 获取评论数据
2684
2721
  * @param options 请求参数,包含 aweme_id, 可选的 number, cursor 和 typeMode
2685
2722
  * @returns 统一格式的API响应,包含评论列表数据
2686
2723
  */
2687
- getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie),
2724
+ getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig),
2688
2725
  /**
2689
2726
  * 获取指定评论回复数据
2690
2727
  * @param options 请求参数,包含 aweme_id, comment_id, 可选的 number, cursor 和 typeMode
2691
2728
  * @returns 统一格式的API响应,包含评论回复数据
2692
2729
  */
2693
- getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie),
2730
+ getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig),
2694
2731
  /**
2695
2732
  * 获取用户主页数据
2696
2733
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2697
2734
  * @returns 统一格式的API响应,包含用户详细信息
2698
2735
  */
2699
- getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie),
2736
+ getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig),
2700
2737
  /**
2701
2738
  * 获取 Emoji 数据
2702
2739
  * @param options 可选的请求参数 (主要用于 typeMode)
2703
2740
  * @returns 统一格式的API响应,包含Emoji列表数据
2704
2741
  */
2705
- getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie),
2742
+ getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie, requestConfig),
2706
2743
  /**
2707
2744
  * 获取动态表情数据
2708
2745
  * @param options 可选的请求参数 (主要用于 typeMode)
2709
2746
  * @returns 统一格式的API响应,包含动态表情数据
2710
2747
  */
2711
- getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie),
2748
+ getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig),
2712
2749
  /**
2713
2750
  * 获取用户主页视频列表数据
2714
2751
  * @param options 请求参数,包含 sec_uid, 可选的 number, max_cursor 和 typeMode
2715
2752
  * @returns 统一格式的API响应,包含用户发布的视频列表
2716
2753
  */
2717
- getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie),
2754
+ getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig),
2718
2755
  /**
2719
2756
  * 获取音乐数据
2720
2757
  * @param options 请求参数,包含 music_id 和可选的 typeMode
2721
2758
  * @returns 统一格式的API响应,包含音乐详细信息
2722
2759
  */
2723
- getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie),
2760
+ getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie, requestConfig),
2724
2761
  /**
2725
2762
  * 获取热点词数据
2726
2763
  * @param options 请求参数,包含 query, 可选的 number 和 typeMode
2727
2764
  * @returns 统一格式的API响应,包含热点搜索词列表
2728
2765
  */
2729
- getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie),
2766
+ getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig),
2730
2767
  /**
2731
2768
  * 获取搜索数据
2732
2769
  * @param options 请求参数,包含 query, 可选的 number, search_id, cursor 和 typeMode
2733
2770
  * @returns 统一格式的API响应,包含搜索结果数据
2734
2771
  */
2735
- search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie),
2772
+ search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie, requestConfig),
2736
2773
  /**
2737
2774
  * 获取直播间信息
2738
2775
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
2739
2776
  * @returns 统一格式的API响应,包含直播间详细信息
2740
2777
  */
2741
- getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
2778
+ getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2742
2779
  };
2743
2780
  };
2744
- var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
2781
+ var createDouyinRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2745
2782
  return async (req, res) => {
2746
2783
  try {
2747
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2784
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2748
2785
  res.json({
2749
2786
  ...result,
2750
2787
  requestPath: req.originalUrl
@@ -2758,77 +2795,77 @@ var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
2758
2795
  }
2759
2796
  };
2760
2797
  };
2761
- var createDouyinRoutes = (cookie) => {
2798
+ var createDouyinRoutes = (cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
2762
2799
  const router = express.Router();
2763
2800
  router.get(
2764
2801
  "/fetch_one_work",
2765
2802
  createDouyinValidationMiddleware("\u805A\u5408\u89E3\u6790"),
2766
- createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie)
2803
+ createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie, requestConfig)
2767
2804
  );
2768
2805
  router.get(
2769
2806
  "/fetch_one_work",
2770
2807
  createDouyinValidationMiddleware("\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2771
- createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2808
+ createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2772
2809
  );
2773
2810
  router.get(
2774
2811
  "/fetch_one_work",
2775
2812
  createDouyinValidationMiddleware("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E"),
2776
- createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie)
2813
+ createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2777
2814
  );
2778
2815
  router.get(
2779
2816
  "/fetch_one_work",
2780
2817
  createDouyinValidationMiddleware("\u5408\u8F91\u4F5C\u54C1\u6570\u636E"),
2781
- createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie)
2818
+ createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2782
2819
  );
2783
2820
  router.get(
2784
2821
  "/fetch_work_comments",
2785
2822
  createDouyinValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2786
- createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2823
+ createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2787
2824
  );
2788
2825
  router.get(
2789
2826
  "/fetch_user_info",
2790
2827
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
2791
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
2828
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
2792
2829
  );
2793
2830
  router.get(
2794
2831
  "/fetch_user_post_videos",
2795
2832
  createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E"),
2796
- createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie)
2833
+ createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig)
2797
2834
  );
2798
2835
  router.get(
2799
2836
  "/fetch_search_info",
2800
2837
  createDouyinValidationMiddleware("\u641C\u7D22\u6570\u636E"),
2801
- createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie)
2838
+ createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie, requestConfig)
2802
2839
  );
2803
2840
  router.get(
2804
2841
  "/fetch_suggest_words",
2805
2842
  createDouyinValidationMiddleware("\u70ED\u70B9\u8BCD\u6570\u636E"),
2806
- createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie)
2843
+ createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig)
2807
2844
  );
2808
2845
  router.get(
2809
2846
  "/fetch_music_work",
2810
2847
  createDouyinValidationMiddleware("\u97F3\u4E50\u6570\u636E"),
2811
- createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie)
2848
+ createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie, requestConfig)
2812
2849
  );
2813
2850
  router.get(
2814
2851
  "/fetch_emoji_list",
2815
2852
  createDouyinValidationMiddleware("Emoji\u6570\u636E"),
2816
- createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie)
2853
+ createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie, requestConfig)
2817
2854
  );
2818
2855
  router.get(
2819
2856
  "/fetch_emoji_pro_list",
2820
2857
  createDouyinValidationMiddleware("\u52A8\u6001\u8868\u60C5\u6570\u636E"),
2821
- createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie)
2858
+ createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig)
2822
2859
  );
2823
2860
  router.get(
2824
2861
  "/fetch_user_live_videos",
2825
2862
  createDouyinValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"),
2826
- createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
2863
+ createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
2827
2864
  );
2828
2865
  router.get(
2829
2866
  "/fetch_video_comment_replies",
2830
2867
  createDouyinValidationMiddleware("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
2831
- createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie)
2868
+ createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig)
2832
2869
  );
2833
2870
  return router;
2834
2871
  };
@@ -2839,10 +2876,10 @@ var douyinUtils = {
2839
2876
  douyinApiUrls,
2840
2877
  api: douyin
2841
2878
  };
2842
- var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
2879
+ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2843
2880
  return async (req, res) => {
2844
2881
  try {
2845
- const result = await dataFetcher(methodType, req.validatedParams, cookie);
2882
+ const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
2846
2883
  res.json({
2847
2884
  ...result,
2848
2885
  requestPath: req.originalUrl
@@ -2856,22 +2893,22 @@ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
2856
2893
  }
2857
2894
  };
2858
2895
  };
2859
- var createKuaishouRoutes = (cookie) => {
2896
+ var createKuaishouRoutes = (cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
2860
2897
  const router = express.Router();
2861
2898
  router.get(
2862
2899
  "/fetch_one_work",
2863
2900
  createKuaishouValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2864
- createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
2901
+ createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
2865
2902
  );
2866
2903
  router.get(
2867
2904
  "/fetch_work_comments",
2868
2905
  createKuaishouValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
2869
- createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie)
2906
+ createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
2870
2907
  );
2871
2908
  router.get(
2872
2909
  "/fetch_emoji_list",
2873
2910
  createKuaishouValidationMiddleware("Emoji\u6570\u636E"),
2874
- createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie)
2911
+ createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie, requestConfig)
2875
2912
  );
2876
2913
  return router;
2877
2914
  };
@@ -2910,7 +2947,7 @@ var kuaishou = {
2910
2947
  */
2911
2948
  getEmojiList: createKuaishouApiMethod("Emoji\u6570\u636E")
2912
2949
  };
2913
- var createBoundKuaishouApi = (cookie) => {
2950
+ var createBoundKuaishouApi = (cookie, requestConfig) => {
2914
2951
  return {
2915
2952
  /**
2916
2953
  * 获取单个视频作品数据
@@ -2938,161 +2975,83 @@ var kuaishouUtils = {
2938
2975
  kuaishouApiUrls,
2939
2976
  api: kuaishou
2940
2977
  };
2941
-
2942
- // src/v4/DataFetchers.ts
2943
- async function getDouyinData2(type, arg2, arg3) {
2944
- let cookie;
2945
- let options;
2946
- if (typeof arg2 === "string") {
2947
- cookie = arg2;
2948
- options = arg3;
2949
- } else {
2950
- options = arg2;
2951
- cookie = arg3;
2952
- }
2953
- const data2 = await DouyinData({ ...options, methodType: type }, cookie);
2954
- return data2;
2955
- }
2956
- async function getBilibiliData2(methodType, arg2, arg3) {
2957
- let cookie;
2958
- let options;
2959
- if (typeof arg2 === "string") {
2960
- cookie = arg2;
2961
- options = arg3;
2962
- } else {
2963
- options = arg2;
2964
- cookie = arg3;
2965
- }
2966
- const data2 = await fetchBilibili({ ...options, methodType }, cookie);
2967
- return data2;
2968
- }
2969
- async function getKuaishouData2(methodType, arg2, arg3) {
2970
- let cookie;
2971
- let options;
2972
- if (typeof arg2 === "string") {
2973
- cookie = arg2;
2974
- options = arg3;
2975
- } else {
2976
- options = arg2;
2977
- cookie = arg3;
2978
- }
2979
- const data2 = await KuaishouData({ ...options, methodType }, cookie);
2980
- return data2;
2981
- }
2982
- var fetchDouyinData = getDouyinData2;
2983
- var fetchBilibiliData = getBilibiliData2;
2984
- var fetchKuaishouData = getKuaishouData2;
2985
- var v4CompatibilityMiddleware = (req, res, next) => {
2986
- const originalJson = res.json;
2987
- res.json = (data2) => {
2988
- if (data2 && typeof data2 === "object" && "data" in data2 && "message" in data2 && "code" in data2) {
2989
- const v4Response = {
2990
- ...data2.data,
2991
- ...data2.requestPath && { requestPath: data2.requestPath }
2992
- };
2993
- return originalJson.call(void 0, v4Response);
2994
- }
2995
- return originalJson.call(void 0, data2);
2996
- };
2997
- next();
2998
- };
2999
- var amagiClient = class {
3000
- #douyin;
3001
- #bilibili;
3002
- #kuaishou;
3003
- /**
3004
- *
3005
- * @param cookie - 包含抖音ck、B站ck、快手ck的对象
3006
- */
3007
- constructor(options) {
3008
- this.#douyin = (options == null ? void 0 : options.douyin) ?? "";
3009
- this.#bilibili = (options == null ? void 0 : options.bilibili) ?? "";
3010
- this.#kuaishou = (options == null ? void 0 : options.kuaishou) ?? "";
3011
- }
3012
- /**
3013
- * 启动本地 HTTP 服务
3014
- * @param port - 监听端口
3015
- * @defaultValue `port` 4567
3016
- * @returns Express 应用实例
3017
- */
3018
- startClient = (port = 4567) => {
2978
+ var createAmagiClient = (options) => {
2979
+ var _a, _b, _c;
2980
+ const douyinCookie = ((_a = options == null ? void 0 : options.cookies) == null ? void 0 : _a.douyin) ?? "";
2981
+ const bilibiliCookie = ((_b = options == null ? void 0 : options.cookies) == null ? void 0 : _b.bilibili) ?? "";
2982
+ const kuaishouCookie = ((_c = options == null ? void 0 : options.cookies) == null ? void 0 : _c.kuaishou) ?? "";
2983
+ const requestConfig = (options == null ? void 0 : options.request) ?? {};
2984
+ const startServer = (port = 4567) => {
3019
2985
  const app = express__default.default();
2986
+ app.use(express__default.default.json());
2987
+ app.use(express__default.default.urlencoded({ extended: true }));
3020
2988
  app.get("/", (_req, res) => {
3021
2989
  res.redirect(301, "https://amagi.apifox.cn");
3022
2990
  });
3023
2991
  app.get("/docs", (_req, res) => {
3024
2992
  res.redirect(301, "https://amagi.apifox.cn");
3025
2993
  });
3026
- app.use(logMiddleware(["/api/douyin", "/api/bilibili", "/api/kuaishou"]));
3027
- app.use("/api/douyin", v4CompatibilityMiddleware);
3028
- app.use("/api/bilibili", v4CompatibilityMiddleware);
3029
- app.use("/api/kuaishou", v4CompatibilityMiddleware);
3030
- app.use("/api/douyin", createDouyinRoutes(this.#douyin));
3031
- app.use("/api/bilibili", createBilibiliRoutes(this.#bilibili));
3032
- app.use("/api/kuaishou", createKuaishouRoutes(this.#kuaishou));
2994
+ app.use("/api/douyin", createDouyinRoutes(douyinCookie, requestConfig));
2995
+ app.use("/api/bilibili", createBilibiliRoutes(bilibiliCookie, requestConfig));
2996
+ app.use("/api/kuaishou", createKuaishouRoutes(kuaishouCookie, requestConfig));
3033
2997
  app.listen(port, "::", () => {
3034
2998
  logger.mark(`Amagi server listening on ${logger.green(`http://localhost:${port}`)} ${logger.yellow("API docs: https://amagi.apifox.cn ")}`);
3035
2999
  });
3036
3000
  return app;
3037
3001
  };
3038
- /**
3039
- * 快捷获取抖音数据
3040
- * @param type - 请求数据类型
3041
- * @param options - 请求参数,是一个对象
3042
- * @returns 返回接口的原始数据
3043
- */
3044
- getDouyinData = async (methodType, options) => {
3045
- const fullOptions = {
3046
- methodType,
3047
- ...options
3048
- };
3049
- const result = await getDouyinData2(methodType, this.#douyin, fullOptions);
3050
- return result && typeof result === "object" && "data" in result ? result.data : result;
3002
+ const startClient = (port = 4567) => {
3003
+ return startServer(port);
3051
3004
  };
3052
- /**
3053
- * 快捷获取B站数据
3054
- * @param type - 请求数据类型
3055
- * @param options - 请求参数,是一个对象
3056
- * @returns 返回接口的原始数据
3057
- */
3058
- getBilibiliData = async (methodType, options) => {
3059
- const fullOptions = {
3060
- methodType,
3061
- ...options
3062
- };
3063
- const result = await getBilibiliData2(methodType, this.#bilibili, fullOptions);
3064
- return result && typeof result === "object" && "data" in result ? result.data : result;
3005
+ const getDouyinDataWithCookie = async (methodType, options2) => {
3006
+ return await getDouyinData(methodType, options2, douyinCookie, requestConfig);
3065
3007
  };
3066
- /**
3067
- * 快捷获取快手数据
3068
- * @param type - 请求数据类型
3069
- * @param options - 请求参数,是一个对象
3070
- * @returns 返回接口的原始数据
3071
- */
3072
- getKuaishouData = async (methodType, options) => {
3073
- const fullOptions = {
3074
- methodType,
3075
- ...options
3076
- };
3077
- const result = await getKuaishouData2(methodType, this.#kuaishou, fullOptions);
3078
- return result && typeof result === "object" && "data" in result ? result.data : result;
3008
+ const getBilibiliDataWithCookie = async (methodType, options2) => {
3009
+ return await getBilibiliData(methodType, options2, bilibiliCookie);
3010
+ };
3011
+ const getKuaishouDataWithCookie = async (methodType, options2) => {
3012
+ return await getKuaishouData(methodType, options2, kuaishouCookie);
3013
+ };
3014
+ return {
3015
+ /** 启动本地HTTP服务 */
3016
+ startServer,
3017
+ /** @deprecated 此方法已废弃,请使用 startServer 方法代替 */
3018
+ startClient,
3019
+ getDouyinData: getDouyinDataWithCookie,
3020
+ getBilibiliData: getBilibiliDataWithCookie,
3021
+ getKuaishouData: getKuaishouDataWithCookie,
3022
+ douyin: {
3023
+ ...douyinUtils,
3024
+ /** 绑定了cookie和请求配置的抖音API对象,调用时不需要传递cookie */
3025
+ api: createBoundDouyinApi(douyinCookie, requestConfig)
3026
+ },
3027
+ bilibili: {
3028
+ ...bilibiliUtils,
3029
+ /** 绑定了cookie和请求配置的B站API对象,调用时不需要传递cookie */
3030
+ api: createBoundBilibiliApi(bilibiliCookie)
3031
+ },
3032
+ kuaishou: {
3033
+ ...kuaishouUtils,
3034
+ /** 绑定了cookie和请求配置的快手API对象,调用时不需要传递cookie */
3035
+ api: createBoundKuaishouApi(kuaishouCookie)
3036
+ }
3079
3037
  };
3080
3038
  };
3081
3039
 
3082
3040
  // src/index.ts
3083
- function createAmagiClient(options = {}) {
3084
- if (!(this instanceof createAmagiClient)) {
3085
- return new createAmagiClient(options);
3041
+ var amagiClient = createAmagiClient;
3042
+ function CreateAmagiApp(options = {}) {
3043
+ if (!(this instanceof CreateAmagiApp)) {
3044
+ return createAmagiClient(options);
3086
3045
  }
3087
- return new amagiClient(options);
3046
+ return createAmagiClient(options);
3088
3047
  }
3089
- createAmagiClient.douyin = douyinUtils;
3090
- createAmagiClient.bilibili = bilibiliUtils;
3091
- createAmagiClient.kuaishou = kuaishouUtils;
3092
- createAmagiClient.getDouyinData = getDouyinData2;
3093
- createAmagiClient.getBilibiliData = getBilibiliData2;
3094
- createAmagiClient.getKuaishouData = getKuaishouData2;
3095
- var CreateApp = createAmagiClient;
3048
+ CreateAmagiApp.douyin = douyinUtils;
3049
+ CreateAmagiApp.bilibili = bilibiliUtils;
3050
+ CreateAmagiApp.kuaishou = kuaishouUtils;
3051
+ CreateAmagiApp.getDouyinData = getDouyinData;
3052
+ CreateAmagiApp.getBilibiliData = getBilibiliData;
3053
+ CreateAmagiApp.getKuaishouData = getKuaishouData;
3054
+ var CreateApp = CreateAmagiApp;
3096
3055
  var Client = CreateApp;
3097
3056
  var amagi = Client;
3098
3057
  /*!
@@ -3101,8 +3060,38 @@ var amagi = Client;
3101
3060
  * GPL-3.0 Licensed
3102
3061
  */
3103
3062
 
3063
+ exports.ApiError = ApiError;
3064
+ exports.BilibiliAv2BvParamsSchema = BilibiliAv2BvParamsSchema;
3065
+ exports.BilibiliBangumiInfoParamsSchema = BilibiliBangumiInfoParamsSchema;
3066
+ exports.BilibiliBangumiStreamParamsSchema = BilibiliBangumiStreamParamsSchema;
3067
+ exports.BilibiliBv2AvParamsSchema = BilibiliBv2AvParamsSchema;
3068
+ exports.BilibiliCommentParamsSchema = BilibiliCommentParamsSchema;
3069
+ exports.BilibiliDynamicParamsSchema = BilibiliDynamicParamsSchema;
3070
+ exports.BilibiliEmojiParamsSchema = BilibiliEmojiParamsSchema;
3071
+ exports.BilibiliLiveParamsSchema = BilibiliLiveParamsSchema;
3072
+ exports.BilibiliLoginParamsSchema = BilibiliLoginParamsSchema;
3073
+ exports.BilibiliQrcodeParamsSchema = BilibiliQrcodeParamsSchema;
3074
+ exports.BilibiliQrcodeStatusParamsSchema = BilibiliQrcodeStatusParamsSchema;
3075
+ exports.BilibiliUserParamsSchema = BilibiliUserParamsSchema;
3076
+ exports.BilibiliValidationSchemas = BilibiliValidationSchemas2;
3077
+ exports.BilibiliVideoDownloadParamsSchema = BilibiliVideoDownloadParamsSchema;
3078
+ exports.BilibiliVideoParamsSchema = BilibiliVideoParamsSchema;
3104
3079
  exports.CreateApp = CreateApp;
3105
- exports.Networks = Networks;
3080
+ exports.DouyinCommentParamsSchema = DouyinCommentParamsSchema;
3081
+ exports.DouyinCommentReplyParamsSchema = DouyinCommentReplyParamsSchema;
3082
+ exports.DouyinEmojiListParamsSchema = DouyinEmojiListParamsSchema;
3083
+ exports.DouyinEmojiProParamsSchema = DouyinEmojiProParamsSchema;
3084
+ exports.DouyinMusicParamsSchema = DouyinMusicParamsSchema;
3085
+ exports.DouyinQrcodeParamsSchema = DouyinQrcodeParamsSchema;
3086
+ exports.DouyinSearchParamsSchema = DouyinSearchParamsSchema;
3087
+ exports.DouyinUserParamsSchema = DouyinUserParamsSchema;
3088
+ exports.DouyinValidationSchemas = DouyinValidationSchemas2;
3089
+ exports.DouyinWorkParamsSchema = DouyinWorkParamsSchema;
3090
+ exports.KuaishouCommentParamsSchema = KuaishouCommentParamsSchema;
3091
+ exports.KuaishouEmojiParamsSchema = KuaishouEmojiParamsSchema;
3092
+ exports.KuaishouValidationSchemas = KuaishouValidationSchemas2;
3093
+ exports.KuaishouVideoParamsSchema = KuaishouVideoParamsSchema;
3094
+ exports.ValidationError = ValidationError;
3106
3095
  exports.amagi = amagi;
3107
3096
  exports.amagiClient = amagiClient;
3108
3097
  exports.av2bv = av2bv;
@@ -3111,23 +3100,27 @@ exports.bilibiliApiUrls = bilibiliApiUrls;
3111
3100
  exports.bilibiliErrorCodeMap = bilibiliErrorCodeMap;
3112
3101
  exports.bilibiliUtils = bilibiliUtils;
3113
3102
  exports.bv2av = bv2av;
3103
+ exports.createAmagiClient = createAmagiClient;
3114
3104
  exports.createBilibiliRoutes = createBilibiliRoutes;
3115
3105
  exports.createBoundBilibiliApi = createBoundBilibiliApi;
3116
3106
  exports.createBoundDouyinApi = createBoundDouyinApi;
3117
3107
  exports.createBoundKuaishouApi = createBoundKuaishouApi;
3118
3108
  exports.createDouyinRoutes = createDouyinRoutes;
3109
+ exports.createErrorResponse = createErrorResponse;
3119
3110
  exports.createKuaishouRoutes = createKuaishouRoutes;
3111
+ exports.createSuccessResponse = createSuccessResponse;
3120
3112
  exports.default = Client;
3121
3113
  exports.douyin = douyin;
3122
3114
  exports.douyinApiUrls = douyinApiUrls;
3123
3115
  exports.douyinSign = douyinSign;
3124
3116
  exports.douyinUtils = douyinUtils;
3125
- exports.fetchBilibiliData = fetchBilibiliData;
3126
- exports.fetchDouyinData = fetchDouyinData;
3127
- exports.fetchKuaishouData = fetchKuaishouData;
3128
- exports.getBilibiliData = getBilibiliData2;
3129
- exports.getDouyinData = getDouyinData2;
3130
- exports.getKuaishouData = getKuaishouData2;
3117
+ exports.fetchData = fetchData;
3118
+ exports.fetchResponse = fetchResponse;
3119
+ exports.getBilibiliData = getBilibiliData;
3120
+ exports.getDouyinData = getDouyinData;
3121
+ exports.getHeadersAndData = getHeadersAndData;
3122
+ exports.getKuaishouData = getKuaishouData;
3123
+ exports.handleError = handleError;
3131
3124
  exports.httpLogger = httpLogger;
3132
3125
  exports.kuaishou = kuaishou;
3133
3126
  exports.kuaishouApiUrls = kuaishouApiUrls;
@@ -3135,7 +3128,10 @@ exports.kuaishouUtils = kuaishouUtils;
3135
3128
  exports.logMiddleware = logMiddleware;
3136
3129
  exports.logger = logger;
3137
3130
  exports.qtparam = qtparam;
3138
- exports.registerBilibiliRoutes = createDouyinRoutes;
3139
- exports.registerDouyinRoutes = createBilibiliRoutes;
3131
+ exports.registerBilibiliRoutes = createBilibiliRoutes;
3132
+ exports.registerDouyinRoutes = createDouyinRoutes;
3140
3133
  exports.registerKuaishouRoutes = createKuaishouRoutes;
3134
+ exports.validateBilibiliParams = validateBilibiliParams;
3135
+ exports.validateDouyinParams = validateDouyinParams;
3136
+ exports.validateKuaishouParams = validateKuaishouParams;
3141
3137
  exports.wbi_sign = wbi_sign;