@ikenxuan/amagi 5.9.0 → 5.10.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.
@@ -284,19 +284,18 @@ const getDouyinDefaultConfig = (cookie, requestConfig) => {
284
284
  */
285
285
  const getBilibiliDefaultConfig = (cookie, requestConfig) => {
286
286
  const defHeaders = {
287
- 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",
287
+ Accept: "application/json, text/plain, */*",
288
288
  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
289
- "Cache-Control": "max-age=0",
290
- Priority: "u=0, i",
291
- "Sec-Ch-Ua": "\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
289
+ "Accept-Encoding": "gzip, deflate, br",
290
+ Origin: "https://www.bilibili.com",
291
+ Referer: "https://www.bilibili.com/",
292
+ Priority: "u=1, i",
293
+ "Sec-Ch-Ua": "\"Microsoft Edge\";v=\"141\", \"Chromium\";v=\"141\", \"Not_A Brand\";v=\"24\"",
292
294
  "Sec-Ch-Ua-Mobile": "?0",
293
295
  "Sec-Ch-Ua-Platform": "\"Windows\"",
294
- "Sec-Fetch-Dest": "document",
295
- "Sec-Fetch-Mode": "navigate",
296
- "Sec-Fetch-Site": "none",
297
- "Sec-Fetch-User": "?1",
298
- "Upgrade-Insecure-Requests": "1",
299
- Referer: "https://www.bilibili.com/",
296
+ "Sec-Fetch-Dest": "empty",
297
+ "Sec-Fetch-Mode": "cors",
298
+ "Sec-Fetch-Site": "same-site",
300
299
  Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
301
300
  };
302
301
  return {
@@ -558,7 +557,7 @@ var BiLiBiLiAPI = class {
558
557
  return `https://api.bilibili.com/pgc/player/web/playurl?cid=${data$1.cid}&ep_id=${data$1.ep_id}`;
559
558
  }
560
559
  用户空间动态(data$1) {
561
- return `https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=${data$1.host_mid}&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,forwardListHidden,decorationCard,commentsNewVersion,onlyfansAssetsV2,ugcDelete,onlyfansQaCard`;
560
+ return `https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=${data$1.host_mid}&dm_img_switch=0&&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,forwardListHidden,decorationCard,commentsNewVersion,onlyfansAssetsV2,ugcDelete,onlyfansQaCard`;
562
561
  }
563
562
  动态详情(data$1) {
564
563
  return `https://api.bilibili.com/x/polymer/web-dynamic/v1/detail?id=${data$1.dynamic_id}&features=itemOpusStyle,opusBigCover,onlyfansVote,endFooterHidden,decorationCard,onlyfansAssetsV2,ugcDelete,onlyfansQaCard,editable,opusPrivateVisible,avatarAutoTheme`;
@@ -1180,9 +1179,18 @@ const DouyinCommentParamsSchema = zod.object({
1180
1179
  number: smartPositiveInteger("评论数量必须是正整数").optional().default(50),
1181
1180
  cursor: zod.coerce.number({ error: "游标必须是数字" }).int({ error: "游标必须是整数" }).min(0, { error: "游标不能小于0" }).default(0).optional()
1182
1181
  });
1182
+ const DouyinHotWordsParamsSchema = zod.object({
1183
+ methodType: zod.literal("热点词数据", { error: "方法类型必须是\"热点词数据\"" }),
1184
+ query: zod.string({ error: "搜索词必须是字符串" }).min(1, { error: "搜索词不能为空" })
1185
+ });
1183
1186
  const DouyinSearchParamsSchema = zod.object({
1184
- methodType: zod.enum(["热点词数据", "搜索数据"], { error: "方法类型必须是\"热点词数据\"或\"搜索数据\"" }),
1187
+ methodType: zod.literal("搜索数据", { error: "方法类型必须是\"搜索数据\"" }),
1185
1188
  query: zod.string({ error: "搜索词必须是字符串" }).min(1, { error: "搜索词不能为空" }),
1189
+ type: zod.enum([
1190
+ "综合",
1191
+ "用户",
1192
+ "视频"
1193
+ ], { error: "搜索类型必须是\"综合\"、\"用户\"或\"视频\"" }).optional().default("综合"),
1186
1194
  number: smartPositiveInteger("搜索数量必须是正整数").optional().default(10),
1187
1195
  search_id: zod.string({ error: "搜索ID必须是字符串" }).optional()
1188
1196
  });
@@ -1240,7 +1248,7 @@ const DouyinValidationSchemas = {
1240
1248
  评论数据: DouyinCommentParamsSchema,
1241
1249
  用户主页数据: DouyinUserParamsSchema,
1242
1250
  用户主页视频列表数据: DouyinUserParamsSchema,
1243
- 热点词数据: DouyinSearchParamsSchema,
1251
+ 热点词数据: DouyinHotWordsParamsSchema,
1244
1252
  搜索数据: DouyinSearchParamsSchema,
1245
1253
  音乐数据: DouyinMusicParamsSchema,
1246
1254
  直播间信息数据: DouyinLiveRoomParamsSchema,
@@ -1887,7 +1895,7 @@ const fetchBilibili = async (data$1, cookie, requestConfig) => {
1887
1895
  timeout: 1e4,
1888
1896
  ...requestConfig,
1889
1897
  headers: {
1890
- referer: "https://www.bilibili.com/",
1898
+ Referer: "https://www.bilibili.com/",
1891
1899
  ...defHeaders,
1892
1900
  ...requestConfig?.headers ?? {}
1893
1901
  }
@@ -2004,17 +2012,19 @@ const fetchBilibili = async (data$1, cookie, requestConfig) => {
2004
2012
  });
2005
2013
  }
2006
2014
  case "用户主页动态列表数据": {
2015
+ const { host_mid } = data$1;
2007
2016
  const customConfig = {
2008
2017
  ...baseRequestConfig,
2009
2018
  headers: {
2010
2019
  ...baseRequestConfig.headers,
2011
- ...(!requestConfig?.headers || !("referer" in requestConfig.headers)) && { referer: void 0 }
2020
+ ...requestConfig?.headers && ("referer" in requestConfig.headers || "Referer" in requestConfig.headers) ? {} : { Referer: `https://space.bilibili.com/${host_mid}` },
2021
+ Origin: "https://space.bilibili.com"
2012
2022
  }
2013
2023
  };
2014
- const { host_mid } = data$1;
2024
+ const wbiSignQuery = await wbi_sign(bilibiliApiUrls.用户空间动态({ host_mid }), baseRequestConfig.headers?.cookie);
2015
2025
  return await GlobalGetData$3(data$1.methodType, {
2016
2026
  ...customConfig,
2017
- url: bilibiliApiUrls.用户空间动态({ host_mid })
2027
+ url: bilibiliApiUrls.用户空间动态({ host_mid }) + wbiSignQuery
2018
2028
  });
2019
2029
  }
2020
2030
  case "动态详情数据": {
@@ -2144,7 +2154,8 @@ const fetchBilibili = async (data$1, cookie, requestConfig) => {
2144
2154
  * @param options - 网络请求配置
2145
2155
  * @returns
2146
2156
  */
2147
- const GlobalGetData$3 = async (type, options) => {
2157
+ const GlobalGetData$3 = async (type, options, retryCount = 0) => {
2158
+ const MAX_RETRIES = 3;
2148
2159
  let warningMessage = "";
2149
2160
  try {
2150
2161
  const result = await fetchData(options);
@@ -2169,11 +2180,13 @@ const GlobalGetData$3 = async (type, options) => {
2169
2180
  throw riskError;
2170
2181
  }
2171
2182
  if (result.code !== 0 || !result.data || typeof result.data === "object" && Object.keys(result.data).length === 0) {
2183
+ if (result.code === -412 && retryCount < MAX_RETRIES) return await GlobalGetData$3(type, options, retryCount + 1);
2172
2184
  const errorMessage = bilibiliErrorCodeMap[result.code] || typeof result.data === "object" && Object.keys(result.data).length === 0 && "请求成功但无返回内容" || (result.message ?? "未知错误");
2173
2185
  const Err = {
2174
2186
  errorDescription: `获取响应数据失败!原因:${errorMessage}!`,
2175
2187
  requestType: type ?? "未知请求类型",
2176
- requestUrl: options.url
2188
+ requestUrl: options.url,
2189
+ responseCode: result.code
2177
2190
  };
2178
2191
  warningMessage = `
2179
2192
  获取响应数据失败!原因:${logger.yellow(errorMessage)}
@@ -3125,12 +3138,68 @@ var DouyinAPI = class {
3125
3138
  }
3126
3139
  /**
3127
3140
  * 获取搜索数据的接口地址
3128
- * @param data - 请求参数,包含query、number、search_id等
3141
+ * @param data - 请求参数,包含query、type、number、search_id等
3129
3142
  * @returns 完整的接口URL
3130
3143
  */
3131
3144
  搜索(data$1) {
3132
- return `https://www.douyin.com/aweme/v1/web/general/search/stream/?${buildQueryString({
3133
- ...this.getBaseParams(),
3145
+ const searchType = data$1.type ?? "综合";
3146
+ const { verifyFp, fp: fp$1, ...baseParamsWithoutFp } = this.getBaseParams();
3147
+ if (searchType === "用户") return `https://www.douyin.com/aweme/v1/web/discover/search/?${buildQueryString({
3148
+ ...baseParamsWithoutFp,
3149
+ count: data$1.number ?? 10,
3150
+ disable_rs: "0",
3151
+ from_group_id: "",
3152
+ is_filter_search: "0",
3153
+ keyword: data$1.query,
3154
+ list_type: "single",
3155
+ need_filter_settings: "1",
3156
+ offset: "0",
3157
+ pc_libra_divert: "Windows",
3158
+ pc_search_top_1_params: "{\"enable_ai_search_top_1\":1}",
3159
+ query_correct_type: "1",
3160
+ round_trip_time: "250",
3161
+ screen_height: "1310",
3162
+ screen_width: "2328",
3163
+ search_channel: "aweme_user_web",
3164
+ search_source: "switch_tab",
3165
+ support_dash: "1",
3166
+ support_h265: "1",
3167
+ version_code: "170400",
3168
+ version_name: "17.4.0",
3169
+ webid: "7521399115230610959",
3170
+ ...data$1.search_id && { search_id: data$1.search_id }
3171
+ })}`;
3172
+ else if (searchType === "视频") {
3173
+ const baseUrl = "https://www.douyin.com/aweme/v1/web/search/item/";
3174
+ const { verifyFp: verifyFp$1, fp: fp$2, ...baseParamsWithoutFp$1 } = this.getBaseParams();
3175
+ return `${baseUrl}?${buildQueryString({
3176
+ ...baseParamsWithoutFp$1,
3177
+ count: data$1.number ?? 10,
3178
+ disable_rs: "0",
3179
+ enable_history: "1",
3180
+ from_group_id: "",
3181
+ is_filter_search: "0",
3182
+ keyword: data$1.query,
3183
+ list_type: "single",
3184
+ need_filter_settings: "1",
3185
+ offset: "0",
3186
+ pc_libra_divert: "Windows",
3187
+ pc_search_top_1_params: "{\"enable_ai_search_top_1\":1}",
3188
+ query_correct_type: "1",
3189
+ round_trip_time: "50",
3190
+ screen_height: "1310",
3191
+ screen_width: "2328",
3192
+ search_channel: "aweme_video_web",
3193
+ search_source: "switch_tab",
3194
+ support_dash: "1",
3195
+ support_h265: "1",
3196
+ version_code: "170400",
3197
+ version_name: "17.4.0",
3198
+ webid: "7521399115230610959",
3199
+ ...data$1.search_id && { search_id: data$1.search_id }
3200
+ })}`;
3201
+ } else return `https://www.douyin.com/aweme/v1/web/general/search/stream/?${buildQueryString({
3202
+ ...baseParamsWithoutFp,
3134
3203
  count: data$1.number ?? 10,
3135
3204
  disable_rs: "0",
3136
3205
  enable_history: "1",
@@ -3448,10 +3517,7 @@ const DouyinData = async (data$1, cookie, requestConfig) => {
3448
3517
  });
3449
3518
  }
3450
3519
  case "热点词数据": {
3451
- const url$1 = douyinApiUrls$1.热点词({
3452
- query: data$1.query,
3453
- number: data$1.number ?? 10
3454
- });
3520
+ const url$1 = douyinApiUrls$1.热点词({ query: data$1.query });
3455
3521
  const customConfig = {
3456
3522
  ...baseRequestConfig,
3457
3523
  headers: {
@@ -3469,49 +3535,182 @@ const DouyinData = async (data$1, cookie, requestConfig) => {
3469
3535
  const maxPageSize = 15;
3470
3536
  let fetchedSearchList = [];
3471
3537
  let tmpresp = null;
3538
+ const searchType = data$1.type ?? "综合";
3539
+ const refererUrl = searchType === "用户" ? `https://www.douyin.com/search/${encodeURIComponent(String(data$1.query))}?type=user` : searchType === "视频" ? `https://www.douyin.com/search/${encodeURIComponent(String(data$1.query))}?type=video` : `https://www.douyin.com/root/search/${encodeURIComponent(String(data$1.query))}`;
3472
3540
  const customConfig = {
3473
3541
  ...baseRequestConfig,
3474
3542
  headers: {
3475
3543
  ...baseRequestConfig.headers,
3476
- ...(!requestConfig?.headers || !("Referer" in requestConfig.headers)) && { Referer: `https://www.douyin.com/root/search/${encodeURIComponent(String(data$1.query))}` }
3544
+ ...(!requestConfig?.headers || !("Referer" in requestConfig.headers)) && { referer: refererUrl }
3477
3545
  }
3478
3546
  };
3547
+ const isUserSearch = searchType === "用户";
3548
+ const isVideoSearch = searchType === "视频";
3549
+ let isFirstRequest = true;
3479
3550
  while (fetchedSearchList.length < Number(data$1.number ?? 10)) {
3480
3551
  const requestCount = Math.min(Number(data$1.number ?? 50) - fetchedSearchList.length, maxPageSize);
3481
3552
  const url$1 = douyinApiUrls$1.搜索({
3482
3553
  query: data$1.query,
3554
+ type: data$1.type,
3483
3555
  number: requestCount,
3484
3556
  search_id: search_id === "" ? void 0 : search_id
3485
3557
  });
3486
3558
  const raw = await GlobalGetData$2(data$1.methodType, {
3487
3559
  ...customConfig,
3488
- url: buildSignedUrl(url$1, "x_bogus", userAgent)
3560
+ url: url$1
3489
3561
  });
3490
- const responses = filterSearchResponses(typeof raw === "string" ? parseDouyinMultiJson(raw) : [raw]);
3491
- if (responses.length === 0) {
3492
- logger.warn("抖音搜索返回无有效数据,疑似触发反爬\n你的抖音ck可能已经失效!\n请求类型:" + data$1.methodType);
3493
- return {
3494
- success: false,
3495
- amagiError: "抖音搜索返回无有效数据,疑似触发反爬\n你的抖音ck可能已经失效!\n请求类型:" + data$1.methodType
3496
- };
3497
- }
3498
- for (const resp of responses) {
3499
- if (Array.isArray(resp.data) && resp.data.length > 0) fetchedSearchList.push(...resp.data);
3500
- tmpresp = resp;
3501
- search_id = resp.log_pb?.impr_id ?? search_id;
3502
- }
3503
- if (fetchedSearchList.length === 0) {
3504
- logger.warn("抖音搜索API请求成功,但返回数据长度为0,\n此问题暂时无法处理,也可能被风控!\n请求类型:" + data$1.methodType);
3505
- return {
3506
- success: false,
3507
- amagiError: "抖音搜索API请求成功,但返回数据长度为0,\n此问题暂时无法处理,也可能被风控!\n请求类型:" + data$1.methodType
3508
- };
3562
+ if (isUserSearch) {
3563
+ if (!raw || typeof raw !== "object") {
3564
+ const Err = {
3565
+ errorDescription: "抖音用户搜索返回无有效数据,疑似触发反爬机制,你的抖音Cookie可能已经失效!",
3566
+ requestType: data$1.methodType ?? "未知请求类型",
3567
+ requestUrl: url$1
3568
+ };
3569
+ const warningMessage = `
3570
+ 获取响应数据失败!原因:${logger.yellow("用户搜索返回无有效数据,疑似触发反爬机制")}
3571
+ 请求类型:「${data$1.methodType}」
3572
+ 搜索关键词:「${data$1.query}」
3573
+ 请求URL:${url$1}
3574
+ `;
3575
+ !isFirstRequest && logger.warn(warningMessage);
3576
+ return {
3577
+ code: douoyinAPIErrorCode.COOKIE,
3578
+ data: raw,
3579
+ amagiError: Err,
3580
+ amagiMessage: warningMessage
3581
+ };
3582
+ }
3583
+ const userList = raw.user_list;
3584
+ if (isFirstRequest && (!userList || userList.length === 0)) {
3585
+ const Err = {
3586
+ errorDescription: "抖音用户搜索接口第一次请求就返回空数组,可能该关键词无搜索结果或触发风控限制,你的抖音Cookie可能已经失效!",
3587
+ requestType: data$1.methodType ?? "未知请求类型",
3588
+ requestUrl: url$1
3589
+ };
3590
+ const warningMessage = `
3591
+ 获取响应数据失败!原因:${logger.yellow("用户搜索接口第一次请求就返回空数组,你的抖音Cookie可能已经失效!")}
3592
+ 请求类型:「${data$1.methodType}」
3593
+ 搜索关键词:「${data$1.query}」
3594
+ 请求URL:${url$1}
3595
+ `;
3596
+ logger.warn(warningMessage);
3597
+ return {
3598
+ data: raw,
3599
+ amagiError: Err,
3600
+ amagiMessage: warningMessage
3601
+ };
3602
+ }
3603
+ if (Array.isArray(userList) && userList.length > 0) fetchedSearchList.push(...userList);
3604
+ tmpresp = raw;
3605
+ search_id = raw.rid ?? search_id;
3606
+ if (typeof raw.has_more === "number" && raw.has_more === 0) break;
3607
+ if (!userList || userList.length === 0) break;
3608
+ } else if (isVideoSearch) {
3609
+ if (!raw || typeof raw !== "object") {
3610
+ const Err = {
3611
+ errorDescription: "抖音视频搜索接口返回无有效数据,疑似触发反爬机制,你的抖音Cookie可能已经失效,你的抖音Cookie可能已经失效!",
3612
+ requestType: data$1.methodType ?? "未知请求类型",
3613
+ requestUrl: url$1
3614
+ };
3615
+ const warningMessage = `
3616
+ 获取响应数据失败!原因:${logger.yellow("视频搜索接口返回无有效数据,疑似触发反爬机制,你的抖音Cookie可能已经失效!")}
3617
+ 请求类型:「${data$1.methodType}」
3618
+ 搜索关键词:「${data$1.query}」
3619
+ 请求URL:${url$1}
3620
+ `;
3621
+ !isFirstRequest && logger.warn(warningMessage);
3622
+ return {
3623
+ code: douoyinAPIErrorCode.COOKIE,
3624
+ data: raw,
3625
+ amagiError: Err,
3626
+ amagiMessage: warningMessage
3627
+ };
3628
+ }
3629
+ const videoList = raw.data;
3630
+ if (isFirstRequest && (!videoList || videoList.length === 0)) {
3631
+ const Err = {
3632
+ errorDescription: "抖音视频搜索接口第一次请求就返回空数组,可能该关键词无搜索结果或触发风控限制,你的抖音Cookie可能已经失效!",
3633
+ requestType: data$1.methodType ?? "未知请求类型",
3634
+ requestUrl: url$1
3635
+ };
3636
+ const warningMessage = `
3637
+ 获取响应数据失败!原因:${logger.yellow("视频搜索接口第一次请求就返回空数组,你的抖音Cookie可能已经失效!")}
3638
+ 请求类型:「${data$1.methodType}」
3639
+ 搜索关键词:「${data$1.query}」
3640
+ 请求URL:${url$1}
3641
+ `;
3642
+ logger.warn(warningMessage);
3643
+ return {
3644
+ data: raw,
3645
+ amagiError: Err,
3646
+ amagiMessage: warningMessage
3647
+ };
3648
+ }
3649
+ if (Array.isArray(videoList) && videoList.length > 0) fetchedSearchList.push(...videoList);
3650
+ tmpresp = raw;
3651
+ search_id = raw.log_pb?.impr_id ?? search_id;
3652
+ if (typeof raw.has_more === "number" && raw.has_more === 0) break;
3653
+ if (!videoList || videoList.length === 0) break;
3654
+ } else {
3655
+ const responses = filterSearchResponses(typeof raw === "string" ? parseDouyinMultiJson(raw) : [raw]);
3656
+ if (responses.length === 0) {
3657
+ const Err = {
3658
+ errorDescription: "抖音综合搜索接口返回无有效数据,疑似触发反爬机制,你的抖音Cookie可能已经失效!",
3659
+ requestType: data$1.methodType ?? "未知请求类型",
3660
+ requestUrl: url$1
3661
+ };
3662
+ const warningMessage = `
3663
+ 获取响应数据失败!原因:${logger.yellow("综合搜索接口返回无有效数据,疑似触发反爬机制,你的抖音Cookie可能已经失效!")}
3664
+ 请求类型:「${data$1.methodType}」
3665
+ 搜索关键词:「${data$1.query}」
3666
+ 请求URL:${url$1}
3667
+ `;
3668
+ !isFirstRequest && logger.warn(warningMessage);
3669
+ return {
3670
+ code: douoyinAPIErrorCode.COOKIE,
3671
+ data: raw,
3672
+ amagiError: Err,
3673
+ amagiMessage: warningMessage
3674
+ };
3675
+ }
3676
+ for (const resp of responses) {
3677
+ if (Array.isArray(resp.data) && resp.data.length > 0) fetchedSearchList.push(...resp.data);
3678
+ tmpresp = resp;
3679
+ search_id = resp.log_pb?.impr_id ?? search_id;
3680
+ }
3681
+ if (isFirstRequest && fetchedSearchList.length === 0) {
3682
+ const Err = {
3683
+ errorDescription: "抖音综合搜索接口第一次请求就返回空数组,可能该关键词无搜索结果或触发风控限制,你的抖音Cookie可能已经失效!",
3684
+ requestType: data$1.methodType ?? "未知请求类型",
3685
+ requestUrl: url$1
3686
+ };
3687
+ const warningMessage = `
3688
+ 获取响应数据失败!原因:${logger.yellow("综合搜索索接第一次请求就返回空数组,你的抖音Cookie可能已经失效!")}
3689
+ 请求类型:「${data$1.methodType}」
3690
+ 搜索关键词:「${data$1.query}」
3691
+ 请求URL:${url$1}
3692
+ `;
3693
+ logger.warn(warningMessage);
3694
+ return {
3695
+ data: raw,
3696
+ amagiError: Err,
3697
+ amagiMessage: warningMessage
3698
+ };
3699
+ }
3700
+ if (tmpresp && typeof tmpresp.has_more === "number" && tmpresp.has_more === 0) break;
3509
3701
  }
3510
- if (tmpresp && typeof tmpresp.has_more === "number" && tmpresp.has_more === 0) break;
3702
+ isFirstRequest = false;
3511
3703
  }
3512
- return {
3704
+ const slicedList = Number(data$1.number ?? 10) === 0 ? [] : fetchedSearchList.slice(0, Number(data$1.number ?? 10));
3705
+ return isUserSearch ? {
3706
+ ...tmpresp ?? {},
3707
+ user_list: slicedList
3708
+ } : isVideoSearch ? {
3709
+ ...tmpresp ?? {},
3710
+ data: slicedList
3711
+ } : {
3513
3712
  ...tmpresp ?? {},
3514
- data: Number(data$1.number ?? 10) === 0 ? [] : fetchedSearchList.slice(0, Number(data$1.number ?? 10))
3713
+ data: slicedList
3515
3714
  };
3516
3715
  }
3517
3716
  case "动态表情数据": {
@@ -4761,7 +4960,7 @@ let DynamicType = /* @__PURE__ */ function(DynamicType$1) {
4761
4960
 
4762
4961
  //#endregion
4763
4962
  //#region src/index.ts
4764
- const VERSION = "5.9.0";
4963
+ const VERSION = "5.10.0";
4765
4964
  /**
4766
4965
  * @deprecated 请使用 createAmagiClient 替代
4767
4966
  */
@@ -4797,4 +4996,4 @@ const Client = CreateApp;
4797
4996
  const amagi = Client;
4798
4997
 
4799
4998
  //#endregion
4800
- export { AdditionalType, ApiError, BilibiliArticleCardParamsSchema, BilibiliArticleInfoParamsSchema, BilibiliArticleParamsSchema, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliColumnInfoParamsSchema, BilibiliCommentParamsSchema, BilibiliCommentReplyParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliMethodRoutes, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CommentType, CreateApp, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinDanmakuParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinLiveRoomParamsSchema, DouyinMethodRoutes, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas, DouyinWorkParamsSchema, DynamicType, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouMethodRoutes, KuaishouValidationSchemas, KuaishouVideoParamsSchema, MajorType, ValidationError, XiaohongshuMethodRoutes, XiaohongshuValidationSchemas, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBilibiliRoutes as registerBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createBoundXiaohongshuApi, createDouyinRoutes, createDouyinRoutes as registerDouyinRoutes, createErrorResponse, createKuaishouRoutes, createKuaishouRoutes as registerKuaishouRoutes, createSuccessResponse, createXiaohongshuRoutes, createXiaohongshuRoutes as registerXiaohongshuRoutes, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchData, fetchResponse, getBilibiliData, getDouyinData, getHeadersAndData, getKuaishouData, handleError, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, validateXiaohongshuParams, wbi_sign, xiaohongshu, xiaohongshuApiUrls, xiaohongshuSign, xiaohongshuUtils };
4999
+ export { AdditionalType, ApiError, BilibiliArticleCardParamsSchema, BilibiliArticleInfoParamsSchema, BilibiliArticleParamsSchema, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliColumnInfoParamsSchema, BilibiliCommentParamsSchema, BilibiliCommentReplyParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliMethodRoutes, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CommentType, CreateApp, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinDanmakuParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinHotWordsParamsSchema, DouyinLiveRoomParamsSchema, DouyinMethodRoutes, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas, DouyinWorkParamsSchema, DynamicType, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouMethodRoutes, KuaishouValidationSchemas, KuaishouVideoParamsSchema, MajorType, ValidationError, XiaohongshuMethodRoutes, XiaohongshuValidationSchemas, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBilibiliRoutes as registerBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createBoundXiaohongshuApi, createDouyinRoutes, createDouyinRoutes as registerDouyinRoutes, createErrorResponse, createKuaishouRoutes, createKuaishouRoutes as registerKuaishouRoutes, createSuccessResponse, createXiaohongshuRoutes, createXiaohongshuRoutes as registerXiaohongshuRoutes, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchData, fetchResponse, getBilibiliData, getDouyinData, getHeadersAndData, getKuaishouData, handleError, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, validateXiaohongshuParams, wbi_sign, xiaohongshu, xiaohongshuApiUrls, xiaohongshuSign, xiaohongshuUtils };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikenxuan/amagi",
3
- "version": "5.9.0",
3
+ "version": "5.10.0",
4
4
  "description": "抖音、B站的 web 端相关数据接口基于 Node.js 的实现",
5
5
  "keywords": [
6
6
  "douyin",