karin-plugin-kkk 2.40.1 → 2.40.2

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [2.40.2](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.1...v2.40.2) (2026-07-28)
6
+
7
+
8
+ ### 🐛 错误修复
9
+
10
+ * 优化接口库客户端热重载功能 ([3e3bd9d](https://github.com/ikenxuan/karin-plugin-kkk/commit/3e3bd9d5e2c40a40158a4a6db034367895f3fd8d))
11
+
5
12
  ## [2.40.1](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.0...v2.40.1) (2026-07-19)
6
13
 
7
14
 
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "2.40.1",
3
- "buildTime": "2026-07-19T04:17:32.889Z",
4
- "buildTimestamp": 1784434652890,
2
+ "version": "2.40.2",
3
+ "buildTime": "2026-07-28T05:14:06.496Z",
4
+ "buildTimestamp": 1785215646496,
5
5
  "name": "karin-plugin-kkk",
6
6
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
7
7
  "homepage": "https://github.com/ikenxuan/karin-plugin-kkk",
8
- "commitHash": "8ee6190a7d8ae16fae83d8580046640d6ddcb2fc",
9
- "shortCommitHash": "8ee6190a"
8
+ "commitHash": "f4798eaff113ebfc5e24b01263ad2da1f2835f23",
9
+ "shortCommitHash": "f4798eaf"
10
10
  }
@@ -1,2 +1,2 @@
1
- import { $n as xiaohongshuApiUrls, $r as emitLog, $t as MajorType, An as fetchResponse, Ar as BilibiliBangumiStreamParamsSchema, At as DouyinMethodMapping, Bn as createBoundDouyinFetcher, Br as BilibiliMethodRoutes, Bt as DouyinFetcherMethods, Cn as bv2av, Cr as DouyinWorkParamsSchema, Dn as logMiddleware, Dr as BilibiliArticleParamsSchema, Dt as BilibiliApiRoutes, En as initLogger, Er as BilibiliArticleInfoParamsSchema, Et as amagiClient, Fn as createBoundKuaishouFetcher, Fr as BilibiliDanmakuParamsSchema, Ft as getApiRoute, Gn as createErrorResponse, Gr as BilibiliValidationSchemas, Gt as KuaishouMethodToFetcher, Hn as douyinSign, Hr as BilibiliQrcodeStatusParamsSchema, Ht as DouyinMethodToFetcher, In as kuaishouFetcher, Ir as BilibiliDynamicParamsSchema, It as getEnglishMethodName, Jn as validateDouyinParams, Jr as amagiEvents, Jt as XiaohongshuInternalMethods, Kn as createSuccessResponse, Kr as BilibiliVideoDownloadParamsSchema, Kt as MethodMaps, Ln as kuaishouSign, Lr as BilibiliEmojiParamsSchema, Lt as BilibiliFetcherMethods, Mn as isNetworkErrorResult, Mr as BilibiliColumnInfoParamsSchema, Mt as KuaishouMethodMapping, Nn as createBoundXiaohongshuFetcher, Nr as BilibiliCommentParamsSchema, Nt as XiaohongshuApiRoutes, On as logger, Or as BilibiliAv2BvParamsSchema, Ot as BilibiliMethodMapping, Pn as xiaohongshuFetcher, Pr as BilibiliCommentReplyParamsSchema, Pt as XiaohongshuMethodMapping, Qn as XiaohongshuValidationSchemas, Qr as emitHttpResponse, Qt as AdditionalType, Rn as kuaishouApiUrls, Rr as BilibiliLiveParamsSchema, Rt as BilibiliInternalMethods, Sn as av2bv, Sr as DouyinValidationSchemas, Tn as httpLogger, Tr as BilibiliArticleCardParamsSchema, Tt as amagi, Un as bilibiliFetcher, Ur as BilibiliUserParamsSchema, Ut as KuaishouFetcherMethods, Vn as douyinApiUrls, Vr as BilibiliQrcodeParamsSchema, Vt as DouyinInternalMethods, Wn as createBoundBilibiliFetcher, Wr as BilibiliValidateCaptchaParamsSchema, Wt as KuaishouInternalMethods, Xn as validateXiaohongshuParams, Xr as emitApiSuccess, Xt as toFetcherMethod, Yn as validateKuaishouParams, Yr as emitApiError, Yt as XiaohongshuMethodToFetcher, Zn as XiaohongshuMethodRoutes, Zr as emitHttpRequest, Zt as DynamicType, _n as ValidationError, _r as DouyinMusicParamsSchema, ai as emitNetworkError, an as xiaohongshu, ar as KuaishouUserProfileParamsSchema, bn as wbi_sign, br as DouyinUserListParamsSchema, ci as createBoundBilibiliApi, cn as createBoundKuaishouApi, cr as KuaishouVideoParamsSchema, di as getDouyinData, dn as createDouyinRoutes, dr as DouyinDanmakuParamsSchema, ei as emitLogDebug, en as CommentType, er as xiaohongshuSign, fi as getKuaishouData, fn as createBoundDouyinApi, fr as DouyinEmojiListParamsSchema, gn as ApiError, gr as DouyinMethodRoutes, hn as createBilibiliRoutes, hr as DouyinLiveRoomParamsSchema, ii as emitLogWarn, in as createBoundXiaohongshuApi, ir as KuaishouMethodRoutes, jn as getHeadersAndData, jr as BilibiliBv2AvParamsSchema, jt as KuaishouApiRoutes, kn as fetchData, kr as BilibiliBangumiInfoParamsSchema, kt as DouyinApiRoutes, li as bilibiliApiUrls, ln as kuaishou, lr as DouyinCommentParamsSchema, mn as bilibiliUtils, mr as DouyinHotWordsParamsSchema, ni as emitLogInfo, nn as xiaohongshuUtils, nr as KuaishouEmojiParamsSchema, oi as emitNetworkRetry, on as kuaishouUtils, or as KuaishouUserWorkListParamsSchema, pn as douyin, pr as DouyinEmojiProParamsSchema, qn as validateBilibiliParams, qr as BilibiliVideoParamsSchema, qt as XiaohongshuFetcherMethods, ri as emitLogMark, rn as createXiaohongshuRoutes, rr as KuaishouLiveRoomInfoParamsSchema, si as bilibili, sn as createKuaishouRoutes, sr as KuaishouValidationSchemas, ti as emitLogError, tn as createAmagiClient, tr as KuaishouCommentParamsSchema, ui as getBilibiliData, un as douyinUtils, ur as DouyinCommentReplyParamsSchema, vn as handleError, vr as DouyinQrcodeParamsSchema, wn as qtparam, wr as BilibiliApplyCaptchaParamsSchema, wt as CreateApp, xn as parseDmSegMobileReply, xr as DouyinUserParamsSchema, yn as bilibiliErrorCodeMap, yr as DouyinSearchParamsSchema, zn as douyinFetcher, zr as BilibiliLoginParamsSchema, zt as BilibiliMethodToFetcher } from "./main.js";
1
+ import { $n as XiaohongshuMethodRoutes, $r as emitHttpRequest, $t as DynamicType, An as logger, Ar as BilibiliAv2BvParamsSchema, At as BilibiliMethodMapping, Bn as kuaishouApiUrls, Br as BilibiliLiveParamsSchema, Bt as BilibiliInternalMethods, Cn as parseDmSegMobileReply, Cr as DouyinUserParamsSchema, Dn as httpLogger, Dr as BilibiliArticleCardParamsSchema, Dt as amagi, En as qtparam, Er as BilibiliApplyCaptchaParamsSchema, Et as CreateApp, Fn as createBoundXiaohongshuFetcher, Fr as BilibiliCommentParamsSchema, Ft as XiaohongshuApiRoutes, Gn as bilibiliFetcher, Gr as BilibiliUserParamsSchema, Gt as KuaishouFetcherMethods, Hn as createBoundDouyinFetcher, Hr as BilibiliMethodRoutes, Ht as DouyinFetcherMethods, In as xiaohongshuFetcher, Ir as BilibiliCommentReplyParamsSchema, It as XiaohongshuMethodMapping, Jn as createSuccessResponse, Jr as BilibiliVideoDownloadParamsSchema, Jt as MethodMaps, Kn as createBoundBilibiliFetcher, Kr as BilibiliValidateCaptchaParamsSchema, Kt as KuaishouInternalMethods, Ln as createBoundKuaishouFetcher, Lr as BilibiliDanmakuParamsSchema, Lt as getApiRoute, Mn as fetchResponse, Mr as BilibiliBangumiStreamParamsSchema, Mt as DouyinMethodMapping, Nn as getHeadersAndData, Nr as BilibiliBv2AvParamsSchema, Nt as KuaishouApiRoutes, On as initLogger, Or as BilibiliArticleInfoParamsSchema, Ot as amagiClient, Pn as isNetworkErrorResult, Pr as BilibiliColumnInfoParamsSchema, Pt as KuaishouMethodMapping, Qn as validateXiaohongshuParams, Qr as emitApiSuccess, Qt as toFetcherMethod, Rn as kuaishouFetcher, Rr as BilibiliDynamicParamsSchema, Rt as getEnglishMethodName, Sn as wbi_sign, Sr as DouyinUserListParamsSchema, Tn as bv2av, Tr as DouyinWorkParamsSchema, Un as douyinApiUrls, Ur as BilibiliQrcodeParamsSchema, Ut as DouyinInternalMethods, Vn as douyinFetcher, Vr as BilibiliLoginParamsSchema, Vt as BilibiliMethodToFetcher, Wn as douyinSign, Wr as BilibiliQrcodeStatusParamsSchema, Wt as DouyinMethodToFetcher, Xn as validateDouyinParams, Xr as amagiEvents, Xt as XiaohongshuInternalMethods, Yn as validateBilibiliParams, Yr as BilibiliVideoParamsSchema, Yt as XiaohongshuFetcherMethods, Zn as validateKuaishouParams, Zr as emitApiError, Zt as XiaohongshuMethodToFetcher, _n as createBilibiliRoutes, _r as DouyinLiveRoomParamsSchema, ai as emitLogMark, an as createXiaohongshuRoutes, ar as KuaishouLiveRoomInfoParamsSchema, bn as handleError, br as DouyinQrcodeParamsSchema, ci as emitNetworkRetry, cn as kuaishouUtils, cr as KuaishouUserWorkListParamsSchema, di as bilibiliApiUrls, dn as kuaishou, dr as DouyinCommentParamsSchema, ei as emitHttpResponse, en as AdditionalType, er as XiaohongshuValidationSchemas, fi as getBilibiliData, fn as douyinUtils, fr as DouyinCommentReplyParamsSchema, gn as bilibiliUtils, gr as DouyinHotWordsParamsSchema, hn as douyin, hr as DouyinEmojiProParamsSchema, ii as emitLogInfo, in as xiaohongshuUtils, ir as KuaishouEmojiParamsSchema, jn as fetchData, jr as BilibiliBangumiInfoParamsSchema, jt as DouyinApiRoutes, kn as logMiddleware, kr as BilibiliArticleParamsSchema, kt as BilibiliApiRoutes, li as bilibili, ln as createKuaishouRoutes, lr as KuaishouValidationSchemas, mi as getKuaishouData, mn as createBoundDouyinApi, mr as DouyinEmojiListParamsSchema, ni as emitLogDebug, nn as CommentType, nr as xiaohongshuSign, oi as emitLogWarn, on as createBoundXiaohongshuApi, or as KuaishouMethodRoutes, pi as getDouyinData, pn as createDouyinRoutes, pr as DouyinDanmakuParamsSchema, qn as createErrorResponse, qr as BilibiliValidationSchemas, qt as KuaishouMethodToFetcher, ri as emitLogError, rn as createAmagiClient, rr as KuaishouCommentParamsSchema, si as emitNetworkError, sn as xiaohongshu, sr as KuaishouUserProfileParamsSchema, ti as emitLog, tn as MajorType, tr as xiaohongshuApiUrls, ui as createBoundBilibiliApi, un as createBoundKuaishouApi, ur as KuaishouVideoParamsSchema, vn as ApiError, vr as DouyinMethodRoutes, wn as av2bv, wr as DouyinValidationSchemas, xn as bilibiliErrorCodeMap, xr as DouyinSearchParamsSchema, yn as ValidationError, yr as DouyinMusicParamsSchema, zn as kuaishouSign, zr as BilibiliEmojiParamsSchema, zt as BilibiliFetcherMethods } from "./main.js";
2
2
  export { AdditionalType, ApiError, BilibiliApiRoutes, BilibiliApplyCaptchaParamsSchema, BilibiliArticleCardParamsSchema, BilibiliArticleInfoParamsSchema, BilibiliArticleParamsSchema, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliColumnInfoParamsSchema, BilibiliCommentParamsSchema, BilibiliCommentReplyParamsSchema, BilibiliDanmakuParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliFetcherMethods, BilibiliInternalMethods, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliMethodMapping, BilibiliMethodRoutes, BilibiliMethodToFetcher, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidateCaptchaParamsSchema, BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CommentType, CreateApp, DouyinApiRoutes, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinDanmakuParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinFetcherMethods, DouyinHotWordsParamsSchema, DouyinInternalMethods, DouyinLiveRoomParamsSchema, DouyinMethodMapping, DouyinMethodRoutes, DouyinMethodToFetcher, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserListParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas, DouyinWorkParamsSchema, DynamicType, KuaishouApiRoutes, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouFetcherMethods, KuaishouInternalMethods, KuaishouLiveRoomInfoParamsSchema, KuaishouMethodMapping, KuaishouMethodRoutes, KuaishouMethodToFetcher, KuaishouUserProfileParamsSchema, KuaishouUserWorkListParamsSchema, KuaishouValidationSchemas, KuaishouVideoParamsSchema, MajorType, MethodMaps, ValidationError, XiaohongshuApiRoutes, XiaohongshuFetcherMethods, XiaohongshuInternalMethods, XiaohongshuMethodMapping, XiaohongshuMethodRoutes, XiaohongshuMethodToFetcher, XiaohongshuValidationSchemas, amagi, amagiClient, amagiEvents, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliFetcher, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBilibiliRoutes as registerBilibiliRoutes, createBoundBilibiliApi, createBoundBilibiliFetcher, createBoundDouyinApi, createBoundDouyinFetcher, createBoundKuaishouApi, createBoundKuaishouFetcher, createBoundXiaohongshuApi, createBoundXiaohongshuFetcher, createDouyinRoutes, createDouyinRoutes as registerDouyinRoutes, createErrorResponse, createKuaishouRoutes, createKuaishouRoutes as registerKuaishouRoutes, createSuccessResponse, createXiaohongshuRoutes, createXiaohongshuRoutes as registerXiaohongshuRoutes, douyin, douyinApiUrls, douyinFetcher, douyinSign, douyinUtils, emitApiError, emitApiSuccess, emitHttpRequest, emitHttpResponse, emitLog, emitLogDebug, emitLogError, emitLogInfo, emitLogMark, emitLogWarn, emitNetworkError, emitNetworkRetry, fetchData, fetchResponse, getApiRoute, getBilibiliData, getDouyinData, getEnglishMethodName, getHeadersAndData, getKuaishouData, handleError, httpLogger, initLogger, isNetworkErrorResult, kuaishou, kuaishouApiUrls, kuaishouFetcher, kuaishouSign, kuaishouUtils, logMiddleware, logger, parseDmSegMobileReply, qtparam, toFetcherMethod, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, validateXiaohongshuParams, wbi_sign, xiaohongshu, xiaohongshuApiUrls, xiaohongshuFetcher, xiaohongshuSign, xiaohongshuUtils };
@@ -1,2 +1,2 @@
1
- import { St as reloadAmagiConfig } from "./main.js";
1
+ import { Ct as reloadAmagiConfig } from "./main.js";
2
2
  export { reloadAmagiConfig };
@@ -10340,7 +10340,7 @@ var VERSION = getVersion();
10340
10340
  /**
10341
10341
  * @deprecated 请使用 createAmagiClient 替代
10342
10342
  */
10343
- var amagiClient$1 = createAmagiClient;
10343
+ var amagiClient = createAmagiClient;
10344
10344
  /**
10345
10345
  * 创建一个新的 amagi 客户端实例
10346
10346
  * 用于创建和初始化一个新的 amagi 客户端实例,支持通过 new 关键字或函数调用方式使用
@@ -10700,10 +10700,15 @@ var AmagiError = class extends Error {
10700
10700
  var AmagiBase = class {
10701
10701
  /** 解析库实例 */
10702
10702
  amagi;
10703
+ /** 当前客户端使用的配置快照,用于避免文件监听与显式重载造成重复初始化 */
10704
+ configSignature;
10703
10705
  constructor() {
10704
10706
  const client = this.createAmagiClient();
10705
10707
  this.amagi = this.wrapAmagiClient(client);
10708
+ this.configSignature = this.getConfigSignature();
10706
10709
  }
10710
+ /** 获取会影响 Amagi 运行状态的配置快照 */
10711
+ getConfigSignature = () => JSON.stringify(Config.amagi);
10707
10712
  /** 创建解析库实例 */
10708
10713
  createAmagiClient = () => {
10709
10714
  const amagi = Config.amagi;
@@ -10718,12 +10723,20 @@ var AmagiBase = class {
10718
10723
  };
10719
10724
  /**
10720
10725
  * 重载配置 - 重新创建 Amagi Client 实例
10726
+ * @returns 配置发生变化并完成重载时返回 true
10721
10727
  */
10722
10728
  reloadConfig() {
10729
+ const nextConfigSignature = this.getConfigSignature();
10730
+ if (nextConfigSignature === this.configSignature) {
10731
+ logger.debug("[AmagiClient] 配置未变化,跳过重复重载");
10732
+ return false;
10733
+ }
10723
10734
  logger.debug("[AmagiClient] 检测到配置变化,正在重载...");
10724
10735
  const client = this.createAmagiClient();
10725
10736
  this.amagi = this.wrapAmagiClient(client);
10737
+ this.configSignature = nextConfigSignature;
10726
10738
  logger.debug("[AmagiClient] 配置重载完成");
10739
+ return true;
10727
10740
  }
10728
10741
  /** 包装解析库实例,递归代理所有嵌套对象的方法 */
10729
10742
  wrapAmagiClient = (client) => {
@@ -10790,14 +10803,37 @@ var softFetch = async (fn, allowedCodes) => {
10790
10803
  }
10791
10804
  };
10792
10805
  var amagiClientInstance = new AmagiBase();
10793
- var amagiClient = amagiClientInstance.amagi;
10806
+ /** 需要随 Amagi Client 一同刷新的运行时资源,例如已经挂载的 HTTP Router */
10807
+ var amagiReloadListeners = /* @__PURE__ */ new Set();
10808
+ /**
10809
+ * 注册 Amagi 配置重载监听器。
10810
+ * @returns 注销当前监听器的函数
10811
+ */
10812
+ var registerAmagiReloadListener = (listener) => {
10813
+ amagiReloadListeners.add(listener);
10814
+ return () => amagiReloadListeners.delete(listener);
10815
+ };
10816
+ var bilibiliFetcher = amagiClientInstance.amagi.bilibili.fetcher;
10817
+ var douyinFetcher = amagiClientInstance.amagi.douyin.fetcher;
10818
+ var kuaishouFetcher = amagiClientInstance.amagi.kuaishou.fetcher;
10819
+ var xiaohongshuFetcher = amagiClientInstance.amagi.xiaohongshu.fetcher;
10794
10820
  var reloadAmagiConfig = () => {
10795
- amagiClientInstance.reloadConfig();
10821
+ if (!amagiClientInstance.reloadConfig()) return false;
10822
+ /**
10823
+ * ESM 的 `export let` 是实时绑定。这里必须在 Client 重建后同步替换各平台
10824
+ * Fetcher,避免调用方继续持有模块初始化阶段截取的旧 Client 引用。
10825
+ */
10826
+ bilibiliFetcher = amagiClientInstance.amagi.bilibili.fetcher;
10827
+ douyinFetcher = amagiClientInstance.amagi.douyin.fetcher;
10828
+ kuaishouFetcher = amagiClientInstance.amagi.kuaishou.fetcher;
10829
+ xiaohongshuFetcher = amagiClientInstance.amagi.xiaohongshu.fetcher;
10830
+ for (const listener of amagiReloadListeners) try {
10831
+ listener();
10832
+ } catch (error) {
10833
+ logger.error(`[AmagiClient] 运行时资源重载失败: ${error}`);
10834
+ }
10835
+ return true;
10796
10836
  };
10797
- var bilibiliFetcher = amagiClient.bilibili.fetcher;
10798
- var douyinFetcher = amagiClient.douyin.fetcher;
10799
- var kuaishouFetcher = amagiClient.kuaishou.fetcher;
10800
- amagiClient.xiaohongshu.fetcher;
10801
10837
  //#endregion
10802
10838
  //#region src/module/utils/Base.ts
10803
10839
  /**
@@ -42043,8 +42079,9 @@ var douyinLogin = async (e) => {
42043
42079
  if (!hasTtwid) logger.warn(" - 缺少 ttwid");
42044
42080
  }
42045
42081
  logger.debug("开始保存 cookies...");
42046
- Config.Modify("amagi", "cookies.douyin", cookieString);
42047
- logger.debug("cookies 保存完成");
42082
+ await Config.Modify("amagi", "cookies.douyin", cookieString);
42083
+ const reloaded = reloadAmagiConfig();
42084
+ logger.debug(`cookies 保存完成,Amagi Client ${reloaded ? "已重载" : "配置未变化"}`);
42048
42085
  await e.reply("登录成功!用户登录凭证已保存至配置", { reply: true });
42049
42086
  await Promise.all(msg_id.map(async (id) => {
42050
42087
  await e.bot.recallMsg(e.contact, id);
@@ -44151,8 +44188,36 @@ var signatureVerificationMiddleware = (req, res, next) => {
44151
44188
  }
44152
44189
  };
44153
44190
  //#endregion
44154
- //#region src/module/server/routes/api.ts
44191
+ //#region src/module/server/routes/amagi.ts
44155
44192
  var import_lib = /* @__PURE__ */ __toESM(require_lib(), 1);
44193
+ /** 创建使用当前配置的 Amagi 平台 Router。 */
44194
+ var createPlatformRouters = () => ({
44195
+ bilibili: createBilibiliRoutes(Config.amagi.cookies.bilibili),
44196
+ douyin: createDouyinRoutes(Config.amagi.cookies.douyin),
44197
+ kuaishou: createKuaishouRoutes(Config.amagi.cookies.kuaishou),
44198
+ xiaohongshu: createXiaohongshuRoutes(Config.amagi.cookies.xiaohongshu)
44199
+ });
44200
+ /**
44201
+ * 创建一个挂载地址保持不变、内部平台 Router 可热切换的 Amagi Router。
44202
+ *
44203
+ * Express 挂载后无法直接替换中间件栈,因此外层 Router 始终保持稳定,
44204
+ * 每次请求再转发给当前的平台 Router;配置重载时只需原子替换内部引用。
44205
+ */
44206
+ var createReloadableAmagiRouter = () => {
44207
+ const router = express.Router();
44208
+ let platformRouters = createPlatformRouters();
44209
+ router.use("/bilibili", (req, res, next) => platformRouters.bilibili(req, res, next));
44210
+ router.use("/douyin", (req, res, next) => platformRouters.douyin(req, res, next));
44211
+ router.use("/kuaishou", (req, res, next) => platformRouters.kuaishou(req, res, next));
44212
+ router.use("/xiaohongshu", (req, res, next) => platformRouters.xiaohongshu(req, res, next));
44213
+ registerAmagiReloadListener(() => {
44214
+ platformRouters = createPlatformRouters();
44215
+ logger.debug("[AmagiRouter] 平台 Router 已使用最新配置重建");
44216
+ });
44217
+ return router;
44218
+ };
44219
+ //#endregion
44220
+ //#region src/module/server/routes/api.ts
44156
44221
  /**
44157
44222
  * API 路由注册
44158
44223
  */
@@ -44231,17 +44296,20 @@ if (process.env.NODE_ENV !== "test") checkPort(3780).then((isOpen) => {
44231
44296
  var app$1 = express.Router();
44232
44297
  app$1.use(express.json());
44233
44298
  app$1.use(express.urlencoded({ extended: true }));
44234
- if (Config.amagi.APIServer && Config.amagi.APIServerMount) {
44235
- app$1.use("/amagi/api/bilibili", createBilibiliRoutes(Config.amagi.cookies.bilibili));
44236
- app$1.use("/amagi/api/douyin", createDouyinRoutes(Config.amagi.cookies.douyin));
44237
- app$1.use("/amagi/api/kuaishou", createKuaishouRoutes(Config.amagi.cookies.kuaishou));
44238
- app$1.use("/amagi/api/xiaohongshu", createXiaohongshuRoutes(Config.amagi.cookies.xiaohongshu));
44239
- } else if (Config.amagi.APIServer) new Client({ cookies: {
44240
- bilibili: Config.amagi.cookies.bilibili,
44241
- douyin: Config.amagi.cookies.douyin,
44242
- kuaishou: Config.amagi.cookies.kuaishou,
44243
- xiaohongshu: Config.amagi.cookies.xiaohongshu
44244
- } }).startServer(Config.amagi.APIServerPort);
44299
+ if (Config.amagi.APIServer && Config.amagi.APIServerMount) app$1.use("/amagi/api", createReloadableAmagiRouter());
44300
+ else if (Config.amagi.APIServer) {
44301
+ const amagiServer = express();
44302
+ amagiServer.use(express.json());
44303
+ amagiServer.use(express.urlencoded({ extended: true }));
44304
+ amagiServer.get("/", (_req, res) => res.redirect(301, "https://amagi.apifox.cn"));
44305
+ amagiServer.get("/docs", (_req, res) => res.redirect(301, "https://amagi.apifox.cn"));
44306
+ amagiServer.use("/api", createReloadableAmagiRouter());
44307
+ amagiServer.listen(Config.amagi.APIServerPort, "::", () => {
44308
+ logger.mark(`[karin-plugin-kkk] Amagi server listening on http://localhost:${Config.amagi.APIServerPort}`);
44309
+ }).on("error", (error) => {
44310
+ logger.error(`[karin-plugin-kkk] Amagi API Server 启动失败: ${error.message}`);
44311
+ });
44312
+ }
44245
44313
  app$1.use("/v1", apiRouter);
44246
44314
  app$1.use(SSR_PREFIX, ssrRouter);
44247
44315
  app$1.use(ASSETS_PREFIX, staticRouter);
@@ -44292,4 +44360,4 @@ mkdirSync(`${karinPathBase}/${Root.pluginName}/data`);
44292
44360
  mkdirSync(Common.tempDri.images);
44293
44361
  mkdirSync(Common.tempDri.video);
44294
44362
  //#endregion
44295
- export { createImageNode as $, xiaohongshuApiUrls as $n, emitLog as $r, MajorType as $t, testWrapWithErrorHandler as A, fetchResponse as An, BilibiliBangumiStreamParamsSchema as Ar, DouyinMethodMapping as At, StatisticsDBBase as B, createBoundDouyinFetcher as Bn, BilibiliMethodRoutes as Br, DouyinFetcherMethods as Bt, changelog as C, bv2av as Cn, DouyinWorkParamsSchema as Cr, softFetch as Ct, dylogin as D, logMiddleware as Dn, BilibiliArticleParamsSchema as Dr, BilibiliApiRoutes as Dt, biLogin as E, initLogger as En, BilibiliArticleInfoParamsSchema as Er, amagiClient$1 as Et, douyinDBInstance as F, createBoundKuaishouFetcher as Fn, BilibiliDanmakuParamsSchema as Fr, getApiRoute as Ft, renderRichTextToReact as G, createErrorResponse as Gn, BilibiliValidationSchemas as Gr, KuaishouMethodToFetcher as Gt, BilibiliDBBase as H, douyinSign as Hn, BilibiliQrcodeStatusParamsSchema as Hr, DouyinMethodToFetcher as Ht, getBilibiliDB as I, kuaishouFetcher$1 as In, BilibiliDynamicParamsSchema as Ir, getEnglishMethodName as It, createCodeBlockNode as J, validateDouyinParams as Jn, amagiEvents as Jr, XiaohongshuInternalMethods as Jt, createAtNode as K, createSuccessResponse$1 as Kn, BilibiliVideoDownloadParamsSchema as Kr, MethodMaps as Kt, getDouyinDB as L, kuaishouSign as Ln, BilibiliEmojiParamsSchema as Lr, BilibiliFetcherMethods as Lt, webConfig as M, isNetworkErrorResult as Mn, BilibiliColumnInfoParamsSchema as Mr, KuaishouMethodMapping as Mt, bilibiliDBInstance as N, createBoundXiaohongshuFetcher as Nn, BilibiliCommentParamsSchema as Nr, XiaohongshuApiRoutes as Nt, removeOldFiles as O, logger$2 as On, BilibiliAv2BvParamsSchema as Or, BilibiliMethodMapping as Ot, cleanOldDynamicCache as P, xiaohongshuFetcher$1 as Pn, BilibiliCommentReplyParamsSchema as Pr, XiaohongshuMethodMapping as Pt, createHorizontalRuleNode as Q, XiaohongshuValidationSchemas as Qn, emitHttpResponse as Qr, AdditionalType as Qt, getStatisticsDB as R, kuaishouApiUrls as Rn, BilibiliLiveParamsSchema as Rr, BilibiliInternalMethods as Rt, setdyPush as S, av2bv as Sn, DouyinValidationSchemas as Sr, reloadAmagiConfig as St, version as T, httpLogger as Tn, BilibiliArticleCardParamsSchema as Tr, amagi as Tt, reactServerRender as U, bilibiliFetcher$1 as Un, BilibiliUserParamsSchema as Ur, KuaishouFetcherMethods as Ut, DouyinDBBase as V, douyinApiUrls as Vn, BilibiliQrcodeParamsSchema as Vr, DouyinInternalMethods as Vt, renderVideoPreviewPage as W, createBoundBilibiliFetcher as Wn, BilibiliValidateCaptchaParamsSchema as Wr, KuaishouInternalMethods as Wt, createHashtagNode as X, validateXiaohongshuParams as Xn, emitApiSuccess as Xr, toFetcherMethod as Xt, createEmojiNode as Y, validateKuaishouParams as Yn, emitApiError as Yr, XiaohongshuMethodToFetcher as Yt, createHeadingNode as Z, XiaohongshuMethodRoutes as Zn, emitHttpRequest as Zr, DynamicType as Zt, douyinPush as _, ValidationError as _n, DouyinMusicParamsSchema as _r, AmagiError as _t, bilibiliAPP as a, emitNetworkError as ai, xiaohongshu$1 as an, KuaishouUserProfileParamsSchema as ar, createMentionNode as at, globalIgnore as b, wbi_sign as bn, DouyinUserListParamsSchema as br, douyinFetcher as bt, prefix as c, createBoundBilibiliApi as ci, createBoundKuaishouApi as cn, KuaishouVideoParamsSchema as cr, createSearchKeywordNode as ct, globalStatistics as d, getDouyinData as di, createDouyinRoutes as dn, DouyinDanmakuParamsSchema as dr, createViewPictureNode as dt, emitLogDebug as ei, CommentType as en, xiaohongshuSign as er, createLineBreakNode as et, groupStatistics as f, getKuaishouData as fi, createBoundDouyinApi as fn, DouyinEmojiListParamsSchema as fr, createVoteNode as ft, changeBotID as g, ApiError as gn, DouyinMethodRoutes as gr, AmagiBase as gt, bilibiliPushList as h, createBilibiliRoutes as hn, DouyinLiveRoomParamsSchema as hr, normalizeRichTextNodes as ht, update as i, emitLogWarn as ii, createBoundXiaohongshuApi as in, KuaishouMethodRoutes as ir, createLotteryNode as it, template_default as j, getHeadersAndData as jn, BilibiliBv2AvParamsSchema as jr, KuaishouApiRoutes as jt, task as k, fetchData as kn, BilibiliBangumiInfoParamsSchema as kr, DouyinApiRoutes as kt, xiaohongshuAPP as l, bilibiliApiUrls as li, kuaishou$1 as ln, DouyinCommentParamsSchema as lr, createTextNode as lt, bilibiliPush as m, bilibiliUtils as mn, DouyinHotWordsParamsSchema as mr, extractRichTextPlainText as mt, kkkUpdateCommand as n, emitLogInfo as ni, xiaohongshuUtils as nn, KuaishouEmojiParamsSchema as nr, createListItemNode as nt, douyinAPP as o, emitNetworkRetry as oi, kuaishouUtils as on, KuaishouUserWorkListParamsSchema as or, createParagraphNode as ot, qrLogin as p, Root as pi, douyin$1 as pn, DouyinEmojiProParamsSchema as pr, createWebLinkNode as pt, createBlockquoteNode as q, validateBilibiliParams as qn, BilibiliVideoParamsSchema as qr, XiaohongshuFetcherMethods as qt, kkkUpdateTest as r, emitLogMark as ri, createXiaohongshuRoutes as rn, KuaishouLiveRoomInfoParamsSchema as rr, createListNode as rt, kuaishouAPP as s, bilibili$1 as si, createKuaishouRoutes as sn, KuaishouValidationSchemas as sr, createRichTextDocument as st, kkkUpdate as t, emitLogError as ti, createAmagiClient as tn, KuaishouCommentParamsSchema as tr, createLinkCardNode as tt, testPush as u, getBilibiliData as ui, douyinUtils as un, DouyinCommentReplyParamsSchema as ur, createTopicNode as ut, douyinPushList as v, handleError as vn, DouyinQrcodeParamsSchema as vr, SOFT_ERROR_CODES as vt, help as w, qtparam as wn, BilibiliApplyCaptchaParamsSchema as wr, CreateApp as wt, setbiliPush as x, parseDmSegMobileReply as xn, DouyinUserParamsSchema as xr, kuaishouFetcher as xt, forcePush as y, bilibiliErrorCodeMap as yn, DouyinSearchParamsSchema as yr, bilibiliFetcher as yt, initAllDatabases as z, douyinFetcher$1 as zn, BilibiliLoginParamsSchema as zr, BilibiliMethodToFetcher as zt };
44363
+ export { createImageNode as $, XiaohongshuMethodRoutes as $n, emitHttpRequest as $r, DynamicType as $t, testWrapWithErrorHandler as A, logger$2 as An, BilibiliAv2BvParamsSchema as Ar, BilibiliMethodMapping as At, StatisticsDBBase as B, kuaishouApiUrls as Bn, BilibiliLiveParamsSchema as Br, BilibiliInternalMethods as Bt, changelog as C, parseDmSegMobileReply as Cn, DouyinUserParamsSchema as Cr, reloadAmagiConfig as Ct, dylogin as D, httpLogger as Dn, BilibiliArticleCardParamsSchema as Dr, amagi as Dt, biLogin as E, qtparam as En, BilibiliApplyCaptchaParamsSchema as Er, CreateApp as Et, douyinDBInstance as F, createBoundXiaohongshuFetcher as Fn, BilibiliCommentParamsSchema as Fr, XiaohongshuApiRoutes as Ft, renderRichTextToReact as G, bilibiliFetcher$1 as Gn, BilibiliUserParamsSchema as Gr, KuaishouFetcherMethods as Gt, BilibiliDBBase as H, createBoundDouyinFetcher as Hn, BilibiliMethodRoutes as Hr, DouyinFetcherMethods as Ht, getBilibiliDB as I, xiaohongshuFetcher$1 as In, BilibiliCommentReplyParamsSchema as Ir, XiaohongshuMethodMapping as It, createCodeBlockNode as J, createSuccessResponse$1 as Jn, BilibiliVideoDownloadParamsSchema as Jr, MethodMaps as Jt, createAtNode as K, createBoundBilibiliFetcher as Kn, BilibiliValidateCaptchaParamsSchema as Kr, KuaishouInternalMethods as Kt, getDouyinDB as L, createBoundKuaishouFetcher as Ln, BilibiliDanmakuParamsSchema as Lr, getApiRoute as Lt, webConfig as M, fetchResponse as Mn, BilibiliBangumiStreamParamsSchema as Mr, DouyinMethodMapping as Mt, bilibiliDBInstance as N, getHeadersAndData as Nn, BilibiliBv2AvParamsSchema as Nr, KuaishouApiRoutes as Nt, removeOldFiles as O, initLogger as On, BilibiliArticleInfoParamsSchema as Or, amagiClient as Ot, cleanOldDynamicCache as P, isNetworkErrorResult as Pn, BilibiliColumnInfoParamsSchema as Pr, KuaishouMethodMapping as Pt, createHorizontalRuleNode as Q, validateXiaohongshuParams as Qn, emitApiSuccess as Qr, toFetcherMethod as Qt, getStatisticsDB as R, kuaishouFetcher$1 as Rn, BilibiliDynamicParamsSchema as Rr, getEnglishMethodName as Rt, setdyPush as S, wbi_sign as Sn, DouyinUserListParamsSchema as Sr, registerAmagiReloadListener as St, version as T, bv2av as Tn, DouyinWorkParamsSchema as Tr, xiaohongshuFetcher as Tt, reactServerRender as U, douyinApiUrls as Un, BilibiliQrcodeParamsSchema as Ur, DouyinInternalMethods as Ut, DouyinDBBase as V, douyinFetcher$1 as Vn, BilibiliLoginParamsSchema as Vr, BilibiliMethodToFetcher as Vt, renderVideoPreviewPage as W, douyinSign as Wn, BilibiliQrcodeStatusParamsSchema as Wr, DouyinMethodToFetcher as Wt, createHashtagNode as X, validateDouyinParams as Xn, amagiEvents as Xr, XiaohongshuInternalMethods as Xt, createEmojiNode as Y, validateBilibiliParams as Yn, BilibiliVideoParamsSchema as Yr, XiaohongshuFetcherMethods as Yt, createHeadingNode as Z, validateKuaishouParams as Zn, emitApiError as Zr, XiaohongshuMethodToFetcher as Zt, douyinPush as _, createBilibiliRoutes as _n, DouyinLiveRoomParamsSchema as _r, AmagiError as _t, bilibiliAPP as a, emitLogMark as ai, createXiaohongshuRoutes as an, KuaishouLiveRoomInfoParamsSchema as ar, createMentionNode as at, globalIgnore as b, handleError as bn, DouyinQrcodeParamsSchema as br, douyinFetcher as bt, prefix as c, emitNetworkRetry as ci, kuaishouUtils as cn, KuaishouUserWorkListParamsSchema as cr, createSearchKeywordNode as ct, globalStatistics as d, bilibiliApiUrls as di, kuaishou$1 as dn, DouyinCommentParamsSchema as dr, createViewPictureNode as dt, emitHttpResponse as ei, AdditionalType as en, XiaohongshuValidationSchemas as er, createLineBreakNode as et, groupStatistics as f, getBilibiliData as fi, douyinUtils as fn, DouyinCommentReplyParamsSchema as fr, createVoteNode as ft, changeBotID as g, bilibiliUtils as gn, DouyinHotWordsParamsSchema as gr, AmagiBase as gt, bilibiliPushList as h, Root as hi, douyin$1 as hn, DouyinEmojiProParamsSchema as hr, normalizeRichTextNodes as ht, update as i, emitLogInfo as ii, xiaohongshuUtils as in, KuaishouEmojiParamsSchema as ir, createLotteryNode as it, template_default as j, fetchData as jn, BilibiliBangumiInfoParamsSchema as jr, DouyinApiRoutes as jt, task as k, logMiddleware as kn, BilibiliArticleParamsSchema as kr, BilibiliApiRoutes as kt, xiaohongshuAPP as l, bilibili$1 as li, createKuaishouRoutes as ln, KuaishouValidationSchemas as lr, createTextNode as lt, bilibiliPush as m, getKuaishouData as mi, createBoundDouyinApi as mn, DouyinEmojiListParamsSchema as mr, extractRichTextPlainText as mt, kkkUpdateCommand as n, emitLogDebug as ni, CommentType as nn, xiaohongshuSign as nr, createListItemNode as nt, douyinAPP as o, emitLogWarn as oi, createBoundXiaohongshuApi as on, KuaishouMethodRoutes as or, createParagraphNode as ot, qrLogin as p, getDouyinData as pi, createDouyinRoutes as pn, DouyinDanmakuParamsSchema as pr, createWebLinkNode as pt, createBlockquoteNode as q, createErrorResponse as qn, BilibiliValidationSchemas as qr, KuaishouMethodToFetcher as qt, kkkUpdateTest as r, emitLogError as ri, createAmagiClient as rn, KuaishouCommentParamsSchema as rr, createListNode as rt, kuaishouAPP as s, emitNetworkError as si, xiaohongshu$1 as sn, KuaishouUserProfileParamsSchema as sr, createRichTextDocument as st, kkkUpdate as t, emitLog as ti, MajorType as tn, xiaohongshuApiUrls as tr, createLinkCardNode as tt, testPush as u, createBoundBilibiliApi as ui, createBoundKuaishouApi as un, KuaishouVideoParamsSchema as ur, createTopicNode as ut, douyinPushList as v, ApiError as vn, DouyinMethodRoutes as vr, SOFT_ERROR_CODES as vt, help as w, av2bv as wn, DouyinValidationSchemas as wr, softFetch as wt, setbiliPush as x, bilibiliErrorCodeMap as xn, DouyinSearchParamsSchema as xr, kuaishouFetcher as xt, forcePush as y, ValidationError as yn, DouyinMusicParamsSchema as yr, bilibiliFetcher as yt, initAllDatabases as z, kuaishouSign as zn, BilibiliEmojiParamsSchema as zr, BilibiliFetcherMethods as zt };
package/lib/root.js CHANGED
@@ -1,2 +1,2 @@
1
- import { pi as Root } from "./core_chunk/main.js";
1
+ import { hi as Root } from "./core_chunk/main.js";
2
2
  export { Root };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karin-plugin-kkk",
3
- "version": "2.40.1",
3
+ "version": "2.40.2",
4
4
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
5
5
  "keywords": [
6
6
  "karin",