karin-plugin-kkk 2.40.1 → 2.40.3

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.3](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.2...v2.40.3) (2026-07-29)
6
+
7
+
8
+ ### 💄 UI 优化
9
+
10
+ * **douyiin:** 优化图文作品详情组件中描述板块的行间距 ([43d6cdc](https://github.com/ikenxuan/karin-plugin-kkk/commit/43d6cdcefc51986a0ffb6feb18c32d3bbdcd9375))
11
+
12
+ ## [2.40.2](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.1...v2.40.2) (2026-07-28)
13
+
14
+
15
+ ### 🐛 错误修复
16
+
17
+ * 优化接口库客户端热重载功能 ([3e3bd9d](https://github.com/ikenxuan/karin-plugin-kkk/commit/3e3bd9d5e2c40a40158a4a6db034367895f3fd8d))
18
+
5
19
  ## [2.40.1](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.40.0...v2.40.1) (2026-07-19)
6
20
 
7
21
 
@@ -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.3",
3
+ "buildTime": "2026-07-29T21:08:11.682Z",
4
+ "buildTimestamp": 1785359291682,
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": "298910e07af729a36f76eea0b24b67c36f4dc3cd",
9
+ "shortCommitHash": "298910e0"
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
  /**
@@ -19529,7 +19565,7 @@ var DouyinPosterHeader$2 = ({ data }) => {
19529
19565
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19530
19566
  className: "min-w-0",
19531
19567
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19532
- className: "max-w-[660px] truncate text-[44px] font-black leading-tight text-foreground select-text",
19568
+ className: "max-w-165 truncate text-[44px] font-black leading-tight text-foreground select-text",
19533
19569
  children: username
19534
19570
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19535
19571
  className: "mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-[30px] text-muted",
@@ -19555,7 +19591,7 @@ var DouyinPosterHeader$2 = ({ data }) => {
19555
19591
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
19556
19592
  src: useDarkTheme ? "/image/douyin/dylogo-light.svg" : "/image/douyin/dylogo-dark.svg",
19557
19593
  alt: "抖音",
19558
- className: "mt-2 h-[68px] w-auto shrink-0 object-contain opacity-90"
19594
+ className: "mt-2 h-17 w-auto shrink-0 object-contain opacity-90"
19559
19595
  })]
19560
19596
  });
19561
19597
  };
@@ -19702,7 +19738,7 @@ var DouyinSignalLine$2 = ({ data }) => {
19702
19738
  ].map((stat) => {
19703
19739
  const Icon = stat.icon;
19704
19740
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19705
- className: "min-w-[150px]",
19741
+ className: "min-w-37.5",
19706
19742
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19707
19743
  className: "flex items-center gap-3 text-[28px] font-semibold text-muted",
19708
19744
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -19742,7 +19778,7 @@ var DouyinPosterFooter$2 = ({ data }) => {
19742
19778
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19743
19779
  className: "min-w-0",
19744
19780
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19745
- className: "max-w-[650px] truncate text-[48px] font-black leading-tight text-foreground select-text",
19781
+ className: "max-w-162.5 truncate text-[48px] font-black leading-tight text-foreground select-text",
19746
19782
  children: username
19747
19783
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19748
19784
  className: "mt-3 flex items-center gap-2 text-[30px] text-muted",
@@ -19776,7 +19812,7 @@ var DouyinPosterFooter$2 = ({ data }) => {
19776
19812
  ].map((stat) => {
19777
19813
  const Icon = stat.icon;
19778
19814
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19779
- className: "min-w-[150px]",
19815
+ className: "min-w-37.5",
19780
19816
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19781
19817
  className: "flex items-center gap-3 text-[25px] font-semibold text-muted",
19782
19818
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -19800,7 +19836,7 @@ var DouyinPosterFooter$2 = ({ data }) => {
19800
19836
  avatarUrl: avater_url,
19801
19837
  useDarkTheme,
19802
19838
  alt: "二维码",
19803
- className: "h-[300px] w-[300px]"
19839
+ className: "h-75 w-75"
19804
19840
  })
19805
19841
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19806
19842
  className: "mt-2 text-[28px] font-black text-foreground/80",
@@ -21099,7 +21135,7 @@ var DouyinPosterHeader$1 = ({ data }) => {
21099
21135
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21100
21136
  className: "min-w-0",
21101
21137
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21102
- className: "max-w-[660px] truncate text-[44px] font-black leading-tight text-foreground select-text",
21138
+ className: "max-w-165 truncate text-[44px] font-black leading-tight text-foreground select-text",
21103
21139
  children: username
21104
21140
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21105
21141
  className: "mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-[30px] text-muted",
@@ -21124,7 +21160,7 @@ var DouyinPosterHeader$1 = ({ data }) => {
21124
21160
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21125
21161
  src: useDarkTheme ? "/image/douyin/dylogo-light.svg" : "/image/douyin/dylogo-dark.svg",
21126
21162
  alt: "抖音",
21127
- className: "mt-2 h-[68px] w-auto shrink-0 object-contain opacity-90"
21163
+ className: "mt-2 h-17 w-auto shrink-0 object-contain opacity-90"
21128
21164
  })]
21129
21165
  });
21130
21166
  };
@@ -21151,7 +21187,7 @@ var DouyinPosterTitle$1 = ({ data }) => {
21151
21187
  },
21152
21188
  children: renderRichTextToReact(title, richTextOptions)
21153
21189
  }), hasDesc && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21154
- className: cn$1("mt-7 whitespace-pre-wrap select-text", !hasTitle ? "text-6xl font-bold leading-tight" : "text-5xl font-medium"),
21190
+ className: cn$1("mt-7 whitespace-pre-wrap select-text", !hasTitle ? "text-6xl font-bold" : "text-5xl font-medium", "leading-tight"),
21155
21191
  style: {
21156
21192
  wordBreak: "break-word",
21157
21193
  overflowWrap: "break-word"
@@ -21234,7 +21270,7 @@ var DouyinImageCover = ({ data }) => {
21234
21270
  })
21235
21271
  }),
21236
21272
  music && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21237
- className: "absolute bottom-12 left-24 z-30 flex max-w-[850px] items-center gap-5 text-white drop-shadow-xl",
21273
+ className: "absolute bottom-12 left-24 z-30 flex max-w-212.5 items-center gap-5 text-white drop-shadow-xl",
21238
21274
  children: [music.cover ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21239
21275
  className: "relative h-20 w-20 shrink-0",
21240
21276
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlowImage, {
@@ -21297,7 +21333,7 @@ var DouyinSignalLine$1 = ({ data }) => {
21297
21333
  ].map((stat) => {
21298
21334
  const Icon = stat.icon;
21299
21335
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21300
- className: "min-w-[150px]",
21336
+ className: "min-w-37.5",
21301
21337
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21302
21338
  className: "flex items-center gap-3 text-[28px] font-semibold text-muted",
21303
21339
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -21352,11 +21388,11 @@ var DouyinCoCreatorList$1 = ({ data, coCreatorCount }) => {
21352
21388
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21353
21389
  className: "mt-6 flex min-w-0 flex-wrap items-center gap-x-10 gap-y-6 overflow-hidden",
21354
21390
  children: [visibleCreators.map((creator, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21355
- className: "flex min-w-0 max-w-[310px] items-center gap-4",
21391
+ className: "flex min-w-0 max-w-77.5 items-center gap-4",
21356
21392
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21357
21393
  src: creator.avatar_url || data.avater_url,
21358
21394
  alt: "共创者头像",
21359
- className: "h-[72px] w-[72px] shrink-0 rounded-full object-cover shadow-xl",
21395
+ className: "h-18 w-18 shrink-0 rounded-full object-cover shadow-xl",
21360
21396
  referrerPolicy: "no-referrer",
21361
21397
  crossOrigin: "anonymous"
21362
21398
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -21397,7 +21433,7 @@ var DouyinPosterFooter$1 = ({ data }) => {
21397
21433
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21398
21434
  className: "min-w-0",
21399
21435
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21400
- className: "max-w-[650px] truncate text-[48px] font-black leading-tight text-foreground select-text",
21436
+ className: "max-w-162.5 truncate text-[48px] font-black leading-tight text-foreground select-text",
21401
21437
  children: username
21402
21438
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21403
21439
  className: "mt-3 flex items-center gap-2 text-[30px] text-muted",
@@ -21431,7 +21467,7 @@ var DouyinPosterFooter$1 = ({ data }) => {
21431
21467
  ].map((stat) => {
21432
21468
  const Icon = stat.icon;
21433
21469
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21434
- className: "min-w-[150px]",
21470
+ className: "min-w-37.5",
21435
21471
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21436
21472
  className: "flex items-center gap-3 text-[25px] font-semibold text-muted",
21437
21473
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -21455,7 +21491,7 @@ var DouyinPosterFooter$1 = ({ data }) => {
21455
21491
  avatarUrl: avater_url,
21456
21492
  useDarkTheme,
21457
21493
  alt: "二维码",
21458
- className: "h-[300px] w-[300px]"
21494
+ className: "h-75 w-75"
21459
21495
  })
21460
21496
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21461
21497
  className: "mt-2 text-[28px] font-black text-foreground/80",
@@ -23214,7 +23250,7 @@ var DouyinPosterHeader = ({ data }) => {
23214
23250
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23215
23251
  className: "min-w-0",
23216
23252
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23217
- className: "max-w-[660px] truncate text-[44px] font-black leading-tight text-foreground select-text",
23253
+ className: "max-w-165 truncate text-[44px] font-black leading-tight text-foreground select-text",
23218
23254
  children: username
23219
23255
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23220
23256
  className: "mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-[30px] text-muted",
@@ -23239,7 +23275,7 @@ var DouyinPosterHeader = ({ data }) => {
23239
23275
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
23240
23276
  src: useDarkTheme ? "/image/douyin/dylogo-light.svg" : "/image/douyin/dylogo-dark.svg",
23241
23277
  alt: "抖音",
23242
- className: "mt-2 h-[68px] w-auto shrink-0 object-contain opacity-90"
23278
+ className: "mt-2 h-17 w-auto shrink-0 object-contain opacity-90"
23243
23279
  })]
23244
23280
  });
23245
23281
  };
@@ -23289,7 +23325,7 @@ var DouyinVideoCover = ({ data }) => {
23289
23325
  className: "absolute bottom-12 right-24 z-30 text-white opacity-90 drop-shadow-2xl"
23290
23326
  }),
23291
23327
  music && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23292
- className: "absolute bottom-12 left-24 z-30 flex max-w-[850px] items-center gap-5 text-white drop-shadow-xl",
23328
+ className: "absolute bottom-12 left-24 z-30 flex max-w-212.5 items-center gap-5 text-white drop-shadow-xl",
23293
23329
  children: [music.cover ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23294
23330
  className: "relative h-20 w-20 shrink-0",
23295
23331
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlowImage, {
@@ -23344,7 +23380,7 @@ var DouyinPosterTitle = ({ data }) => {
23344
23380
  },
23345
23381
  children: renderRichTextToReact(title, richTextOptions)
23346
23382
  }), hasDesc && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23347
- className: "mt-7 max-w-[1160px] whitespace-pre-wrap text-[42px] font-medium leading-[1.48] text-muted select-text",
23383
+ className: "mt-7 max-w-290 whitespace-pre-wrap text-[42px] font-medium leading-tight text-muted select-text",
23348
23384
  style: {
23349
23385
  wordBreak: "break-word",
23350
23386
  overflowWrap: "break-word"
@@ -23384,7 +23420,7 @@ var DouyinSignalLine = ({ data }) => {
23384
23420
  ].map((stat) => {
23385
23421
  const Icon = stat.icon;
23386
23422
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23387
- className: "min-w-[150px]",
23423
+ className: "min-w-37.5",
23388
23424
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23389
23425
  className: "flex items-center gap-3 text-[28px] font-semibold text-muted",
23390
23426
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -23438,11 +23474,11 @@ var DouyinCoCreatorList = ({ data, coCreatorCount }) => {
23438
23474
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23439
23475
  className: "mt-6 flex min-w-0 flex-wrap items-center gap-x-10 gap-y-6 overflow-hidden",
23440
23476
  children: [visibleCreators.map((creator, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23441
- className: "flex min-w-0 max-w-[310px] items-center gap-4",
23477
+ className: "flex min-w-0 max-w-77.5 items-center gap-4",
23442
23478
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
23443
23479
  src: creator.avatar_url || data.avater_url,
23444
23480
  alt: "共创者头像",
23445
- className: "h-[72px] w-[72px] shrink-0 rounded-full object-cover shadow-xl",
23481
+ className: "h-18 w-18 shrink-0 rounded-full object-cover shadow-xl",
23446
23482
  referrerPolicy: "no-referrer",
23447
23483
  crossOrigin: "anonymous"
23448
23484
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -23483,7 +23519,7 @@ var DouyinPosterFooter = ({ data }) => {
23483
23519
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23484
23520
  className: "min-w-0",
23485
23521
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23486
- className: "max-w-[650px] truncate text-[48px] font-black leading-tight text-foreground select-text",
23522
+ className: "max-w-162.5 truncate text-[48px] font-black leading-tight text-foreground select-text",
23487
23523
  children: username
23488
23524
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23489
23525
  className: "mt-3 flex items-center gap-2 text-[30px] text-muted",
@@ -23517,7 +23553,7 @@ var DouyinPosterFooter = ({ data }) => {
23517
23553
  ].map((stat) => {
23518
23554
  const Icon = stat.icon;
23519
23555
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23520
- className: "min-w-[150px]",
23556
+ className: "min-w-37.5",
23521
23557
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23522
23558
  className: "flex items-center gap-3 text-[25px] font-semibold text-muted",
23523
23559
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
@@ -23541,7 +23577,7 @@ var DouyinPosterFooter = ({ data }) => {
23541
23577
  avatarUrl: avater_url,
23542
23578
  useDarkTheme,
23543
23579
  alt: "二维码",
23544
- className: "h-[300px] w-[300px]"
23580
+ className: "h-75 w-75"
23545
23581
  })
23546
23582
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23547
23583
  className: "mt-2 text-[28px] font-black text-foreground/80",
@@ -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 };
@@ -14250,6 +14250,10 @@
14250
14250
  height: calc(var(--spacing) * 16);
14251
14251
  }
14252
14252
 
14253
+ .h-17 {
14254
+ height: calc(var(--spacing) * 17);
14255
+ }
14256
+
14253
14257
  .h-18 {
14254
14258
  height: calc(var(--spacing) * 18);
14255
14259
  }
@@ -14486,22 +14490,10 @@
14486
14490
  height: 60%;
14487
14491
  }
14488
14492
 
14489
- .h-\[68px\] {
14490
- height: 68px;
14491
- }
14492
-
14493
- .h-\[72px\] {
14494
- height: 72px;
14495
- }
14496
-
14497
14493
  .h-\[187\.5px\] {
14498
14494
  height: 187.5px;
14499
14495
  }
14500
14496
 
14501
- .h-\[300px\] {
14502
- height: 300px;
14503
- }
14504
-
14505
14497
  .h-\[calc\(100\%-160px\)\] {
14506
14498
  height: calc(100% - 160px);
14507
14499
  }
@@ -14694,6 +14686,10 @@
14694
14686
  width: calc(var(--spacing) * 16);
14695
14687
  }
14696
14688
 
14689
+ .w-18 {
14690
+ width: calc(var(--spacing) * 18);
14691
+ }
14692
+
14697
14693
  .w-20 {
14698
14694
  width: calc(var(--spacing) * 20);
14699
14695
  }
@@ -14942,10 +14938,6 @@
14942
14938
  width: 44%;
14943
14939
  }
14944
14940
 
14945
- .w-\[72px\] {
14946
- width: 72px;
14947
- }
14948
-
14949
14941
  .w-\[90\%\] {
14950
14942
  width: 90%;
14951
14943
  }
@@ -14958,10 +14950,6 @@
14958
14950
  width: 187.5px;
14959
14951
  }
14960
14952
 
14961
- .w-\[300px\] {
14962
- width: 300px;
14963
- }
14964
-
14965
14953
  .w-\[calc\(100\%-160px\)\] {
14966
14954
  width: calc(100% - 160px);
14967
14955
  }
@@ -15006,6 +14994,10 @@
15006
14994
  max-width: var(--container-6xl);
15007
14995
  }
15008
14996
 
14997
+ .max-w-77\.5 {
14998
+ max-width: calc(var(--spacing) * 77.5);
14999
+ }
15000
+
15009
15001
  .max-w-80 {
15010
15002
  max-width: calc(var(--spacing) * 80);
15011
15003
  }
@@ -15026,14 +15018,30 @@
15026
15018
  max-width: calc(var(--spacing) * 150);
15027
15019
  }
15028
15020
 
15021
+ .max-w-162\.5 {
15022
+ max-width: calc(var(--spacing) * 162.5);
15023
+ }
15024
+
15025
+ .max-w-165 {
15026
+ max-width: calc(var(--spacing) * 165);
15027
+ }
15028
+
15029
15029
  .max-w-200 {
15030
15030
  max-width: calc(var(--spacing) * 200);
15031
15031
  }
15032
15032
 
15033
+ .max-w-212\.5 {
15034
+ max-width: calc(var(--spacing) * 212.5);
15035
+ }
15036
+
15033
15037
  .max-w-225 {
15034
15038
  max-width: calc(var(--spacing) * 225);
15035
15039
  }
15036
15040
 
15041
+ .max-w-290 {
15042
+ max-width: calc(var(--spacing) * 290);
15043
+ }
15044
+
15037
15045
  .max-w-300 {
15038
15046
  max-width: calc(var(--spacing) * 300);
15039
15047
  }
@@ -15046,26 +15054,6 @@
15046
15054
  max-width: 72%;
15047
15055
  }
15048
15056
 
15049
- .max-w-\[310px\] {
15050
- max-width: 310px;
15051
- }
15052
-
15053
- .max-w-\[650px\] {
15054
- max-width: 650px;
15055
- }
15056
-
15057
- .max-w-\[660px\] {
15058
- max-width: 660px;
15059
- }
15060
-
15061
- .max-w-\[850px\] {
15062
- max-width: 850px;
15063
- }
15064
-
15065
- .max-w-\[1160px\] {
15066
- max-width: 1160px;
15067
- }
15068
-
15069
15057
  .max-w-full {
15070
15058
  max-width: 100%;
15071
15059
  }
@@ -15078,6 +15066,10 @@
15078
15066
  min-width: 0;
15079
15067
  }
15080
15068
 
15069
+ .min-w-37\.5 {
15070
+ min-width: calc(var(--spacing) * 37.5);
15071
+ }
15072
+
15081
15073
  .min-w-38 {
15082
15074
  min-width: calc(var(--spacing) * 38);
15083
15075
  }
@@ -15086,10 +15078,6 @@
15086
15078
  min-width: calc(var(--spacing) * 42);
15087
15079
  }
15088
15080
 
15089
- .min-w-\[150px\] {
15090
- min-width: 150px;
15091
- }
15092
-
15093
15081
  .flex-1 {
15094
15082
  flex: 1;
15095
15083
  }
@@ -18235,11 +18223,6 @@
18235
18223
  line-height: 1.45;
18236
18224
  }
18237
18225
 
18238
- .leading-\[1\.48\] {
18239
- --tw-leading: 1.48;
18240
- line-height: 1.48;
18241
- }
18242
-
18243
18226
  .leading-\[1\.55\] {
18244
18227
  --tw-leading: 1.55;
18245
18228
  line-height: 1.55;
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.3",
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-19T04:05:14.269Z"
92
+ "timestamp": "2026-07-29T20:48:02.801Z"
93
93
  }