@napuketto/adapter 0.0.19 → 0.0.21

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.
@@ -36,7 +36,7 @@ function collectGrayTipUids(msg) {
36
36
  for (const el of msg.elements) {
37
37
  const g = el.grayTipElement;
38
38
  if (g === void 0) continue;
39
- collectUids(uids, g.revokeElement?.operatorUid);
39
+ collectUids(uids, g.revokeElement?.operatorUid, g.aioOpGrayTipElement?.peerUid);
40
40
  const grp = g.groupElement;
41
41
  if (grp === void 0) continue;
42
42
  collectUids(uids, grp.memberUid, grp.adminUid, grp.shutUp?.admin?.uid, grp.shutUp?.member?.uid);
@@ -56,4 +56,4 @@ function forEachRawMessage(msgs, handler) {
56
56
  //#endregion
57
57
  export { createWsServerSchema as i, collectGrayTipUids as n, createHttpServerSchema as r, forEachRawMessage as t };
58
58
 
59
- //# sourceMappingURL=raw-message-DfHdOVHi.mjs.map
59
+ //# sourceMappingURL=raw-message-Bx18pIQS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-message-Bx18pIQS.mjs","names":[],"sources":["../src/core/transport-schema.ts","../src/core/gray-tip.ts","../src/core/raw-message.ts"],"sourcesContent":["/**\n * 协议传输实例 schema(OB11 / Satori 共用,2026-08-08 克隆合并)\n *\n * HTTP 反向服务器 / WS 事件服务器的实例级 schema 结构两协议一致,\n * 仅默认端口与扩展字段不同——提取工厂函数,各协议按需调用。\n */\nimport { z } from \"zod\";\n\n/** 传输实例基础 schema(enabled/host/port/token 骨架,HTTP 与 WS 共用)。 */\nfunction createServerSchema(defaultPort: number) {\n return z.object({\n enabled: z.boolean().default(false),\n host: z.string().default(\"127.0.0.1\"),\n port: z.number().int().default(defaultPort),\n /** 实例级 token,覆盖全局 token(缺省继承全局)。 */\n token: z.string().optional(),\n });\n}\n\n/** HTTP 反向服务器实例 schema(第三方指令入口 / HTTP RPC,OB11 / Satori 共用)。 */\nexport function createHttpServerSchema(defaultPort: number) {\n return createServerSchema(defaultPort);\n}\n\n/** WS 事件服务器实例 schema(反向 WS server,OB11 / Satori 共用)。 */\nexport function createWsServerSchema(defaultPort: number) {\n return createServerSchema(defaultPort);\n}\n","/**\n * grayTip 元素工具(OB11 / Satori 共用,2026-08-08 克隆合并)\n *\n * grayTip(系统提示消息)涉及的操作者/成员 uid 需要批量 uid→uin 转换,\n * 两协议翻译层共用同一套收集逻辑。\n */\nimport type { RawMessage } from \"@napuketto/kernel\";\n\n/** 非空 uid 才加入集合。 */\nfunction collectUids(uids: Set<string>, ...candidates: Array<string | undefined>): void {\n for (const uid of candidates) {\n if (uid !== undefined && uid !== \"\") {\n uids.add(uid);\n }\n }\n}\n\n/** 收集 grayTip 涉及的 uid(批量 uidToUin 用)。 */\nexport function collectGrayTipUids(msg: RawMessage): string[] {\n const uids = new Set<string>();\n for (const el of msg.elements) {\n const g = el.grayTipElement;\n if (g === undefined) {\n continue;\n }\n collectUids(uids, g.revokeElement?.operatorUid, g.aioOpGrayTipElement?.peerUid);\n const grp = g.groupElement;\n if (grp === undefined) {\n continue;\n }\n collectUids(\n uids,\n grp.memberUid,\n grp.adminUid,\n grp.shutUp?.admin?.uid,\n grp.shutUp?.member?.uid,\n );\n }\n return [...uids];\n}\n","/**\n * RawMessage 数组规范化(OB11 / Satori 共用,2026-08-08 克隆合并)\n *\n * onRecvMsg 回调参数运行时实证为消息数组(2026-08-07),但兼容单条对象\n * 传入——统一规范化为数组并过滤无效项后逐条回调。\n */\nimport type { RawMessage } from \"@napuketto/kernel\";\n\n/** 逐条处理消息(自动规范化数组 + 过滤非对象项)。 */\nexport function forEachRawMessage(msgs: unknown, handler: (msg: RawMessage) => void): void {\n const list = Array.isArray(msgs) ? msgs : [msgs];\n for (const msg of list) {\n if (!msg || typeof msg !== \"object\") {\n continue;\n }\n handler(msg as RawMessage);\n }\n}\n"],"mappings":";;;;;;;;;AASA,SAAS,mBAAmB,aAAqB;CAC7C,OAAO,EAAE,OAAO;EACZ,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;EAClC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,WAAW;EACpC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,WAAW;;EAE1C,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,CAAC;AACL;;AAGA,SAAgB,uBAAuB,aAAqB;CACxD,OAAO,mBAAmB,WAAW;AACzC;;AAGA,SAAgB,qBAAqB,aAAqB;CACtD,OAAO,mBAAmB,WAAW;AACzC;;;;AClBA,SAAS,YAAY,MAAmB,GAAG,YAA6C;CACpF,KAAK,MAAM,OAAO,YACd,IAAI,QAAQ,KAAA,KAAa,QAAQ,IAC7B,KAAK,IAAI,GAAG;AAGxB;;AAGA,SAAgB,mBAAmB,KAA2B;CAC1D,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,MAAM,IAAI,UAAU;EAC3B,MAAM,IAAI,GAAG;EACb,IAAI,MAAM,KAAA,GACN;EAEJ,YAAY,MAAM,EAAE,eAAe,aAAa,EAAE,qBAAqB,OAAO;EAC9E,MAAM,MAAM,EAAE;EACd,IAAI,QAAQ,KAAA,GACR;EAEJ,YACI,MACA,IAAI,WACJ,IAAI,UACJ,IAAI,QAAQ,OAAO,KACnB,IAAI,QAAQ,QAAQ,GACxB;CACJ;CACA,OAAO,CAAC,GAAG,IAAI;AACnB;;;;AC9BA,SAAgB,kBAAkB,MAAe,SAA0C;CACvF,MAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;CAC/C,KAAK,MAAM,OAAO,MAAM;EACpB,IAAI,CAAC,OAAO,OAAO,QAAQ,UACvB;EAEJ,QAAQ,GAAiB;CAC7B;AACJ"}
@@ -305,6 +305,11 @@ declare class NapukettoSatoriAdapter extends BaseProtocolAdapter<SatoriConfig> {
305
305
  private startTransports;
306
306
  /** 当前登录信息(READY logins / meta / login.get 用)。 */
307
307
  private currentLogin;
308
+ /**
309
+ * 配置热更新(2026-09-08 实现):stop 旧传输/退订(广播 login-updated 离线)→
310
+ * 按新配置重建(广播在线)。Satori 无 IPC 桥模式,无传输时同样走重建路径。
311
+ */
312
+ private reloadTransports;
308
313
  /** 广播 login-updated 事件(适配器启停时)。 */
309
314
  private broadcastLoginUpdated;
310
315
  /** 停止:退订 + 关闭传输 + 广播 login-updated(离线)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/satori/action/base-action.ts","../../src/satori/helper/element/element.ts","../../src/satori/helper/element/canonical.ts","../../src/satori/helper/element/deps.ts","../../src/satori/helper/element/element-convert.ts","../../src/satori/api/satori-api.ts","../../src/satori/action/registry.ts","../../src/satori/action/index.ts","../../src/satori/helper/config.ts","../../src/satori/helper/error.ts","../../src/satori/types/resource.ts","../../src/satori/helper/translate.ts","../../src/satori/adapter.ts","../../src/satori/event/translate.ts","../../src/satori/types/api.ts","../../src/satori/types/event.ts","../../src/satori/transport.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/satori/action/base-action.ts","../../src/satori/helper/element/element.ts","../../src/satori/helper/element/canonical.ts","../../src/satori/helper/element/deps.ts","../../src/satori/helper/element/element-convert.ts","../../src/satori/api/satori-api.ts","../../src/satori/action/registry.ts","../../src/satori/action/index.ts","../../src/satori/helper/config.ts","../../src/satori/helper/error.ts","../../src/satori/types/resource.ts","../../src/satori/helper/translate.ts","../../src/satori/adapter.ts","../../src/satori/event/translate.ts","../../src/satori/types/api.ts","../../src/satori/types/event.ts","../../src/satori/transport.ts"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { o as ActionRegistry, r as BaseProtocolAdapter, t as ensureSilk } from "../core-of7sLiQX.mjs";
2
- import { i as createWsServerSchema, n as collectGrayTipUids, r as createHttpServerSchema, t as forEachRawMessage } from "../raw-message-DfHdOVHi.mjs";
2
+ import { i as createWsServerSchema, n as collectGrayTipUids, r as createHttpServerSchema, t as forEachRawMessage } from "../raw-message-Bx18pIQS.mjs";
3
3
  import { ChatType, GrayTipSubType, NTGroupRequestOperateTypes, TipGroupElementType, isKernelError, kernelError, toCanonicalElements } from "@napuketto/kernel";
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
+ import { transcodeVideo } from "@napuketto/media";
5
6
  import { z } from "zod";
6
7
  import { join } from "node:path";
7
8
  import { HttpServer, WsServer } from "@napuketto/network";
@@ -599,13 +600,30 @@ async function audioToCanonical(el, deps) {
599
600
  path: await ensureSilk(path)
600
601
  }];
601
602
  }
602
- /** Satori video → canonical video。 */
603
+ /**
604
+ * Satori video → canonical video(非 mp4 输入 ffmpeg 归一化,fail-soft)。
605
+ *
606
+ * QQ 视频协议固定 mp4/H.264;非 mp4(webm/mov 等)先转码,ffmpeg 缺失或
607
+ * 转码失败原样透传(kernel 发送侧兜底,可能发送失败但不阻断装配)。
608
+ */
603
609
  async function videoToCanonical(el, deps) {
604
610
  const path = await resolveMediaSrc(el, deps);
605
- return path === null ? [] : [{
611
+ if (path === null) return [];
612
+ if (path.toLowerCase().endsWith(".mp4")) return [{
606
613
  type: "video",
607
614
  path
608
615
  }];
616
+ try {
617
+ return [{
618
+ type: "video",
619
+ path: await transcodeVideo(path)
620
+ }];
621
+ } catch {
622
+ return [{
623
+ type: "video",
624
+ path
625
+ }];
626
+ }
609
627
  }
610
628
  /** Satori file → canonical file(title → name)。 */
611
629
  async function fileToCanonical(el, deps) {
@@ -1807,9 +1825,7 @@ var NapukettoSatoriAdapter = class extends BaseProtocolAdapter {
1807
1825
  hooks: {
1808
1826
  onStart: (config) => this.startTransports(config),
1809
1827
  onStop: () => this.stopAll(),
1810
- onReload: () => {
1811
- return Promise.resolve();
1812
- }
1828
+ onReload: (config) => this.reloadTransports(config)
1813
1829
  }
1814
1830
  });
1815
1831
  this.msgChannel = opts.msgChannel;
@@ -1835,6 +1851,14 @@ var NapukettoSatoriAdapter = class extends BaseProtocolAdapter {
1835
1851
  currentLogin() {
1836
1852
  return toLogin(this.api.self, 0, true);
1837
1853
  }
1854
+ /**
1855
+ * 配置热更新(2026-09-08 实现):stop 旧传输/退订(广播 login-updated 离线)→
1856
+ * 按新配置重建(广播在线)。Satori 无 IPC 桥模式,无传输时同样走重建路径。
1857
+ */
1858
+ async reloadTransports(config) {
1859
+ await this.stopAll();
1860
+ await this.startTransports(config);
1861
+ }
1838
1862
  /** 广播 login-updated 事件(适配器启停时)。 */
1839
1863
  broadcastLoginUpdated(online) {
1840
1864
  const login = toLogin(this.api.self, 0, online);