@napuketto/adapter 0.0.1 → 0.0.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.
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ //#region src/core/transport-schema.ts
3
+ /**
4
+ * 协议传输实例 schema(OB11 / Satori 共用,2026-08-08 克隆合并)
5
+ *
6
+ * HTTP 反向服务器 / WS 事件服务器的实例级 schema 结构两协议一致,
7
+ * 仅默认端口与扩展字段不同——提取工厂函数,各协议按需调用。
8
+ */
9
+ /** 传输实例基础 schema(enabled/host/port/token 骨架,HTTP 与 WS 共用)。 */
10
+ function createServerSchema(defaultPort) {
11
+ return z.object({
12
+ enabled: z.boolean().default(false),
13
+ host: z.string().default("127.0.0.1"),
14
+ port: z.number().int().default(defaultPort),
15
+ /** 实例级 token,覆盖全局 token(缺省继承全局)。 */
16
+ token: z.string().optional()
17
+ });
18
+ }
19
+ /** HTTP 反向服务器实例 schema(第三方指令入口 / HTTP RPC,OB11 / Satori 共用)。 */
20
+ function createHttpServerSchema(defaultPort) {
21
+ return createServerSchema(defaultPort);
22
+ }
23
+ /** WS 事件服务器实例 schema(反向 WS server,OB11 / Satori 共用)。 */
24
+ function createWsServerSchema(defaultPort) {
25
+ return createServerSchema(defaultPort);
26
+ }
27
+ //#endregion
28
+ //#region src/core/gray-tip.ts
29
+ /** 收集 grayTip 涉及的 uid(批量 uidToUin 用)。 */
30
+ function collectGrayTipUids(msg) {
31
+ const uids = /* @__PURE__ */ new Set();
32
+ for (const el of msg.elements) {
33
+ const g = el.grayTipElement;
34
+ if (g === void 0) continue;
35
+ const revoke = g.revokeElement;
36
+ if (revoke?.operatorUid !== void 0 && revoke.operatorUid !== "") uids.add(revoke.operatorUid);
37
+ const grp = g.groupElement;
38
+ if (grp === void 0) continue;
39
+ if (grp.memberUid !== void 0 && grp.memberUid !== "") uids.add(grp.memberUid);
40
+ if (grp.adminUid !== void 0 && grp.adminUid !== "") uids.add(grp.adminUid);
41
+ if (grp.shutUp?.admin?.uid !== void 0 && grp.shutUp.admin.uid !== "") uids.add(grp.shutUp.admin.uid);
42
+ if (grp.shutUp?.member?.uid !== void 0 && grp.shutUp.member.uid !== "") uids.add(grp.shutUp.member.uid);
43
+ }
44
+ return [...uids];
45
+ }
46
+ //#endregion
47
+ //#region src/core/raw-message.ts
48
+ /** 逐条处理消息(自动规范化数组 + 过滤非对象项)。 */
49
+ function forEachRawMessage(msgs, handler) {
50
+ const list = Array.isArray(msgs) ? msgs : [msgs];
51
+ for (const msg of list) {
52
+ if (!msg || typeof msg !== "object") continue;
53
+ handler(msg);
54
+ }
55
+ }
56
+ //#endregion
57
+ export { createWsServerSchema as i, collectGrayTipUids as n, createHttpServerSchema as r, forEachRawMessage as t };
58
+
59
+ //# sourceMappingURL=raw-message-Du7tvR1D.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-message-Du7tvR1D.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/** 收集 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 const revoke = g.revokeElement;\n if (revoke?.operatorUid !== undefined && revoke.operatorUid !== \"\") {\n uids.add(revoke.operatorUid);\n }\n const grp = g.groupElement;\n if (grp === undefined) {\n continue;\n }\n if (grp.memberUid !== undefined && grp.memberUid !== \"\") {\n uids.add(grp.memberUid);\n }\n if (grp.adminUid !== undefined && grp.adminUid !== \"\") {\n uids.add(grp.adminUid);\n }\n if (grp.shutUp?.admin?.uid !== undefined && grp.shutUp.admin.uid !== \"\") {\n uids.add(grp.shutUp.admin.uid);\n }\n if (grp.shutUp?.member?.uid !== undefined && grp.shutUp.member.uid !== \"\") {\n uids.add(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,SAAgB,mBAAmB,KAA2B;CAC1D,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,MAAM,IAAI,UAAU;EAC3B,MAAM,IAAI,GAAG;EACb,IAAI,MAAM,KAAA,GACN;EAEJ,MAAM,SAAS,EAAE;EACjB,IAAI,QAAQ,gBAAgB,KAAA,KAAa,OAAO,gBAAgB,IAC5D,KAAK,IAAI,OAAO,WAAW;EAE/B,MAAM,MAAM,EAAE;EACd,IAAI,QAAQ,KAAA,GACR;EAEJ,IAAI,IAAI,cAAc,KAAA,KAAa,IAAI,cAAc,IACjD,KAAK,IAAI,IAAI,SAAS;EAE1B,IAAI,IAAI,aAAa,KAAA,KAAa,IAAI,aAAa,IAC/C,KAAK,IAAI,IAAI,QAAQ;EAEzB,IAAI,IAAI,QAAQ,OAAO,QAAQ,KAAA,KAAa,IAAI,OAAO,MAAM,QAAQ,IACjE,KAAK,IAAI,IAAI,OAAO,MAAM,GAAG;EAEjC,IAAI,IAAI,QAAQ,QAAQ,QAAQ,KAAA,KAAa,IAAI,OAAO,OAAO,QAAQ,IACnE,KAAK,IAAI,IAAI,OAAO,OAAO,GAAG;CAEtC;CACA,OAAO,CAAC,GAAG,IAAI;AACnB;;;;AC7BA,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"}
@@ -0,0 +1,488 @@
1
+ import { o as ActionRegistry, r as ProtocolConfig, t as BaseProtocolAdapter } from "../index-CmhGncOe.mjs";
2
+ import "../gray-tip-CcpfI1Og.mjs";
3
+ import { CanonicalElement, FriendApi, GroupApi, GroupCache, GroupNotifyApi, KernelErrorCode, MsgApi, MsgEventChannel, Peer, ProfileApi } from "@napuketto/kernel";
4
+ import { ZodType, z } from "zod";
5
+ import { EventBroadcaster, TransportAdapter } from "@napuketto/network";
6
+ //#region src/satori/action/base-action.d.ts
7
+ /** 动作错误(带 HTTP 状态码;由 transport 层透传)。 */
8
+ declare class SatoriActionError extends Error {
9
+ readonly status: number;
10
+ constructor(status: number, message: string);
11
+ }
12
+ /**
13
+ * Satori 动作基类:校验 + 执行 + 错误映射。
14
+ * 成功返回资源对象(或数组/分页列表),失败抛 SatoriActionError。
15
+ */
16
+ declare abstract class BaseSatoriAction<TPayload, TReturn> {
17
+ /** 动作名(resource.method,如 "message.create")。 */
18
+ abstract readonly name: string;
19
+ /** 参数校验 schema。 */
20
+ abstract readonly schema: ZodType<TPayload>;
21
+ /** 校验并执行(HTTP/WS 共用)。 */
22
+ run(payload: unknown): Promise<TReturn>;
23
+ /** 动作实现(只抛错或返回资源;不包装响应)。 */
24
+ protected abstract _handle(payload: TPayload): Promise<TReturn>;
25
+ }
26
+ //#endregion
27
+ //#region src/satori/helper/element/element.d.ts
28
+ /** Satori 消息元素(与规范 satori-parse 形状一致;type="text" 为文本节点)。 */
29
+ interface SatoriElement {
30
+ type: string;
31
+ attrs?: Record<string, string>;
32
+ children?: SatoriElement[];
33
+ text?: string;
34
+ }
35
+ /**
36
+ * 解析 Satori 消息字符串 → 元素树。
37
+ * 容错:未配对标签/非法标签按文本保留;解析不抛错(消息内容宽容)。
38
+ */
39
+ declare function parseElements(source: string): SatoriElement[];
40
+ /** 元素树 → Satori 消息字符串。 */
41
+ declare function renderElements(elements: SatoriElement[]): string;
42
+ //#endregion
43
+ //#region src/satori/helper/element/canonical.d.ts
44
+ /** 收方向依赖(at uid 解析)。 */
45
+ interface CanonicalToSatoriDeps {
46
+ /** uid → uin(at 目标显示用;未提供原样返回 uid)。 */
47
+ uidToUin?: (uids: string[]) => Promise<Map<string, string>>;
48
+ }
49
+ /**
50
+ * 收方向:kernel canonical 元素 → Satori 元素树(纯函数映射,宽容忽略 unknown)。
51
+ * at 目标为 uid 时经 uidToUin 转换(异步);无转换器时原样。
52
+ */
53
+ declare function canonicalToSatoriElements(elements: CanonicalElement[], deps?: CanonicalToSatoriDeps): Promise<SatoriElement[]>;
54
+ //#endregion
55
+ //#region src/satori/helper/element/deps.d.ts
56
+ /**
57
+ * 发方向转换依赖契约(Satori 元素 → kernel canonical)
58
+ *
59
+ * 2026-08-08 从 element-convert.ts 独立:media-convert.ts(媒体转换器)同样
60
+ * 消费该类型,独立成文件后消除 element-convert ↔ media-convert 的循环引用
61
+ * (madge 检测的 type-only 环)。
62
+ */
63
+ /** 发方向依赖(at uin 转换 + 资源下载目录)。 */
64
+ interface SatoriToCanonicalDeps {
65
+ /** uin → uid(at 目标转换)。 */
66
+ uinToUid: (uins: string[]) => Promise<Map<string, string>>;
67
+ /** 资源(img/audio/video/file)下载缓存目录。 */
68
+ cacheDir: string;
69
+ }
70
+ //#endregion
71
+ //#region src/satori/helper/element/element-convert.d.ts
72
+ /** 发方向:Satori 元素树 → kernel canonical(at uin→uid + 资源下载/转码)。 */
73
+ declare function satoriToCanonicalElements(elements: SatoriElement[], deps: SatoriToCanonicalDeps): Promise<CanonicalElement[]>;
74
+ /** 解析消息 content 字符串 → canonical(message.create 用)。 */
75
+ declare function parseContentToCanonical(content: string, deps: SatoriToCanonicalDeps): Promise<CanonicalElement[]>;
76
+ //#endregion
77
+ //#region src/satori/api/satori-api.d.ts
78
+ /** SatoriApi 构造参数。 */
79
+ interface SatoriApiOptions {
80
+ msgApi: MsgApi;
81
+ groupApi: GroupApi;
82
+ groupNotifyApi: GroupNotifyApi;
83
+ friendApi: FriendApi;
84
+ profileApi: ProfileApi;
85
+ /** 登录身份(login.get / READY logins 用)。 */
86
+ self: {
87
+ uin: string;
88
+ nickname: string;
89
+ };
90
+ /** 媒体资源下载缓存目录(发方向 img/audio/video/file 的 http(s) src)。 */
91
+ cacheDir: string;
92
+ /** 群/成员缓存(ADR-008;guild.member.get / user.get 读缓存用)。 */
93
+ groupCache?: GroupCache;
94
+ }
95
+ /** Satori 动作统一依赖聚合。 */
96
+ declare class SatoriApi {
97
+ readonly msgApi: MsgApi;
98
+ readonly groupApi: GroupApi;
99
+ readonly groupNotifyApi: GroupNotifyApi;
100
+ readonly friendApi: FriendApi;
101
+ readonly profileApi: ProfileApi;
102
+ readonly self: {
103
+ uin: string;
104
+ nickname: string;
105
+ };
106
+ readonly selfUin: string;
107
+ readonly cacheDir: string;
108
+ readonly groupCache: GroupCache | undefined;
109
+ /**
110
+ * 频道类型缓存:channel_id → isGroup(群聊频道 id 与私聊 uin 无法从数字
111
+ * 规则区分,需从事件/查询回填——QQ 平台群号与用户 uin 同为数字)。
112
+ */
113
+ private readonly channelTypeCache;
114
+ constructor(opts: SatoriApiOptions);
115
+ /** 记录频道类型(消息事件翻译时回填:chatType GROUP → true)。 */
116
+ setChannelType(channelId: string, isGroup: boolean): void;
117
+ /**
118
+ * 解析 channel_id → Peer(消息动作共用)。
119
+ * 缓存命中直接取类型;未命中先试群号(getGroupInfo 成功 = 群聊),
120
+ * 失败按私聊(uin → uid)。
121
+ */
122
+ resolvePeer(channelId: string): Promise<Peer>;
123
+ /** uin → 私聊 Peer(uin→uid 转换;转换失败原样 uin 兜底)。 */
124
+ private toC2cPeer;
125
+ /** uin → uid(委托 groupApi;私聊发送 / at 目标用)。 */
126
+ uinToUid(uins: string[]): Promise<Map<string, string>>;
127
+ /** uid → uin(委托 groupApi;收方向 at / 用户 ID 用)。 */
128
+ uidToUin(uids: string[]): Promise<Map<string, string>>;
129
+ /** 发方向元素转换依赖(at uin→uid + 资源下载目录)。 */
130
+ toCanonicalDeps(): SatoriToCanonicalDeps;
131
+ }
132
+ //#endregion
133
+ //#region src/satori/action/registry.d.ts
134
+ /** Satori 动作注册表(BaseSatoriAction 专用)。 */
135
+ type SatoriActionRegistry = ActionRegistry<BaseSatoriAction<unknown, unknown>>;
136
+ //#endregion
137
+ //#region src/satori/action/index.d.ts
138
+ /** 动作注册依赖(单聚合对象)。 */
139
+ interface SatoriActionDeps {
140
+ api: SatoriApi;
141
+ }
142
+ /** 创建 Satori 动作注册表。 */
143
+ declare function createSatoriActionRegistry(deps: SatoriActionDeps): SatoriActionRegistry;
144
+ //#endregion
145
+ //#region src/satori/helper/config.d.ts
146
+ /** Satori 配置 schema。 */
147
+ declare const satoriConfigSchema: z.ZodObject<{
148
+ token: z.ZodOptional<z.ZodString>;
149
+ cacheDir: z.ZodOptional<z.ZodString>;
150
+ httpServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
151
+ enabled: z.ZodDefault<z.ZodBoolean>;
152
+ host: z.ZodDefault<z.ZodString>;
153
+ port: z.ZodDefault<z.ZodNumber>;
154
+ token: z.ZodOptional<z.ZodString>;
155
+ }, z.core.$strip>>>;
156
+ wsServers: z.ZodDefault<z.ZodArray<z.ZodObject<{
157
+ enabled: z.ZodDefault<z.ZodBoolean>;
158
+ host: z.ZodDefault<z.ZodString>;
159
+ port: z.ZodDefault<z.ZodNumber>;
160
+ token: z.ZodOptional<z.ZodString>;
161
+ }, z.core.$strip>>>;
162
+ }, z.core.$strip>;
163
+ /** Satori 配置类型(由 schema 推导)。 */
164
+ type SatoriConfig = z.infer<typeof satoriConfigSchema>;
165
+ //#endregion
166
+ //#region src/satori/helper/error.d.ts
167
+ /** KernelErrorCode → HTTP 状态码映射表。 */
168
+ declare const satoriHttpStatusMap: Record<KernelErrorCode, number>;
169
+ /** HTTP 状态码常量。 */
170
+ declare const HTTP_STATUS: {
171
+ readonly ok: 200;
172
+ readonly badRequest: 400;
173
+ readonly unauthorized: 401;
174
+ readonly forbidden: 403;
175
+ readonly notFound: 404;
176
+ readonly notImplemented: 501;
177
+ readonly serverError: 500;
178
+ };
179
+ //#endregion
180
+ //#region src/satori/types/resource.d.ts
181
+ /**
182
+ * Satori 资源类型(协议 v1,自研描述,规范参考 satori.chat/zh-CN/resources)
183
+ *
184
+ * 说明:Satori 大部分字段可选(平台差异)。QQ 平台(platform=qq)语义
185
+ * 见 docs/satori.md §3 ID 映射。
186
+ */
187
+ /** 频道类型。 */
188
+ declare const ChannelType: {
189
+ readonly TEXT: 0;
190
+ readonly DIRECT: 1;
191
+ readonly CATEGORY: 2;
192
+ readonly VOICE: 3;
193
+ };
194
+ type ChannelType = (typeof ChannelType)[keyof typeof ChannelType];
195
+ /** 登录状态。 */
196
+ declare const LoginStatus: {
197
+ readonly OFFLINE: 0;
198
+ readonly ONLINE: 1;
199
+ readonly CONNECT: 2;
200
+ readonly DISCONNECT: 3;
201
+ readonly RECONNECT: 4;
202
+ };
203
+ type LoginStatus = (typeof LoginStatus)[keyof typeof LoginStatus];
204
+ /** 用户(user.id 为平台内唯一标识;QQ 平台 = uin)。 */
205
+ interface User {
206
+ id: string;
207
+ name?: string;
208
+ nick?: string;
209
+ avatar?: string;
210
+ is_bot?: boolean;
211
+ }
212
+ /** 频道(群聊频道与群组重合:id = 群号;私聊频道 id = 对端 uin)。 */
213
+ interface Channel {
214
+ id: string;
215
+ type: ChannelType;
216
+ name?: string;
217
+ parent_id?: string;
218
+ }
219
+ /** 群组(id = 群号)。 */
220
+ interface Guild {
221
+ id: string;
222
+ name?: string;
223
+ avatar?: string;
224
+ }
225
+ /** 群组成员。 */
226
+ interface GuildMember {
227
+ user?: User;
228
+ nick?: string;
229
+ avatar?: string;
230
+ joined_at?: number;
231
+ roles?: GuildRole[];
232
+ }
233
+ /** 群组角色。 */
234
+ interface GuildRole {
235
+ id: string;
236
+ name?: string;
237
+ }
238
+ /** 好友。 */
239
+ interface Friend {
240
+ user?: User;
241
+ nick?: string;
242
+ }
243
+ /** 表情。 */
244
+ interface Emoji {
245
+ id: string;
246
+ name?: string;
247
+ }
248
+ /** 登录信息(非登录事件中 login 只带 sn/user/platform)。 */
249
+ interface Login {
250
+ /** 序列号(仅标识 Login 对象,非持久化,与 login.user.id 区分)。 */
251
+ sn: number;
252
+ /** 平台名称(qq)。 */
253
+ platform?: string;
254
+ /** 平台用户(机器人身份)。 */
255
+ user?: User;
256
+ /** 登录状态。 */
257
+ status: LoginStatus;
258
+ /** 适配器名称(napuketto)。 */
259
+ adapter: string;
260
+ /** 平台特性列表(features 判断 API 可用性)。 */
261
+ features?: string[];
262
+ }
263
+ /** 消息(content 为 Satori 元素字符串;资源提升后不含 user/member/channel)。 */
264
+ interface Message {
265
+ id: string;
266
+ content?: string;
267
+ channel?: Channel;
268
+ guild?: Guild;
269
+ member?: GuildMember;
270
+ user?: User;
271
+ created_at?: number;
272
+ updated_at?: number;
273
+ }
274
+ //#endregion
275
+ //#region src/satori/helper/translate.d.ts
276
+ /** 收方向翻译依赖(uid → uin 转换,缺省 at 原样 uid)。 */
277
+ interface SatoriTranslateDeps {
278
+ /** 机器人自身 uin(频道类型判定 / 私聊对端兜底)。 */
279
+ selfUin: string;
280
+ /** uid → uin(at 目标 / 用户 ID;缺省不转换)。 */
281
+ uidToUin?: (uids: string[]) => Promise<Map<string, string>>;
282
+ }
283
+ //#endregion
284
+ //#region src/satori/adapter.d.ts
285
+ /** 适配器构造参数。 */
286
+ interface SatoriAdapterOptions extends SatoriApiOptions {
287
+ /** 协议配置(zod 校验 + seed 装配)。 */
288
+ config: ProtocolConfig<SatoriConfig>;
289
+ /** network 事件广播(注册传输后 emit 推给第三方)。 */
290
+ broadcaster: EventBroadcaster;
291
+ /** kernel 消息事件通道(消息收链路入口)。 */
292
+ msgChannel: MsgEventChannel;
293
+ }
294
+ /** Satori 协议适配器。 */
295
+ declare class NapukettoSatoriAdapter extends BaseProtocolAdapter<SatoriConfig> {
296
+ readonly protocol = "satori";
297
+ readonly configSchema: import("zod").ZodObject<{
298
+ token: import("zod").ZodOptional<import("zod").ZodString>;
299
+ cacheDir: import("zod").ZodOptional<import("zod").ZodString>;
300
+ httpServers: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
301
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
302
+ host: import("zod").ZodDefault<import("zod").ZodString>;
303
+ port: import("zod").ZodDefault<import("zod").ZodNumber>;
304
+ token: import("zod").ZodOptional<import("zod").ZodString>;
305
+ }, import("zod/v4/core").$strip>>>;
306
+ wsServers: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
307
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
308
+ host: import("zod").ZodDefault<import("zod").ZodString>;
309
+ port: import("zod").ZodDefault<import("zod").ZodNumber>;
310
+ token: import("zod").ZodOptional<import("zod").ZodString>;
311
+ }, import("zod/v4/core").$strip>>>;
312
+ }, import("zod/v4/core").$strip>;
313
+ private readonly msgChannel;
314
+ private readonly api;
315
+ private readonly registry;
316
+ private transports;
317
+ private unsubscribe;
318
+ private eventSn;
319
+ constructor(opts: SatoriAdapterOptions);
320
+ /** 启动传输:装配(HTTP RPC + WS 事件服务)+ 打开 server + 订阅消息事件。 */
321
+ private startTransports;
322
+ /** 当前登录信息(READY logins / meta / login.get 用)。 */
323
+ private currentLogin;
324
+ /** 广播 login-updated 事件(适配器启停时)。 */
325
+ private broadcastLoginUpdated;
326
+ /** 停止:退订 + 关闭传输 + 广播 login-updated(离线)。 */
327
+ private stopAll;
328
+ /** 订阅 kernel 消息事件(幂等)。 */
329
+ private subscribe;
330
+ /** 广播消息事件(message-created)。 */
331
+ private broadcastMessageCreated;
332
+ /** 广播 grayTip 事件(message-deleted / guild-member-added / removed)。 */
333
+ private broadcastGrayTip;
334
+ /** 广播事件内容(sn 递增 + 最小 login 包装 + EVENT 信令)。 */
335
+ private broadcastContent;
336
+ /** 事件 sn(递增,从 1 起)。 */
337
+ private nextSn;
338
+ /** 退订(幂等)。 */
339
+ private unsubscribeAll;
340
+ }
341
+ //#endregion
342
+ //#region src/satori/event/translate.d.ts
343
+ /** 事件内容(不含 sn/login,由 adapter 包一层完整 Event)。 */
344
+ interface SatoriEventContent {
345
+ type: string;
346
+ timestamp: number;
347
+ channel?: Channel;
348
+ guild?: Guild;
349
+ message?: Message;
350
+ user?: User;
351
+ member?: GuildMember;
352
+ operator?: User;
353
+ }
354
+ /** 事件翻译依赖(selfUin + uidToUin)。 */
355
+ interface SatoriEventDeps extends SatoriTranslateDeps {}
356
+ //#endregion
357
+ //#region src/satori/types/api.d.ts
358
+ /**
359
+ * Satori 分页与通用 API 类型(协议 v1,规范参考 satori.chat/zh-CN/protocol/api.html)
360
+ */
361
+ /** 分页列表(next 为空表示无更多数据)。 */
362
+ interface List<T> {
363
+ data: T[];
364
+ next?: string;
365
+ }
366
+ /** 双向分页列表(message.list 等)。 */
367
+ interface BidiList<T> {
368
+ data: T[];
369
+ prev?: string;
370
+ next?: string;
371
+ }
372
+ /** 分页方向(message.list)。 */
373
+ declare const Direction: {
374
+ readonly BEFORE: "before";
375
+ readonly AFTER: "after";
376
+ readonly AROUND: "around";
377
+ };
378
+ type Direction = (typeof Direction)[keyof typeof Direction];
379
+ /** 排序方向。 */
380
+ declare const Order: {
381
+ readonly ASC: "asc";
382
+ readonly DESC: "desc";
383
+ };
384
+ type Order = (typeof Order)[keyof typeof Order];
385
+ //#endregion
386
+ //#region src/satori/types/event.d.ts
387
+ /** 信令类型。 */
388
+ declare const Opcode: {
389
+ readonly EVENT: 0;
390
+ readonly PING: 1;
391
+ readonly PONG: 2;
392
+ readonly IDENTIFY: 3;
393
+ readonly READY: 4;
394
+ readonly META: 5;
395
+ };
396
+ type Opcode = (typeof Opcode)[keyof typeof Opcode];
397
+ /** 信令外壳。 */
398
+ interface Signal<T = unknown> {
399
+ op: Opcode;
400
+ body?: T;
401
+ }
402
+ /** IDENTIFY 信令 body(鉴权 + 可选会话恢复)。 */
403
+ interface IdentifyBody {
404
+ token?: string;
405
+ sn?: number;
406
+ }
407
+ /** READY 信令 body。 */
408
+ interface ReadyBody {
409
+ logins: Login[];
410
+ proxy_urls: string[];
411
+ }
412
+ /** META 信令 body(不反映登录状态,不含 logins)。 */
413
+ interface MetaBody {
414
+ proxy_urls: string[];
415
+ }
416
+ /** 交互指令(interaction 事件)。 */
417
+ interface Argv {
418
+ name?: string;
419
+ arguments?: string;
420
+ options?: Record<string, string>;
421
+ }
422
+ /** 交互按钮。 */
423
+ interface Button {
424
+ id?: string;
425
+ }
426
+ /** 事件对象(type 为事件类型;各资源字段按规范可选)。 */
427
+ interface Event {
428
+ /** 事件序列号(会话内递增,1 起)。 */
429
+ sn: number;
430
+ /** 事件类型(message-created 等)。 */
431
+ type: string;
432
+ /** 事件时间戳(毫秒)。 */
433
+ timestamp: number;
434
+ /** 登录信息(非登录事件只带 sn/user/platform)。 */
435
+ login: Login;
436
+ /** 交互指令(button 等)。 */
437
+ argv?: Argv;
438
+ /** 交互按钮。 */
439
+ button?: Button;
440
+ /** 事件所属频道。 */
441
+ channel?: Channel;
442
+ /** 事件的表情(reaction 事件)。 */
443
+ emoji?: Emoji;
444
+ /** 事件的好友(friend 事件)。 */
445
+ friend?: Friend;
446
+ /** 事件所属群组。 */
447
+ guild?: Guild;
448
+ /** 事件的目标成员。 */
449
+ member?: GuildMember;
450
+ /** 事件的消息。 */
451
+ message?: Message;
452
+ /** 事件的操作者。 */
453
+ operator?: User;
454
+ /** 事件的目标角色。 */
455
+ role?: GuildRole;
456
+ /** 事件的目标用户。 */
457
+ user?: User;
458
+ }
459
+ //#endregion
460
+ //#region src/satori/transport.d.ts
461
+ /** 传输装配结果。 */
462
+ interface SatoriTransportSet {
463
+ /** 传输适配器(HTTP RPC + WS 事件服务,均已注册 broadcaster)。 */
464
+ adapters: TransportAdapter[];
465
+ /** 停止:关闭全部传输(幂等)。 */
466
+ close: () => Promise<void>;
467
+ }
468
+ /** 传输装配选项。 */
469
+ interface AssembleSatoriTransportsOptions {
470
+ /** Satori 配置。 */
471
+ config: SatoriConfig;
472
+ /** 事件广播(WS 事件服务注册到它,EVENT 信令经 broadcastEvent 推送)。 */
473
+ broadcaster: EventBroadcaster;
474
+ /** 动作注册表(HTTP RPC 分发用)。 */
475
+ registry: SatoriActionRegistry;
476
+ /** 登录信息构造(READY logins / meta 用)。 */
477
+ login: () => Login;
478
+ }
479
+ /** 按配置装配 Satori 传输。 */
480
+ declare function assembleSatoriTransports(opts: AssembleSatoriTransportsOptions): SatoriTransportSet;
481
+ /** 事件信令(adapter 广播用)。 */
482
+ declare function toEventSignal(event: Event): {
483
+ op: number;
484
+ body: Event;
485
+ };
486
+ //#endregion
487
+ export { type Argv, type AssembleSatoriTransportsOptions, type BidiList, type Button, type CanonicalToSatoriDeps, type Channel, type ChannelType, type Direction, type Emoji, type Event, type Friend, type Guild, type GuildMember, type GuildRole, HTTP_STATUS, type IdentifyBody, type List, type Login, type LoginStatus, type Message, type MetaBody, NapukettoSatoriAdapter, type Opcode, type Order, type ReadyBody, type SatoriActionDeps, SatoriActionError, type SatoriAdapterOptions, SatoriApi, type SatoriApiOptions, type SatoriConfig, type SatoriElement, type SatoriEventContent, type SatoriEventDeps, type SatoriToCanonicalDeps, type SatoriTransportSet, type Signal, type User, assembleSatoriTransports, canonicalToSatoriElements, createSatoriActionRegistry, parseContentToCanonical, parseElements, renderElements, satoriConfigSchema, satoriHttpStatusMap, satoriToCanonicalElements, toEventSignal };
488
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +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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"}