@ikenxuan/amagi 5.3.0 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,11 @@ var getPackageLogsPath = () => {
44
44
  return path__default.default.join(packageRoot, "logs");
45
45
  };
46
46
  var logsPath = getPackageLogsPath();
47
+ var getLogLevel = () => {
48
+ const logLevel = process.env.LOG_LEVEL || "info";
49
+ return logLevel;
50
+ };
51
+ var currentLogLevel = getLogLevel();
47
52
  log4js__default.default.configure({
48
53
  appenders: {
49
54
  console: {
@@ -84,7 +89,7 @@ log4js__default.default.configure({
84
89
  }
85
90
  },
86
91
  categories: {
87
- default: { appenders: ["console", "command"], level: "info" },
92
+ default: { appenders: ["console", "command"], level: currentLogLevel },
88
93
  http: { appenders: ["httpConsole", "httpRequest"], level: "debug" }
89
94
  },
90
95
  pm2: true
@@ -1741,6 +1746,43 @@ var DouyinAPI = class {
1741
1746
  };
1742
1747
  return `${baseUrl}?${buildQueryString(params)}`;
1743
1748
  }
1749
+ /**
1750
+ * 获取弹幕数据的接口地址
1751
+ * @param data - 请求参数,包含group_id、item_id等
1752
+ * @returns 完整的接口URL
1753
+ */
1754
+ \u5F39\u5E55(data2) {
1755
+ const baseUrl = "https://www-hj.douyin.com/aweme/v1/web/danmaku/get_v2/";
1756
+ const params = {
1757
+ ...this.getBaseParams(),
1758
+ app_name: "aweme",
1759
+ format: "json",
1760
+ group_id: data2.aweme_id,
1761
+ item_id: data2.aweme_id,
1762
+ start_time: data2.start_time ?? "0",
1763
+ end_time: data2.end_time ?? "32000",
1764
+ duration: data2.duration,
1765
+ update_version_code: "170400",
1766
+ pc_libra_divert: "Windows",
1767
+ support_h265: "1",
1768
+ support_dash: "1",
1769
+ version_code: "170400",
1770
+ version_name: "17.4.0",
1771
+ screen_width: "2328",
1772
+ screen_height: "1310",
1773
+ browser_name: "Edge",
1774
+ browser_version: "140.0.0.0",
1775
+ engine_name: "Blink",
1776
+ engine_version: "140.0.0.0",
1777
+ downlink: "1.55",
1778
+ round_trip_time: "200",
1779
+ webid: "7487210762873685515",
1780
+ msToken: douyinSign.Mstoken(116),
1781
+ verifyFp: fp,
1782
+ fp
1783
+ };
1784
+ return `${baseUrl}?${buildQueryString(params)}`;
1785
+ }
1744
1786
  };
1745
1787
  var createDouyinApiUrls = (userAgent) => {
1746
1788
  return new DouyinAPI(userAgent);
@@ -1988,6 +2030,84 @@ var DouyinData = async (data2, cookie, requestConfig) => {
1988
2030
  });
1989
2031
  return LoginQrcodeStatusData;
1990
2032
  }
2033
+ case "\u5F39\u5E55\u6570\u636E": {
2034
+ const MAX_SEGMENT_DURATION = 32e3;
2035
+ const startTime = data2.start_time ?? 0;
2036
+ const endTime = data2.end_time ?? data2.duration;
2037
+ const totalDuration = endTime - startTime;
2038
+ if (totalDuration <= MAX_SEGMENT_DURATION) {
2039
+ const url = douyinApiUrls3.\u5F39\u5E55({
2040
+ aweme_id: data2.aweme_id,
2041
+ start_time: startTime,
2042
+ end_time: endTime,
2043
+ duration: data2.duration
2044
+ });
2045
+ const DanmakuData = await GlobalGetData2(data2.methodType, {
2046
+ ...baseRequestConfig,
2047
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
2048
+ });
2049
+ return DanmakuData;
2050
+ }
2051
+ const segments = [];
2052
+ let currentStart = startTime;
2053
+ while (currentStart < endTime) {
2054
+ const currentEnd = Math.min(currentStart + MAX_SEGMENT_DURATION, endTime);
2055
+ segments.push({ start: currentStart, end: currentEnd });
2056
+ currentStart = currentEnd;
2057
+ }
2058
+ logger.debug(`\u5F39\u5E55\u6570\u636E\u9700\u8981\u5206${segments.length}\u6BB5\u83B7\u53D6\uFF0C\u603B\u65F6\u957F\uFF1A${totalDuration}ms`);
2059
+ const segmentPromises = segments.map(async (segment, index) => {
2060
+ const url = douyinApiUrls3.\u5F39\u5E55({
2061
+ aweme_id: data2.aweme_id,
2062
+ start_time: segment.start,
2063
+ end_time: segment.end,
2064
+ duration: data2.duration
2065
+ });
2066
+ try {
2067
+ const segmentData = await GlobalGetData2(`${data2.methodType}-\u6BB5${index + 1}`, {
2068
+ ...baseRequestConfig,
2069
+ url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
2070
+ });
2071
+ logger.debug(`\u5F39\u5E55\u7B2C${index + 1}\u6BB5\u83B7\u53D6\u6210\u529F (${segment.start}ms-${segment.end}ms)`);
2072
+ return segmentData;
2073
+ } catch (error) {
2074
+ logger.debug(`\u5F39\u5E55\u7B2C${index + 1}\u6BB5\u83B7\u53D6\u5931\u8D25 (${segment.start}ms-${segment.end}ms):`, error);
2075
+ return null;
2076
+ }
2077
+ });
2078
+ const segmentResults = await Promise.all(segmentPromises);
2079
+ const mergedDanmakuList = [];
2080
+ let totalCount = 0;
2081
+ let finalStartTime = startTime;
2082
+ let finalEndTime = endTime;
2083
+ let finalExtra = null;
2084
+ let finalLogPb = null;
2085
+ let finalStatusCode = 0;
2086
+ segmentResults.forEach((segmentData, index) => {
2087
+ if (segmentData && segmentData.danmaku_list) {
2088
+ mergedDanmakuList.push(...segmentData.danmaku_list);
2089
+ totalCount += segmentData.total || 0;
2090
+ if (index === 0) {
2091
+ finalExtra = segmentData.extra;
2092
+ finalLogPb = segmentData.log_pb;
2093
+ finalStatusCode = segmentData.status_code;
2094
+ }
2095
+ }
2096
+ });
2097
+ mergedDanmakuList.sort((a, b) => (a.offset_time || 0) - (b.offset_time || 0));
2098
+ const finalDanmakuData = {
2099
+ danmaku_list: mergedDanmakuList,
2100
+ start_time: finalStartTime,
2101
+ end_time: finalEndTime,
2102
+ total: mergedDanmakuList.length,
2103
+ // 使用实际合并后的数量
2104
+ status_code: finalStatusCode,
2105
+ extra: finalExtra,
2106
+ log_pb: finalLogPb
2107
+ };
2108
+ logger.debug(`\u5F39\u5E55\u6570\u636E\u5408\u5E76\u5B8C\u6210\uFF0C\u5171\u83B7\u53D6${mergedDanmakuList.length}\u6761\u5F39\u5E55`);
2109
+ return finalDanmakuData;
2110
+ }
1991
2111
  default: {
1992
2112
  logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
1993
2113
  return null;
@@ -2234,46 +2354,87 @@ var smartPositiveInteger = (errorMessage) => {
2234
2354
 
2235
2355
  // src/validation/douyin.ts
2236
2356
  var DouyinWorkParamsSchema = zod.z.object({
2237
- methodType: zod.z.enum(["\u6587\u5B57\u4F5C\u54C1\u6570\u636E", "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", "\u805A\u5408\u89E3\u6790"]),
2238
- aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2357
+ methodType: zod.z.enum(["\u6587\u5B57\u4F5C\u54C1\u6570\u636E", "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", "\u805A\u5408\u89E3\u6790"], {
2358
+ invalid_type_error: "\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F\u6307\u5B9A\u7684\u679A\u4E3E\u503C\u4E4B\u4E00",
2359
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2360
+ }),
2361
+ aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2239
2362
  });
2240
2363
  var DouyinCommentParamsSchema = zod.z.object({
2241
- methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E"),
2242
- aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A"),
2364
+ methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u8BC4\u8BBA\u6570\u636E"' }),
2365
+ aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A"),
2243
2366
  number: smartPositiveInteger("\u8BC4\u8BBA\u6570\u91CF\u5FC5\u987B\u662F\u6B63\u6574\u6570").optional().default(50),
2244
- cursor: zod.z.coerce.number().int().min(0).default(0).optional()
2367
+ cursor: zod.z.coerce.number({ invalid_type_error: "\u6E38\u6807\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u6E38\u6807\u5FC5\u987B\u662F\u6574\u6570" }).min(0, "\u6E38\u6807\u4E0D\u80FD\u5C0F\u4E8E0").default(0).optional()
2245
2368
  });
2246
2369
  var DouyinSearchParamsSchema = zod.z.object({
2247
- methodType: zod.z.enum(["\u70ED\u70B9\u8BCD\u6570\u636E", "\u641C\u7D22\u6570\u636E"]),
2248
- query: zod.z.string({ required_error: "\u641C\u7D22\u8BCD\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u641C\u7D22\u8BCD\u4E0D\u80FD\u4E3A\u7A7A"),
2370
+ methodType: zod.z.enum(["\u70ED\u70B9\u8BCD\u6570\u636E", "\u641C\u7D22\u6570\u636E"], {
2371
+ invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u70ED\u70B9\u8BCD\u6570\u636E"\u6216"\u641C\u7D22\u6570\u636E"',
2372
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2373
+ }),
2374
+ query: zod.z.string({ required_error: "\u641C\u7D22\u8BCD\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u641C\u7D22\u8BCD\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u641C\u7D22\u8BCD\u4E0D\u80FD\u4E3A\u7A7A"),
2249
2375
  number: smartPositiveInteger("\u641C\u7D22\u6570\u91CF\u5FC5\u987B\u662F\u6B63\u6574\u6570").optional().default(10),
2250
- search_id: zod.z.string().optional()
2376
+ search_id: zod.z.string({ invalid_type_error: "\u641C\u7D22ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).optional()
2251
2377
  });
2252
2378
  var DouyinCommentReplyParamsSchema = zod.z.object({
2253
- methodType: zod.z.literal("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
2254
- aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A"),
2255
- comment_id: zod.z.string({ required_error: "\u8BC4\u8BBAID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u8BC4\u8BBAID\u4E0D\u80FD\u4E3A\u7A7A"),
2379
+ methodType: zod.z.literal("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"' }),
2380
+ aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A"),
2381
+ comment_id: zod.z.string({ required_error: "\u8BC4\u8BBAID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u8BC4\u8BBAID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u8BC4\u8BBAID\u4E0D\u80FD\u4E3A\u7A7A"),
2256
2382
  number: smartPositiveInteger("\u8BC4\u8BBA\u6570\u91CF\u5FC5\u987B\u662F\u6B63\u6574\u6570").optional().default(5),
2257
- cursor: zod.z.coerce.number().int().min(0).default(0).optional()
2383
+ cursor: zod.z.coerce.number({ invalid_type_error: "\u6E38\u6807\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u6E38\u6807\u5FC5\u987B\u662F\u6574\u6570" }).min(0, "\u6E38\u6807\u4E0D\u80FD\u5C0F\u4E8E0").default(0).optional()
2258
2384
  });
2259
2385
  var DouyinUserParamsSchema = zod.z.object({
2260
- methodType: zod.z.enum(["\u7528\u6237\u4E3B\u9875\u6570\u636E", "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"]),
2261
- sec_uid: zod.z.string({ required_error: "\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A")
2386
+ methodType: zod.z.enum(["\u7528\u6237\u4E3B\u9875\u6570\u636E", "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"], {
2387
+ invalid_type_error: "\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F\u6307\u5B9A\u7684\u679A\u4E3E\u503C\u4E4B\u4E00",
2388
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2389
+ }),
2390
+ sec_uid: zod.z.string({ required_error: "\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u7528\u6237ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A")
2262
2391
  });
2263
2392
  var DouyinMusicParamsSchema = zod.z.object({
2264
- methodType: zod.z.literal("\u97F3\u4E50\u6570\u636E"),
2265
- music_id: zod.z.string({ required_error: "\u97F3\u4E50ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u97F3\u4E50ID\u4E0D\u80FD\u4E3A\u7A7A")
2393
+ methodType: zod.z.literal("\u97F3\u4E50\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u97F3\u4E50\u6570\u636E"' }),
2394
+ music_id: zod.z.string({ required_error: "\u97F3\u4E50ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u97F3\u4E50ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u97F3\u4E50ID\u4E0D\u80FD\u4E3A\u7A7A")
2266
2395
  });
2267
2396
  var DouyinQrcodeParamsSchema = zod.z.object({
2268
- methodType: zod.z.literal("\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E"),
2269
- verify_fp: zod.z.string({ required_error: "fp\u6307\u7EB9\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "fp\u6307\u7EB9\u4E0D\u80FD\u4E3A\u7A7A")
2397
+ methodType: zod.z.literal("\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E"' }),
2398
+ verify_fp: zod.z.string({ required_error: "fp\u6307\u7EB9\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "fp\u6307\u7EB9\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "fp\u6307\u7EB9\u4E0D\u80FD\u4E3A\u7A7A")
2270
2399
  });
2271
2400
  var DouyinEmojiListParamsSchema = zod.z.object({
2272
- methodType: zod.z.literal("Emoji\u6570\u636E")
2401
+ methodType: zod.z.literal("Emoji\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"Emoji\u6570\u636E"' })
2273
2402
  });
2274
2403
  var DouyinEmojiProParamsSchema = zod.z.object({
2275
- methodType: zod.z.literal("\u52A8\u6001\u8868\u60C5\u6570\u636E")
2404
+ methodType: zod.z.literal("\u52A8\u6001\u8868\u60C5\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u52A8\u6001\u8868\u60C5\u6570\u636E"' })
2276
2405
  });
2406
+ var DouyinDanmakuParamsSchema = zod.z.object({
2407
+ methodType: zod.z.literal("\u5F39\u5E55\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u5F39\u5E55\u6570\u636E"' }),
2408
+ aweme_id: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A"),
2409
+ start_time: zod.z.coerce.number({ invalid_type_error: "\u5F00\u59CB\u65F6\u95F4\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u5F00\u59CB\u65F6\u95F4\u5FC5\u987B\u662F\u6574\u6570" }).min(0, "\u5F00\u59CB\u65F6\u95F4\u4E0D\u80FD\u5C0F\u4E8E0").optional(),
2410
+ end_time: zod.z.coerce.number({ invalid_type_error: "\u7ED3\u675F\u65F6\u95F4\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u7ED3\u675F\u65F6\u95F4\u5FC5\u987B\u662F\u6574\u6570" }).min(0, "\u7ED3\u675F\u65F6\u95F4\u4E0D\u80FD\u5C0F\u4E8E0").optional(),
2411
+ duration: zod.z.number({
2412
+ required_error: "\u89C6\u9891\u65F6\u957F\u4E0D\u80FD\u4E3A\u7A7A",
2413
+ invalid_type_error: "\u89C6\u9891\u65F6\u957F\u5FC5\u987B\u662F\u6570\u5B57"
2414
+ }).int({ message: "\u89C6\u9891\u65F6\u957F\u5FC5\u987B\u662F\u6574\u6570" }).min(0, "\u89C6\u9891\u65F6\u957F\u4E0D\u80FD\u5C0F\u4E8E0")
2415
+ }).refine(
2416
+ (data2) => {
2417
+ if (data2.end_time !== void 0) {
2418
+ return data2.end_time <= data2.duration;
2419
+ }
2420
+ return true;
2421
+ },
2422
+ {
2423
+ message: "\u83B7\u53D6\u5F39\u5E55\u533A\u95F4\u7684\u7ED3\u675F\u65F6\u95F4\u4E0D\u80FD\u8D85\u8FC7\u89C6\u9891\u603B\u65F6\u957F",
2424
+ path: ["end_time"]
2425
+ }
2426
+ ).refine(
2427
+ (data2) => {
2428
+ if (data2.start_time !== void 0 && data2.end_time !== void 0) {
2429
+ return data2.start_time < data2.end_time;
2430
+ }
2431
+ return true;
2432
+ },
2433
+ {
2434
+ message: "\u83B7\u53D6\u5F39\u5E55\u533A\u95F4\u7684\u5F00\u59CB\u65F6\u95F4\u5FC5\u987B\u5C0F\u4E8E\u7ED3\u675F\u65F6\u95F4",
2435
+ path: ["start_time"]
2436
+ }
2437
+ );
2277
2438
  var DouyinValidationSchemas2 = {
2278
2439
  "\u6587\u5B57\u4F5C\u54C1\u6570\u636E": DouyinWorkParamsSchema,
2279
2440
  "\u805A\u5408\u89E3\u6790": DouyinWorkParamsSchema,
@@ -2290,38 +2451,42 @@ var DouyinValidationSchemas2 = {
2290
2451
  "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E": DouyinQrcodeParamsSchema,
2291
2452
  "Emoji\u6570\u636E": DouyinEmojiListParamsSchema,
2292
2453
  "\u52A8\u6001\u8868\u60C5\u6570\u636E": DouyinEmojiProParamsSchema,
2293
- "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": DouyinCommentReplyParamsSchema
2454
+ "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": DouyinCommentReplyParamsSchema,
2455
+ "\u5F39\u5E55\u6570\u636E": DouyinDanmakuParamsSchema
2294
2456
  };
2295
2457
  var BilibiliVideoParamsSchema = zod.z.object({
2296
- methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2297
- bvid: zod.z.string({ required_error: "BVID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "BVID\u4E0D\u80FD\u4E3A\u7A7A")
2458
+ methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"' }),
2459
+ bvid: zod.z.string({ required_error: "BVID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "BVID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "BVID\u4E0D\u80FD\u4E3A\u7A7A")
2298
2460
  });
2299
2461
  var BilibiliVideoDownloadParamsSchema = zod.z.object({
2300
- methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2462
+ methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"' }),
2301
2463
  avid: smartNumber("AVID\u4E0D\u80FD\u4E3A\u7A7A", 1, true),
2302
2464
  cid: smartNumber("CID\u4E0D\u80FD\u4E3A\u7A7A", 1, true)
2303
2465
  });
2304
2466
  var BilibiliCommentParamsSchema = zod.z.object({
2305
- methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E"),
2306
- oid: zod.z.string({ required_error: "OID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "OID\u4E0D\u80FD\u4E3A\u7A7A"),
2467
+ methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u8BC4\u8BBA\u6570\u636E"' }),
2468
+ oid: zod.z.string({ required_error: "OID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "OID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "OID\u4E0D\u80FD\u4E3A\u7A7A"),
2307
2469
  type: smartNumber("\u8BC4\u8BBA\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A", 1, true).refine(
2308
2470
  (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),
2309
2471
  { message: "\u65E0\u6548\u7684\u8BC4\u8BBA\u533A\u7C7B\u578B" }
2310
2472
  ),
2311
- number: zod.z.coerce.number().int().positive().default(20).optional(),
2312
- pn: zod.z.coerce.number().int().positive().default(1).optional()
2473
+ number: zod.z.coerce.number({ invalid_type_error: "\u8BC4\u8BBA\u6570\u91CF\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u8BC4\u8BBA\u6570\u91CF\u5FC5\u987B\u662F\u6574\u6570" }).positive({ message: "\u8BC4\u8BBA\u6570\u91CF\u5FC5\u987B\u662F\u6B63\u6570" }).default(20).optional(),
2474
+ pn: zod.z.coerce.number({ invalid_type_error: "\u9875\u7801\u5FC5\u987B\u662F\u6570\u5B57" }).int({ message: "\u9875\u7801\u5FC5\u987B\u662F\u6574\u6570" }).positive({ message: "\u9875\u7801\u5FC5\u987B\u662F\u6B63\u6570" }).default(1).optional()
2313
2475
  });
2314
2476
  var BilibiliUserParamsSchema = zod.z.object({
2315
- methodType: zod.z.enum(["\u7528\u6237\u4E3B\u9875\u6570\u636E", "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"]),
2477
+ methodType: zod.z.enum(["\u7528\u6237\u4E3B\u9875\u6570\u636E", "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"], {
2478
+ invalid_type_error: "\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F\u6307\u5B9A\u7684\u679A\u4E3E\u503C\u4E4B\u4E00",
2479
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2480
+ }),
2316
2481
  host_mid: smartNumber("UP\u4E3BUID\u4E0D\u80FD\u4E3A\u7A7A", 1, true)
2317
2482
  });
2318
2483
  var BilibiliEmojiParamsSchema = zod.z.object({
2319
- methodType: zod.z.literal("Emoji\u6570\u636E")
2484
+ methodType: zod.z.literal("Emoji\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"Emoji\u6570\u636E"' })
2320
2485
  });
2321
2486
  var BilibiliBangumiInfoParamsSchema = zod.z.object({
2322
- methodType: zod.z.literal("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"),
2323
- ep_id: zod.z.string().min(1, "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A").optional(),
2324
- season_id: zod.z.string().optional()
2487
+ methodType: zod.z.literal("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"' }),
2488
+ ep_id: zod.z.string({ invalid_type_error: "\u756A\u5267EP ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A").optional(),
2489
+ season_id: zod.z.string({ invalid_type_error: "\u756A\u5267\u5B63\u5EA6ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).optional()
2325
2490
  }).refine(
2326
2491
  (data2) => data2.ep_id || data2.season_id,
2327
2492
  {
@@ -2330,35 +2495,44 @@ var BilibiliBangumiInfoParamsSchema = zod.z.object({
2330
2495
  }
2331
2496
  );
2332
2497
  var BilibiliBangumiStreamParamsSchema = zod.z.object({
2333
- methodType: zod.z.literal("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
2498
+ methodType: zod.z.literal("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"' }),
2334
2499
  cid: smartNumber("CID\u4E0D\u80FD\u4E3A\u7A7A", 1, true),
2335
- ep_id: zod.z.string({ required_error: "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A")
2500
+ ep_id: zod.z.string({ required_error: "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u756A\u5267EP ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u756A\u5267EP ID\u4E0D\u80FD\u4E3A\u7A7A")
2336
2501
  });
2337
2502
  var BilibiliDynamicParamsSchema = zod.z.object({
2338
- methodType: zod.z.enum(["\u52A8\u6001\u8BE6\u60C5\u6570\u636E", "\u52A8\u6001\u5361\u7247\u6570\u636E"]),
2339
- dynamic_id: zod.z.string({ required_error: "\u52A8\u6001ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u52A8\u6001ID\u4E0D\u80FD\u4E3A\u7A7A")
2503
+ methodType: zod.z.enum(["\u52A8\u6001\u8BE6\u60C5\u6570\u636E", "\u52A8\u6001\u5361\u7247\u6570\u636E"], {
2504
+ invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u52A8\u6001\u8BE6\u60C5\u6570\u636E"\u6216"\u52A8\u6001\u5361\u7247\u6570\u636E"',
2505
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2506
+ }),
2507
+ dynamic_id: zod.z.string({ required_error: "\u52A8\u6001ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u52A8\u6001ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u52A8\u6001ID\u4E0D\u80FD\u4E3A\u7A7A")
2340
2508
  });
2341
2509
  var BilibiliLiveParamsSchema = zod.z.object({
2342
- methodType: zod.z.enum(["\u76F4\u64AD\u95F4\u4FE1\u606F", "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"]),
2343
- room_id: zod.z.string({ required_error: "\u76F4\u64AD\u95F4ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u76F4\u64AD\u95F4ID\u4E0D\u80FD\u4E3A\u7A7A")
2510
+ methodType: zod.z.enum(["\u76F4\u64AD\u95F4\u4FE1\u606F", "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"], {
2511
+ invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u76F4\u64AD\u95F4\u4FE1\u606F"\u6216"\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"',
2512
+ required_error: "\u65B9\u6CD5\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A"
2513
+ }),
2514
+ room_id: zod.z.string({ required_error: "\u76F4\u64AD\u95F4ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u76F4\u64AD\u95F4ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u76F4\u64AD\u95F4ID\u4E0D\u80FD\u4E3A\u7A7A")
2344
2515
  });
2345
2516
  var BilibiliLoginParamsSchema = zod.z.object({
2346
- methodType: zod.z.literal("\u767B\u5F55\u57FA\u672C\u4FE1\u606F")
2517
+ methodType: zod.z.literal("\u767B\u5F55\u57FA\u672C\u4FE1\u606F", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u767B\u5F55\u57FA\u672C\u4FE1\u606F"' })
2347
2518
  });
2348
2519
  var BilibiliQrcodeParamsSchema = zod.z.object({
2349
- methodType: zod.z.literal("\u7533\u8BF7\u4E8C\u7EF4\u7801")
2520
+ methodType: zod.z.literal("\u7533\u8BF7\u4E8C\u7EF4\u7801", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u7533\u8BF7\u4E8C\u7EF4\u7801"' })
2350
2521
  });
2351
2522
  var BilibiliQrcodeStatusParamsSchema = zod.z.object({
2352
- methodType: zod.z.literal("\u4E8C\u7EF4\u7801\u72B6\u6001"),
2353
- qrcode_key: zod.z.string({ required_error: "\u4E8C\u7EF4\u7801key\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u4E8C\u7EF4\u7801key\u4E0D\u80FD\u4E3A\u7A7A")
2523
+ methodType: zod.z.literal("\u4E8C\u7EF4\u7801\u72B6\u6001", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u4E8C\u7EF4\u7801\u72B6\u6001"' }),
2524
+ qrcode_key: zod.z.string({ required_error: "\u4E8C\u7EF4\u7801key\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u4E8C\u7EF4\u7801key\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u4E8C\u7EF4\u7801key\u4E0D\u80FD\u4E3A\u7A7A")
2354
2525
  });
2355
2526
  var BilibiliAv2BvParamsSchema = zod.z.object({
2356
- methodType: zod.z.literal("AV\u8F6CBV"),
2357
- avid: zod.z.coerce.number({ required_error: "AVID\u4E0D\u80FD\u4E3A\u7A7A" }).int().positive()
2527
+ methodType: zod.z.literal("AV\u8F6CBV", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"AV\u8F6CBV"' }),
2528
+ avid: zod.z.coerce.number({
2529
+ required_error: "AVID\u4E0D\u80FD\u4E3A\u7A7A",
2530
+ invalid_type_error: "AVID\u5FC5\u987B\u662F\u6570\u5B57"
2531
+ }).int({ message: "AVID\u5FC5\u987B\u662F\u6574\u6570" }).positive({ message: "AVID\u5FC5\u987B\u662F\u6B63\u6570" })
2358
2532
  });
2359
2533
  var BilibiliBv2AvParamsSchema = zod.z.object({
2360
- methodType: zod.z.literal("BV\u8F6CAV"),
2361
- bvid: zod.z.string({ required_error: "BVID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "BVID\u4E0D\u80FD\u4E3A\u7A7A")
2534
+ methodType: zod.z.literal("BV\u8F6CAV", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"BV\u8F6CAV"' }),
2535
+ bvid: zod.z.string({ required_error: "BVID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "BVID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "BVID\u4E0D\u80FD\u4E3A\u7A7A")
2362
2536
  });
2363
2537
  var BilibiliValidationSchemas2 = {
2364
2538
  "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": BilibiliVideoParamsSchema,
@@ -2381,15 +2555,15 @@ var BilibiliValidationSchemas2 = {
2381
2555
  "BV\u8F6CAV": BilibiliBv2AvParamsSchema
2382
2556
  };
2383
2557
  var KuaishouVideoParamsSchema = zod.z.object({
2384
- methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
2385
- photoId: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2558
+ methodType: zod.z.literal("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"' }),
2559
+ photoId: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2386
2560
  });
2387
2561
  var KuaishouCommentParamsSchema = zod.z.object({
2388
- methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E"),
2389
- photoId: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2562
+ methodType: zod.z.literal("\u8BC4\u8BBA\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"\u8BC4\u8BBA\u6570\u636E"' }),
2563
+ photoId: zod.z.string({ required_error: "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A", invalid_type_error: "\u89C6\u9891ID\u5FC5\u987B\u662F\u5B57\u7B26\u4E32" }).min(1, "\u89C6\u9891ID\u4E0D\u80FD\u4E3A\u7A7A")
2390
2564
  });
2391
2565
  var KuaishouEmojiParamsSchema = zod.z.object({
2392
- methodType: zod.z.literal("Emoji\u6570\u636E")
2566
+ methodType: zod.z.literal("Emoji\u6570\u636E", { invalid_type_error: '\u65B9\u6CD5\u7C7B\u578B\u5FC5\u987B\u662F"Emoji\u6570\u636E"' })
2393
2567
  });
2394
2568
  var KuaishouValidationSchemas2 = {
2395
2569
  "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": KuaishouVideoParamsSchema,
@@ -2459,8 +2633,8 @@ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions, reque
2459
2633
  ...validatedParams
2460
2634
  };
2461
2635
  const rawData = await DouyinData(apiParams, cookie, config);
2462
- if (rawData.data === "") {
2463
- return createErrorResponse(rawData.amagiError, "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
2636
+ if (rawData.data === "" || rawData.status_code !== 0) {
2637
+ return createErrorResponse(rawData.amagiError, rawData.status_msg || "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
2464
2638
  }
2465
2639
  return createSuccessResponse(rawData, "\u83B7\u53D6\u6210\u529F", 200);
2466
2640
  } catch (error) {
@@ -3105,7 +3279,13 @@ var douyin = {
3105
3279
  * @param cookie 有效的用户 Cookie
3106
3280
  * @returns 统一格式的API响应,包含直播间详细信息
3107
3281
  */
3108
- getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E")
3282
+ getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"),
3283
+ /**
3284
+ * 获取弹幕数据
3285
+ * @param options 请求参数,包含 aweme_id, 可选的 start_time, end_time, duration 和 typeMode
3286
+ * @returns 统一格式的API响应,包含弹幕数据
3287
+ */
3288
+ getDanmaku: createDouyinApiMethod("\u5F39\u5E55\u6570\u636E")
3109
3289
  };
3110
3290
  var createBoundDouyinApi = (cookie, requestConfig) => {
3111
3291
  return {
@@ -3198,7 +3378,13 @@ var createBoundDouyinApi = (cookie, requestConfig) => {
3198
3378
  * @param options 请求参数,包含 sec_uid 和可选的 typeMode
3199
3379
  * @returns 统一格式的API响应,包含直播间详细信息
3200
3380
  */
3201
- getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
3381
+ getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig),
3382
+ /**
3383
+ * 获取弹幕数据
3384
+ * @param options 请求参数,包含 aweme_id, 可选的 start_time, end_time, duration 和 typeMode
3385
+ * @returns 统一格式的API响应,包含弹幕数据
3386
+ */
3387
+ getDanmaku: createBoundDouyinApiMethod("\u5F39\u5E55\u6570\u636E", cookie, requestConfig)
3202
3388
  };
3203
3389
  };
3204
3390
  var createDouyinRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
@@ -3290,6 +3476,11 @@ var createDouyinRoutes = (cookie, requestConfig = getDouyinDefaultConfig(cookie)
3290
3476
  createDouyinValidationMiddleware("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
3291
3477
  createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig)
3292
3478
  );
3479
+ router.get(
3480
+ "/fetch_work_danmaku",
3481
+ createDouyinValidationMiddleware("\u5F39\u5E55\u6570\u636E"),
3482
+ createDouyinRouteHandler(getDouyinData, "\u5F39\u5E55\u6570\u636E", cookie, requestConfig)
3483
+ );
3293
3484
  return router;
3294
3485
  };
3295
3486
 
@@ -3543,6 +3734,7 @@ exports.BilibiliVideoParamsSchema = BilibiliVideoParamsSchema;
3543
3734
  exports.CreateApp = CreateApp;
3544
3735
  exports.DouyinCommentParamsSchema = DouyinCommentParamsSchema;
3545
3736
  exports.DouyinCommentReplyParamsSchema = DouyinCommentReplyParamsSchema;
3737
+ exports.DouyinDanmakuParamsSchema = DouyinDanmakuParamsSchema;
3546
3738
  exports.DouyinEmojiListParamsSchema = DouyinEmojiListParamsSchema;
3547
3739
  exports.DouyinEmojiProParamsSchema = DouyinEmojiProParamsSchema;
3548
3740
  exports.DouyinMusicParamsSchema = DouyinMusicParamsSchema;