karin-plugin-kkk 2.40.0 → 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,20 @@
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
+
12
+ ## [2.40.1](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.0...v2.40.1) (2026-07-19)
13
+
14
+
15
+ ### 💄 UI 优化
16
+
17
+ * 微调 `#kkk` 版本 ([82aa4e3](https://github.com/ikenxuan/karin-plugin-kkk/commit/82aa4e3cf5dc27e6ba69f0936bbc3ff2a59025a5))
18
+
5
19
  ## [2.40.0](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.39.0...v2.40.0) (2026-07-18)
6
20
 
7
21
 
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "2.40.0",
3
- "buildTime": "2026-07-18T20:58:47.957Z",
4
- "buildTimestamp": 1784408327958,
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": "2359a2359b12307d77550dfffa198d0036a78a04",
9
- "shortCommitHash": "2359a235"
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
  /**
@@ -27787,30 +27823,30 @@ var RuntimeReport = import_react.memo((props) => {
27787
27823
  };
27788
27824
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
27789
27825
  ...props,
27790
- className: "relative min-h-[1820px] overflow-hidden",
27826
+ className: "relative min-h-455 overflow-hidden",
27791
27827
  style: { backgroundColor: palette.background },
27792
27828
  children: [
27793
27829
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27794
27830
  className: "pointer-events-none absolute inset-0 z-0 overflow-hidden",
27795
27831
  children: [
27796
27832
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27797
- className: "absolute -left-[520px] -top-[480px] h-[1350px] w-[1500px] rounded-full blur-[230px]",
27833
+ className: "absolute -left-130 -top-120 h-337.5 w-375 rounded-full blur-[230px]",
27798
27834
  style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 70%)` }
27799
27835
  }),
27800
27836
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27801
- className: "absolute -right-[520px] top-[32%] h-[1250px] w-[1200px] rounded-full blur-[240px]",
27837
+ className: "absolute -right-130 top-[32%] h-312.5 w-300 rounded-full blur-[240px]",
27802
27838
  style: { background: `radial-gradient(ellipse at center, ${palette.glowSecondary} 0%, transparent 72%)` }
27803
27839
  }),
27804
27840
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27805
- className: "absolute -bottom-[480px] -left-[320px] h-[1150px] w-[1350px] rounded-full blur-[260px]",
27841
+ className: "absolute -bottom-120 -left-80 h-287.5 w-337.5 rounded-full blur-[260px]",
27806
27842
  style: { background: `radial-gradient(ellipse at center, ${palette.glowWarm} 0%, transparent 72%)` }
27807
27843
  }),
27808
27844
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27809
- className: "absolute -bottom-[360px] -right-[420px] h-[900px] w-[1000px] rounded-full blur-[240px]",
27845
+ className: "absolute -bottom-90 -right-105 h-225 w-250 rounded-full blur-[240px]",
27810
27846
  style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 72%)` }
27811
27847
  }),
27812
27848
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27813
- className: "absolute -right-16 top-[110px] select-none text-[240px] font-black leading-none tracking-[-0.06em] opacity-[0.03]",
27849
+ className: "absolute left-115 top-200 select-none text-[400px] -rotate-90 font-black leading-none tracking-[-0.06em] opacity-[0.03]",
27814
27850
  style: { color: palette.bgWord },
27815
27851
  children: "RUNTIME"
27816
27852
  })
@@ -27864,7 +27900,7 @@ var RuntimeReport = import_react.memo((props) => {
27864
27900
  })
27865
27901
  }),
27866
27902
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("main", {
27867
- className: "relative z-10 px-[88px] pb-[64px] pt-[80px]",
27903
+ className: "relative z-10 px-22 pb-16 pt-20",
27868
27904
  children: [
27869
27905
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
27870
27906
  className: "relative",
@@ -27894,7 +27930,7 @@ var RuntimeReport = import_react.memo((props) => {
27894
27930
  })]
27895
27931
  }),
27896
27932
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27897
- className: "mt-[76px]",
27933
+ className: "mt-19",
27898
27934
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
27899
27935
  className: "whitespace-nowrap text-[136px] font-black leading-none tracking-[-0.05em] text-foreground",
27900
27936
  children: "运行环境"
@@ -27904,10 +27940,10 @@ var RuntimeReport = import_react.memo((props) => {
27904
27940
  })]
27905
27941
  }),
27906
27942
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27907
- className: "relative mt-[92px]",
27943
+ className: "relative mt-23",
27908
27944
  children: [
27909
27945
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27910
- className: "pointer-events-none absolute -left-16 -top-24 h-[420px] w-[820px] rounded-full blur-[150px]",
27946
+ className: "pointer-events-none absolute -left-16 -top-24 h-105 w-205 rounded-full blur-[150px]",
27911
27947
  style: { background: palette.versionGlow }
27912
27948
  }),
27913
27949
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -27941,7 +27977,7 @@ var RuntimeReport = import_react.memo((props) => {
27941
27977
  })]
27942
27978
  }),
27943
27979
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27944
- className: "relative mt-[44px] whitespace-nowrap font-mono text-[22px] font-semibold text-foreground/28",
27980
+ className: "relative mt-11 whitespace-nowrap font-mono text-[22px] font-semibold text-foreground/28",
27945
27981
  children: [
27946
27982
  "构建 ",
27947
27983
  data.build.shortCommitHash ?? "未知",
@@ -27954,7 +27990,7 @@ var RuntimeReport = import_react.memo((props) => {
27954
27990
  ]
27955
27991
  }),
27956
27992
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
27957
- className: "relative mt-[120px]",
27993
+ className: "relative mt-30",
27958
27994
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27959
27995
  className: "relative flex items-center gap-5",
27960
27996
  children: [
@@ -27968,12 +28004,12 @@ var RuntimeReport = import_react.memo((props) => {
27968
28004
  children: "环境摘要"
27969
28005
  }),
27970
28006
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27971
- className: "ml-2 h-2 w-[88px] rounded-full",
28007
+ className: "ml-2 h-2 w-22 rounded-full",
27972
28008
  style: { background: palette.barAccent }
27973
28009
  })
27974
28010
  ]
27975
28011
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27976
- className: "relative mt-[64px] grid grid-cols-2 gap-x-[72px] gap-y-[64px]",
28012
+ className: "relative mt-16 grid grid-cols-2 gap-x-18 gap-y-16",
27977
28013
  children: [
27978
28014
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
27979
28015
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -28043,7 +28079,7 @@ var RuntimeReport = import_react.memo((props) => {
28043
28079
  })]
28044
28080
  }),
28045
28081
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28046
- className: "mt-5 h-[12px] w-full max-w-[420px] overflow-hidden rounded-full bg-foreground/8",
28082
+ className: "mt-5 h-3 w-full max-w-105 overflow-hidden rounded-full bg-foreground/8",
28047
28083
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28048
28084
  className: "h-full rounded-full",
28049
28085
  style: {
@@ -28059,7 +28095,7 @@ var RuntimeReport = import_react.memo((props) => {
28059
28095
  children: "处理器"
28060
28096
  }),
28061
28097
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28062
- className: "mt-3 line-clamp-2 break-words text-[32px] font-black leading-[1.4] text-foreground/78",
28098
+ className: "mt-3 line-clamp-2 wrap-break-word text-[32px] font-black leading-[1.4] text-foreground/78",
28063
28099
  children: data.resources.cpuModel
28064
28100
  }),
28065
28101
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -28071,7 +28107,7 @@ var RuntimeReport = import_react.memo((props) => {
28071
28107
  })]
28072
28108
  }),
28073
28109
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
28074
- className: "relative mt-[130px]",
28110
+ className: "relative mt-32.5",
28075
28111
  children: [
28076
28112
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28077
28113
  className: "relative flex items-center gap-5",
@@ -28086,7 +28122,7 @@ var RuntimeReport = import_react.memo((props) => {
28086
28122
  children: "仅展示当前版本"
28087
28123
  }),
28088
28124
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28089
- className: "ml-2 h-2 w-[88px] rounded-full",
28125
+ className: "ml-2 h-2 w-22 rounded-full",
28090
28126
  style: { background: palette.barAccent }
28091
28127
  })
28092
28128
  ]
@@ -28097,7 +28133,7 @@ var RuntimeReport = import_react.memo((props) => {
28097
28133
  children: "本版变更"
28098
28134
  }),
28099
28135
  data.releaseNotes.available ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28100
- className: "runtime-release-notes relative mt-[60px]",
28136
+ className: "runtime-release-notes relative mt-15",
28101
28137
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Markdown, {
28102
28138
  components: {
28103
28139
  h2: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
@@ -28127,7 +28163,7 @@ var RuntimeReport = import_react.memo((props) => {
28127
28163
  children
28128
28164
  }),
28129
28165
  li: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", {
28130
- className: `relative break-words text-[32px] font-semibold leading-[1.65] before:absolute before:-left-8 before:top-[0.74em] before:h-2.5 before:w-2.5 before:rounded-full ${palette.noteBulletClass}`,
28166
+ className: `relative wrap-break-word text-[32px] font-semibold leading-[1.65] before:absolute before:-left-8 before:top-[0.74em] before:h-2.5 before:w-2.5 before:rounded-full ${palette.noteBulletClass}`,
28131
28167
  style: { color: palette.noteBody },
28132
28168
  children
28133
28169
  }),
@@ -28153,7 +28189,7 @@ var RuntimeReport = import_react.memo((props) => {
28153
28189
  children: data.releaseNotes.markdown
28154
28190
  })
28155
28191
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28156
- className: "relative mt-[60px] flex items-start gap-6",
28192
+ className: "relative mt-15 flex items-start gap-6",
28157
28193
  style: { color: palette.warnText },
28158
28194
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "mt-1 h-11 w-11 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28159
28195
  className: "text-[34px] font-black",
@@ -28166,7 +28202,7 @@ var RuntimeReport = import_react.memo((props) => {
28166
28202
  ]
28167
28203
  }),
28168
28204
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("footer", {
28169
- className: "mt-[80px] flex items-end justify-between gap-12 whitespace-nowrap text-[22px] font-semibold text-foreground/32",
28205
+ className: "mt-20 flex items-end justify-between gap-12 whitespace-nowrap text-[22px] font-semibold text-foreground/32",
28170
28206
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "仅包含经过脱敏的本地运行信息" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28171
28207
  className: "font-mono",
28172
28208
  children: data.snapshotAt
@@ -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 };
@@ -13033,12 +13033,12 @@
13033
13033
  top: calc(var(--spacing) * -100);
13034
13034
  }
13035
13035
 
13036
- .-top-125 {
13037
- top: calc(var(--spacing) * -125);
13036
+ .-top-120 {
13037
+ top: calc(var(--spacing) * -120);
13038
13038
  }
13039
13039
 
13040
- .-top-\[480px\] {
13041
- top: -480px;
13040
+ .-top-125 {
13041
+ top: calc(var(--spacing) * -125);
13042
13042
  }
13043
13043
 
13044
13044
  .top-0 {
@@ -13109,6 +13109,10 @@
13109
13109
  top: calc(var(--spacing) * 150);
13110
13110
  }
13111
13111
 
13112
+ .top-200 {
13113
+ top: calc(var(--spacing) * 200);
13114
+ }
13115
+
13112
13116
  .top-450 {
13113
13117
  top: calc(var(--spacing) * 450);
13114
13118
  }
@@ -13137,10 +13141,6 @@
13137
13141
  top: 80%;
13138
13142
  }
13139
13143
 
13140
- .top-\[110px\] {
13141
- top: 110px;
13142
- }
13143
-
13144
13144
  .-right-1 {
13145
13145
  right: calc(var(--spacing) * -1);
13146
13146
  }
@@ -13185,12 +13185,12 @@
13185
13185
  right: calc(var(--spacing) * -100);
13186
13186
  }
13187
13187
 
13188
- .-right-\[420px\] {
13189
- right: -420px;
13188
+ .-right-105 {
13189
+ right: calc(var(--spacing) * -105);
13190
13190
  }
13191
13191
 
13192
- .-right-\[520px\] {
13193
- right: -520px;
13192
+ .-right-130 {
13193
+ right: calc(var(--spacing) * -130);
13194
13194
  }
13195
13195
 
13196
13196
  .right-0 {
@@ -13321,16 +13321,12 @@
13321
13321
  bottom: calc(var(--spacing) * -75);
13322
13322
  }
13323
13323
 
13324
- .-bottom-120 {
13325
- bottom: calc(var(--spacing) * -120);
13324
+ .-bottom-90 {
13325
+ bottom: calc(var(--spacing) * -90);
13326
13326
  }
13327
13327
 
13328
- .-bottom-\[360px\] {
13329
- bottom: -360px;
13330
- }
13331
-
13332
- .-bottom-\[480px\] {
13333
- bottom: -480px;
13328
+ .-bottom-120 {
13329
+ bottom: calc(var(--spacing) * -120);
13334
13330
  }
13335
13331
 
13336
13332
  .bottom-0 {
@@ -13457,16 +13453,16 @@
13457
13453
  left: calc(var(--spacing) * -75);
13458
13454
  }
13459
13455
 
13460
- .-left-100 {
13461
- left: calc(var(--spacing) * -100);
13456
+ .-left-80 {
13457
+ left: calc(var(--spacing) * -80);
13462
13458
  }
13463
13459
 
13464
- .-left-\[320px\] {
13465
- left: -320px;
13460
+ .-left-100 {
13461
+ left: calc(var(--spacing) * -100);
13466
13462
  }
13467
13463
 
13468
- .-left-\[520px\] {
13469
- left: -520px;
13464
+ .-left-130 {
13465
+ left: calc(var(--spacing) * -130);
13470
13466
  }
13471
13467
 
13472
13468
  .left-0 {
@@ -13553,6 +13549,10 @@
13553
13549
  left: calc(var(--spacing) * 100);
13554
13550
  }
13555
13551
 
13552
+ .left-115 {
13553
+ left: calc(var(--spacing) * 115);
13554
+ }
13555
+
13556
13556
  .left-\[-20\%\] {
13557
13557
  left: -20%;
13558
13558
  }
@@ -13775,6 +13775,10 @@
13775
13775
  margin-top: calc(var(--spacing) * 10);
13776
13776
  }
13777
13777
 
13778
+ .mt-11 {
13779
+ margin-top: calc(var(--spacing) * 11);
13780
+ }
13781
+
13778
13782
  .mt-12 {
13779
13783
  margin-top: calc(var(--spacing) * 12);
13780
13784
  }
@@ -13799,18 +13803,34 @@
13799
13803
  margin-top: calc(var(--spacing) * 18);
13800
13804
  }
13801
13805
 
13806
+ .mt-19 {
13807
+ margin-top: calc(var(--spacing) * 19);
13808
+ }
13809
+
13802
13810
  .mt-20 {
13803
13811
  margin-top: calc(var(--spacing) * 20);
13804
13812
  }
13805
13813
 
13814
+ .mt-23 {
13815
+ margin-top: calc(var(--spacing) * 23);
13816
+ }
13817
+
13806
13818
  .mt-25 {
13807
13819
  margin-top: calc(var(--spacing) * 25);
13808
13820
  }
13809
13821
 
13822
+ .mt-30 {
13823
+ margin-top: calc(var(--spacing) * 30);
13824
+ }
13825
+
13810
13826
  .mt-32 {
13811
13827
  margin-top: calc(var(--spacing) * 32);
13812
13828
  }
13813
13829
 
13830
+ .mt-32\.5 {
13831
+ margin-top: calc(var(--spacing) * 32.5);
13832
+ }
13833
+
13814
13834
  .mt-35 {
13815
13835
  margin-top: calc(var(--spacing) * 35);
13816
13836
  }
@@ -13819,38 +13839,6 @@
13819
13839
  margin-top: 37.5px;
13820
13840
  }
13821
13841
 
13822
- .mt-\[44px\] {
13823
- margin-top: 44px;
13824
- }
13825
-
13826
- .mt-\[60px\] {
13827
- margin-top: 60px;
13828
- }
13829
-
13830
- .mt-\[64px\] {
13831
- margin-top: 64px;
13832
- }
13833
-
13834
- .mt-\[76px\] {
13835
- margin-top: 76px;
13836
- }
13837
-
13838
- .mt-\[80px\] {
13839
- margin-top: 80px;
13840
- }
13841
-
13842
- .mt-\[92px\] {
13843
- margin-top: 92px;
13844
- }
13845
-
13846
- .mt-\[120px\] {
13847
- margin-top: 120px;
13848
- }
13849
-
13850
- .mt-\[130px\] {
13851
- margin-top: 130px;
13852
- }
13853
-
13854
13842
  .mt-auto {
13855
13843
  margin-top: auto;
13856
13844
  }
@@ -14370,6 +14358,10 @@
14370
14358
  height: calc(var(--spacing) * 100);
14371
14359
  }
14372
14360
 
14361
+ .h-105 {
14362
+ height: calc(var(--spacing) * 105);
14363
+ }
14364
+
14373
14365
  .h-110 {
14374
14366
  height: calc(var(--spacing) * 110);
14375
14367
  }
@@ -14434,10 +14426,22 @@
14434
14426
  height: calc(var(--spacing) * 280);
14435
14427
  }
14436
14428
 
14429
+ .h-287\.5 {
14430
+ height: calc(var(--spacing) * 287.5);
14431
+ }
14432
+
14437
14433
  .h-300 {
14438
14434
  height: calc(var(--spacing) * 300);
14439
14435
  }
14440
14436
 
14437
+ .h-312\.5 {
14438
+ height: calc(var(--spacing) * 312.5);
14439
+ }
14440
+
14441
+ .h-337\.5 {
14442
+ height: calc(var(--spacing) * 337.5);
14443
+ }
14444
+
14441
14445
  .h-350 {
14442
14446
  height: calc(var(--spacing) * 350);
14443
14447
  }
@@ -14462,10 +14466,6 @@
14462
14466
  height: 1em;
14463
14467
  }
14464
14468
 
14465
- .h-\[12px\] {
14466
- height: 12px;
14467
- }
14468
-
14469
14469
  .h-\[24\%\] {
14470
14470
  height: 24%;
14471
14471
  }
@@ -14502,26 +14502,6 @@
14502
14502
  height: 300px;
14503
14503
  }
14504
14504
 
14505
- .h-\[420px\] {
14506
- height: 420px;
14507
- }
14508
-
14509
- .h-\[900px\] {
14510
- height: 900px;
14511
- }
14512
-
14513
- .h-\[1150px\] {
14514
- height: 1150px;
14515
- }
14516
-
14517
- .h-\[1250px\] {
14518
- height: 1250px;
14519
- }
14520
-
14521
- .h-\[1350px\] {
14522
- height: 1350px;
14523
- }
14524
-
14525
14505
  .h-\[calc\(100\%-160px\)\] {
14526
14506
  height: calc(100% - 160px);
14527
14507
  }
@@ -14614,12 +14594,12 @@
14614
14594
  min-height: calc(var(--spacing) * 360);
14615
14595
  }
14616
14596
 
14617
- .min-h-500 {
14618
- min-height: calc(var(--spacing) * 500);
14597
+ .min-h-455 {
14598
+ min-height: calc(var(--spacing) * 455);
14619
14599
  }
14620
14600
 
14621
- .min-h-\[1820px\] {
14622
- min-height: 1820px;
14601
+ .min-h-500 {
14602
+ min-height: calc(var(--spacing) * 500);
14623
14603
  }
14624
14604
 
14625
14605
  .min-h-\[calc\(100vh-200px\)\] {
@@ -14718,6 +14698,10 @@
14718
14698
  width: calc(var(--spacing) * 20);
14719
14699
  }
14720
14700
 
14701
+ .w-22 {
14702
+ width: calc(var(--spacing) * 22);
14703
+ }
14704
+
14721
14705
  .w-23 {
14722
14706
  width: calc(var(--spacing) * 23);
14723
14707
  }
@@ -14870,6 +14854,10 @@
14870
14854
  width: calc(var(--spacing) * 200);
14871
14855
  }
14872
14856
 
14857
+ .w-205 {
14858
+ width: calc(var(--spacing) * 205);
14859
+ }
14860
+
14873
14861
  .w-225 {
14874
14862
  width: calc(var(--spacing) * 225);
14875
14863
  }
@@ -14898,6 +14886,10 @@
14898
14886
  width: calc(var(--spacing) * 315);
14899
14887
  }
14900
14888
 
14889
+ .w-337\.5 {
14890
+ width: calc(var(--spacing) * 337.5);
14891
+ }
14892
+
14901
14893
  .w-350 {
14902
14894
  width: calc(var(--spacing) * 350);
14903
14895
  }
@@ -14906,6 +14898,10 @@
14906
14898
  width: calc(var(--spacing) * 360);
14907
14899
  }
14908
14900
 
14901
+ .w-375 {
14902
+ width: calc(var(--spacing) * 375);
14903
+ }
14904
+
14909
14905
  .w-400 {
14910
14906
  width: calc(var(--spacing) * 400);
14911
14907
  }
@@ -14950,10 +14946,6 @@
14950
14946
  width: 72px;
14951
14947
  }
14952
14948
 
14953
- .w-\[88px\] {
14954
- width: 88px;
14955
- }
14956
-
14957
14949
  .w-\[90\%\] {
14958
14950
  width: 90%;
14959
14951
  }
@@ -14970,26 +14962,6 @@
14970
14962
  width: 300px;
14971
14963
  }
14972
14964
 
14973
- .w-\[820px\] {
14974
- width: 820px;
14975
- }
14976
-
14977
- .w-\[1000px\] {
14978
- width: 1000px;
14979
- }
14980
-
14981
- .w-\[1200px\] {
14982
- width: 1200px;
14983
- }
14984
-
14985
- .w-\[1350px\] {
14986
- width: 1350px;
14987
- }
14988
-
14989
- .w-\[1500px\] {
14990
- width: 1500px;
14991
- }
14992
-
14993
14965
  .w-\[calc\(100\%-160px\)\] {
14994
14966
  width: calc(100% - 160px);
14995
14967
  }
@@ -15038,6 +15010,10 @@
15038
15010
  max-width: calc(var(--spacing) * 80);
15039
15011
  }
15040
15012
 
15013
+ .max-w-105 {
15014
+ max-width: calc(var(--spacing) * 105);
15015
+ }
15016
+
15041
15017
  .max-w-112\.5 {
15042
15018
  max-width: calc(var(--spacing) * 112.5);
15043
15019
  }
@@ -15074,10 +15050,6 @@
15074
15050
  max-width: 310px;
15075
15051
  }
15076
15052
 
15077
- .max-w-\[420px\] {
15078
- max-width: 420px;
15079
- }
15080
-
15081
15053
  .max-w-\[650px\] {
15082
15054
  max-width: 650px;
15083
15055
  }
@@ -15260,6 +15232,10 @@
15260
15232
  rotate: -20deg;
15261
15233
  }
15262
15234
 
15235
+ .-rotate-90 {
15236
+ rotate: -90deg;
15237
+ }
15238
+
15263
15239
  .rotate-12 {
15264
15240
  rotate: 12deg;
15265
15241
  }
@@ -15620,12 +15596,12 @@
15620
15596
  column-gap: calc(var(--spacing) * 16);
15621
15597
  }
15622
15598
 
15623
- .gap-x-24 {
15624
- column-gap: calc(var(--spacing) * 24);
15599
+ .gap-x-18 {
15600
+ column-gap: calc(var(--spacing) * 18);
15625
15601
  }
15626
15602
 
15627
- .gap-x-\[72px\] {
15628
- column-gap: 72px;
15603
+ .gap-x-24 {
15604
+ column-gap: calc(var(--spacing) * 24);
15629
15605
  }
15630
15606
 
15631
15607
  :where(.-space-x-5 > :not(:last-child)) {
@@ -15700,10 +15676,6 @@
15700
15676
  row-gap: calc(var(--spacing) * 16);
15701
15677
  }
15702
15678
 
15703
- .gap-y-\[64px\] {
15704
- row-gap: 64px;
15705
- }
15706
-
15707
15679
  :where(.divide-y > :not(:last-child)) {
15708
15680
  --tw-divide-y-reverse: 0;
15709
15681
  border-bottom-style: var(--tw-border-style);
@@ -17476,6 +17448,10 @@
17476
17448
  padding-inline: calc(var(--spacing) * 20);
17477
17449
  }
17478
17450
 
17451
+ .px-22 {
17452
+ padding-inline: calc(var(--spacing) * 22);
17453
+ }
17454
+
17479
17455
  .px-24 {
17480
17456
  padding-inline: calc(var(--spacing) * 24);
17481
17457
  }
@@ -17492,10 +17468,6 @@
17492
17468
  padding-inline: .48em;
17493
17469
  }
17494
17470
 
17495
- .px-\[88px\] {
17496
- padding-inline: 88px;
17497
- }
17498
-
17499
17471
  .py-0\.5 {
17500
17472
  padding-block: calc(var(--spacing) * .5);
17501
17473
  }
@@ -17644,10 +17616,6 @@
17644
17616
  padding-top: calc(var(--spacing) * 40);
17645
17617
  }
17646
17618
 
17647
- .pt-\[80px\] {
17648
- padding-top: 80px;
17649
- }
17650
-
17651
17619
  .pr-0 {
17652
17620
  padding-right: 0;
17653
17621
  }
@@ -17740,10 +17708,6 @@
17740
17708
  padding-bottom: calc(var(--spacing) * 48);
17741
17709
  }
17742
17710
 
17743
- .pb-\[64px\] {
17744
- padding-bottom: 64px;
17745
- }
17746
-
17747
17711
  .pl-2 {
17748
17712
  padding-left: calc(var(--spacing) * 2);
17749
17713
  }
@@ -18177,8 +18141,8 @@
18177
18141
  font-size: 220px;
18178
18142
  }
18179
18143
 
18180
- .text-\[240px\] {
18181
- font-size: 240px;
18144
+ .text-\[400px\] {
18145
+ font-size: 400px;
18182
18146
  }
18183
18147
 
18184
18148
  .leading-10 {
@@ -18496,7 +18460,7 @@
18496
18460
  letter-spacing: var(--tracking-widest);
18497
18461
  }
18498
18462
 
18499
- .break-words, .wrap-break-word {
18463
+ .wrap-break-word {
18500
18464
  overflow-wrap: break-word;
18501
18465
  }
18502
18466
 
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.0",
3
+ "version": "2.40.2",
4
4
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
5
5
  "keywords": [
6
6
  "karin",
@@ -89,5 +89,5 @@
89
89
  "web": "./lib/web.config.js",
90
90
  "ts-web": "./src/web.config.ts"
91
91
  },
92
- "timestamp": "2026-07-18T20:29:34.500Z"
92
+ "timestamp": "2026-07-19T04:05:14.269Z"
93
93
  }