@qqvu/openclaw-channel 1.0.0
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/dist/api-client.d.ts +77 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +265 -0
- package/dist/api-client.js.map +1 -0
- package/dist/channel.d.ts +80 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +226 -0
- package/dist/channel.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +483 -0
- package/dist/index.js.map +1 -0
- package/dist/message-adapter.d.ts +35 -0
- package/dist/message-adapter.d.ts.map +1 -0
- package/dist/message-adapter.js +112 -0
- package/dist/message-adapter.js.map +1 -0
- package/dist/types.d.ts +72 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket-client.d.ts +50 -0
- package/dist/websocket-client.d.ts.map +1 -0
- package/dist/websocket-client.js +157 -0
- package/dist/websocket-client.js.map +1 -0
- package/openclaw.plugin.json +20 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QAoiBxC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import { pufferfishChannel, removeRuntimeAccount, setRuntimeAccount } from './channel.js';
|
|
2
|
+
import { PufferfishWebSocketClient } from './websocket-client.js';
|
|
3
|
+
import { MessageAdapter } from './message-adapter.js';
|
|
4
|
+
import { PufferfishAPIClient } from './api-client.js';
|
|
5
|
+
// 注意:OpenClaw 安全扫描会拦截“读取外部进程环境 + 网络发送”的组合模式;
|
|
6
|
+
// 本插件不读取环境变量,也不再使用本地绝对路径兜底加载 openclaw 模块。
|
|
7
|
+
/**
|
|
8
|
+
* OpenClaw 插件注册函数
|
|
9
|
+
* 这是插件的入口点,OpenClaw 启动时会调用此函数
|
|
10
|
+
* @param api OpenClaw Plugin API 对象
|
|
11
|
+
*/
|
|
12
|
+
export default function register(api) {
|
|
13
|
+
api.logger.info('Pufferfish Channel Plugin loaded!');
|
|
14
|
+
// 注册 Pufferfish Channel 到 OpenClaw
|
|
15
|
+
api.registerChannel({ plugin: pufferfishChannel });
|
|
16
|
+
// OpenClaw 2026+:完整配置在 api.config(旧版 api.getConfig 已移除)
|
|
17
|
+
const config = api.config ?? {};
|
|
18
|
+
const channelConfig = config.channels?.pufferfish ?? {};
|
|
19
|
+
const discovery = channelConfig.discovery;
|
|
20
|
+
const staticAccounts = channelConfig.accounts ?? {};
|
|
21
|
+
const runtimeConnections = new Map();
|
|
22
|
+
// discovery workerId:优先使用配置(出于 OpenClaw 安全扫描要求,不读取环境变量)
|
|
23
|
+
const workerId = discovery?.workerId ||
|
|
24
|
+
`channel-${process.pid}`;
|
|
25
|
+
let discoveryTimer = null;
|
|
26
|
+
let globalToken = null; // 全局 Token
|
|
27
|
+
let tokenExpiresAt = 0; // Token 过期时间(Unix 时间戳,秒)
|
|
28
|
+
let tokenRefreshTimer = null; // Token 刷新定时器
|
|
29
|
+
let dispatchInboundDirectDmWithRuntime = null;
|
|
30
|
+
const loadDispatchInboundDirectDmWithRuntime = async () => {
|
|
31
|
+
if (dispatchInboundDirectDmWithRuntime)
|
|
32
|
+
return dispatchInboundDirectDmWithRuntime;
|
|
33
|
+
// 优先使用模块导入;如果你本地没把 `openclaw` 装到 node_modules,这里会失败。
|
|
34
|
+
// 运行时(openclaw 宿主进程)通常会可用。
|
|
35
|
+
try {
|
|
36
|
+
const mod = await import('openclaw/plugin-sdk/channel-inbound');
|
|
37
|
+
const fn = mod.dispatchInboundDirectDmWithRuntime;
|
|
38
|
+
if (typeof fn !== 'function') {
|
|
39
|
+
throw new Error('dispatchInboundDirectDmWithRuntime 不是函数');
|
|
40
|
+
}
|
|
41
|
+
dispatchInboundDirectDmWithRuntime = fn;
|
|
42
|
+
return fn;
|
|
43
|
+
}
|
|
44
|
+
catch (_) {
|
|
45
|
+
// ignore and fallthrough
|
|
46
|
+
}
|
|
47
|
+
// 不再从环境变量或固定路径做兜底,避免被 OpenClaw 安全扫描拦截。
|
|
48
|
+
throw new Error('OpenClaw direct DM dispatch 加载失败:无法从 openclaw/plugin-sdk/channel-inbound 导入。请确认 OpenClaw 宿主已提供该模块。');
|
|
49
|
+
};
|
|
50
|
+
const ingestIncomingMessage = async (payload) => {
|
|
51
|
+
const dispatchFn = await loadDispatchInboundDirectDmWithRuntime();
|
|
52
|
+
const rawBody = typeof payload?.message?.text === 'string' ? payload.message.text : '';
|
|
53
|
+
const tsMs = payload.timestamp < 1e12 ? payload.timestamp * 1000 : payload.timestamp;
|
|
54
|
+
const senderAddress = `${payload.channelId}:${payload.senderId}`;
|
|
55
|
+
const recipientAddress = payload.chatId;
|
|
56
|
+
const conversationLabel = payload.chatId;
|
|
57
|
+
const normalizeReplyText = (raw) => {
|
|
58
|
+
const s = String(raw ?? '');
|
|
59
|
+
if (!s.trim())
|
|
60
|
+
return '';
|
|
61
|
+
const fenced = s.match(/```json\s*([\s\S]*?)\s*```/i);
|
|
62
|
+
const candidate = fenced?.[1]?.trim() ?? (s.trim().startsWith('{') ? s.trim() : '');
|
|
63
|
+
if (candidate) {
|
|
64
|
+
try {
|
|
65
|
+
const obj = JSON.parse(candidate);
|
|
66
|
+
const msg = obj?.parameters?.message;
|
|
67
|
+
if (typeof msg === 'string' && msg.trim()) {
|
|
68
|
+
return msg.trim();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (_) {
|
|
72
|
+
// ignore parse failures
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const inlineMsg = s.match(/"message"\s*:\s*"((?:\\.|[^"\\])*)"/);
|
|
76
|
+
if (inlineMsg?.[1]) {
|
|
77
|
+
return inlineMsg[1]
|
|
78
|
+
.replace(/\\"/g, '"')
|
|
79
|
+
.replace(/\\n/g, '\n')
|
|
80
|
+
.trim();
|
|
81
|
+
}
|
|
82
|
+
return s;
|
|
83
|
+
};
|
|
84
|
+
// direct DM 入站分发运行时所需的“通道子面板”
|
|
85
|
+
// 这些函数都在宿主注入的 api.runtime.channel 里
|
|
86
|
+
const runtime = {
|
|
87
|
+
channel: {
|
|
88
|
+
routing: {
|
|
89
|
+
resolveAgentRoute: api.runtime.channel.routing.resolveAgentRoute,
|
|
90
|
+
},
|
|
91
|
+
session: {
|
|
92
|
+
resolveStorePath: api.runtime.channel.session.resolveStorePath,
|
|
93
|
+
readSessionUpdatedAt: api.runtime.channel.session.readSessionUpdatedAt,
|
|
94
|
+
recordInboundSession: api.runtime.channel.session.recordInboundSession,
|
|
95
|
+
},
|
|
96
|
+
reply: {
|
|
97
|
+
resolveEnvelopeFormatOptions: api.runtime.channel.reply.resolveEnvelopeFormatOptions,
|
|
98
|
+
formatAgentEnvelope: api.runtime.channel.reply.formatAgentEnvelope,
|
|
99
|
+
finalizeInboundContext: api.runtime.channel.reply.finalizeInboundContext,
|
|
100
|
+
dispatchReplyWithBufferedBlockDispatcher: api.runtime.channel.reply.dispatchReplyWithBufferedBlockDispatcher,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
const deliver = async (outboundPayload) => {
|
|
105
|
+
const client = new PufferfishAPIClient(payload.account);
|
|
106
|
+
const rawText = typeof outboundPayload?.text === 'string' ? outboundPayload.text : '';
|
|
107
|
+
// 打印模型回复,便于排查(避免日志过长,仅截断)
|
|
108
|
+
try {
|
|
109
|
+
const prefix = '[Pufferfish Channel] Model reply';
|
|
110
|
+
api.logger.info(`${prefix} chatId=${payload.chatId} botUserId=${payload.account?.botUserId ?? 'unknown'} rawLen=${rawText.length} rawPreview=${rawText.slice(0, 800)}`);
|
|
111
|
+
if (rawText.includes('```json') || rawText.includes('pufferfish_get_user_info')) {
|
|
112
|
+
api.logger.info(`${prefix} contains tool-plan markers (hasFenceJson=${rawText.includes('```json')})`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (_) {
|
|
116
|
+
// ignore logger errors
|
|
117
|
+
}
|
|
118
|
+
// 兜底:如果模型输出的是“工具调用计划”(例如 fenced JSON:{ name, parameters })
|
|
119
|
+
// 但没有真正执行工具,那么这里尝试按最常见工具做一次本地执行,
|
|
120
|
+
// 直接把工具结果转成自然语言再发回 Pufferfish。
|
|
121
|
+
const tryExecuteToolCallPlan = async (raw) => {
|
|
122
|
+
if (!raw || !raw.includes('```json'))
|
|
123
|
+
return null;
|
|
124
|
+
const blocks = raw.match(/```json\s*([\s\S]*?)\s*```/gi) ?? [];
|
|
125
|
+
if (blocks.length === 0)
|
|
126
|
+
return null;
|
|
127
|
+
const baseUrl = String(payload.account.apiUrl ?? '')
|
|
128
|
+
.trim()
|
|
129
|
+
.replace(/\/+$/, '')
|
|
130
|
+
.replace(/\/v1$/, '');
|
|
131
|
+
const token = String(payload.account.token ?? '');
|
|
132
|
+
if (!baseUrl || !token)
|
|
133
|
+
return null;
|
|
134
|
+
for (const block of blocks) {
|
|
135
|
+
// 只解析 code fence 内 JSON
|
|
136
|
+
const candidate = block.replace(/```json/i, '').replace(/```/g, '').trim();
|
|
137
|
+
if (!candidate)
|
|
138
|
+
continue;
|
|
139
|
+
let obj;
|
|
140
|
+
try {
|
|
141
|
+
obj = JSON.parse(candidate);
|
|
142
|
+
}
|
|
143
|
+
catch (_) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const toolName = obj?.name;
|
|
147
|
+
const params = obj?.parameters ?? {};
|
|
148
|
+
if (toolName === 'pufferfish_get_user_info') {
|
|
149
|
+
const userId = params?.userId;
|
|
150
|
+
if (typeof userId !== 'number')
|
|
151
|
+
continue;
|
|
152
|
+
try {
|
|
153
|
+
const resp = await fetch(`${baseUrl}/v1/user/${userId}`, {
|
|
154
|
+
method: 'GET',
|
|
155
|
+
headers: {
|
|
156
|
+
Authorization: `Bearer ${token}`,
|
|
157
|
+
'Content-Type': 'application/json',
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
if (!resp.ok) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const user = await resp.json();
|
|
164
|
+
const nickname = user?.nickname ?? '';
|
|
165
|
+
const username = user?.username ?? '';
|
|
166
|
+
if (nickname && username) {
|
|
167
|
+
return `用户信息: ${nickname} (@${username})`;
|
|
168
|
+
}
|
|
169
|
+
return nickname ? `用户信息: ${nickname}` : null;
|
|
170
|
+
}
|
|
171
|
+
catch (_) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
};
|
|
178
|
+
const executedText = await tryExecuteToolCallPlan(rawText);
|
|
179
|
+
if (executedText != null && executedText !== rawText) {
|
|
180
|
+
try {
|
|
181
|
+
api.logger.info(`[Pufferfish Channel] executed tool-plan -> preview=${executedText.slice(0, 800)}`);
|
|
182
|
+
}
|
|
183
|
+
catch (_) {
|
|
184
|
+
// ignore logger errors
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const text = normalizeReplyText(executedText ?? rawText);
|
|
188
|
+
const mediaUrls = Array.isArray(outboundPayload?.mediaUrls)
|
|
189
|
+
? outboundPayload.mediaUrls
|
|
190
|
+
: outboundPayload?.mediaUrl
|
|
191
|
+
? [outboundPayload.mediaUrl]
|
|
192
|
+
: [];
|
|
193
|
+
// 先发媒体,再发文本(Pufferfish 侧不支持“媒体内嵌 caption”,所以只能拆成两条)
|
|
194
|
+
for (const mediaUrl of mediaUrls) {
|
|
195
|
+
const buf = await client.downloadFile(mediaUrl);
|
|
196
|
+
const mime = api?.runtime?.media?.detectMime
|
|
197
|
+
? await api.runtime.media.detectMime({ buffer: buf })
|
|
198
|
+
: undefined;
|
|
199
|
+
if (mime && mime.startsWith('image/')) {
|
|
200
|
+
const ossUrl = await client.uploadFile(buf, 'image.jpg');
|
|
201
|
+
await client.sendMessage({
|
|
202
|
+
chatId: payload.chatId,
|
|
203
|
+
type: 'image',
|
|
204
|
+
content: ossUrl,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const fileExt = mime?.split('/')?.[1] ?? 'bin';
|
|
209
|
+
const fileName = `file.${fileExt}`;
|
|
210
|
+
const ossUrl = await client.uploadFile(buf, fileName);
|
|
211
|
+
await client.sendMessage({
|
|
212
|
+
chatId: payload.chatId,
|
|
213
|
+
type: 'file',
|
|
214
|
+
content: ossUrl,
|
|
215
|
+
metadata: { fileName },
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (text) {
|
|
220
|
+
await client.sendMessage({
|
|
221
|
+
chatId: payload.chatId,
|
|
222
|
+
type: 'text',
|
|
223
|
+
content: text,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
await dispatchFn({
|
|
228
|
+
cfg: api.config,
|
|
229
|
+
runtime,
|
|
230
|
+
channel: payload.channelId,
|
|
231
|
+
channelLabel: pufferfishChannel?.meta?.label ?? payload.channelId,
|
|
232
|
+
accountId: payload.accountId,
|
|
233
|
+
peer: {
|
|
234
|
+
kind: 'direct',
|
|
235
|
+
id: payload.senderId,
|
|
236
|
+
},
|
|
237
|
+
senderId: payload.senderId,
|
|
238
|
+
senderAddress,
|
|
239
|
+
recipientAddress,
|
|
240
|
+
conversationLabel,
|
|
241
|
+
rawBody,
|
|
242
|
+
messageId: payload.messageId,
|
|
243
|
+
timestamp: tsMs,
|
|
244
|
+
// 明确告诉 OpenClaw:回复要路由回我们在 Pufferfish 里看到的会话
|
|
245
|
+
originatingChannel: payload.channelId,
|
|
246
|
+
originatingTo: payload.chatId,
|
|
247
|
+
deliver,
|
|
248
|
+
onRecordError: (err) => {
|
|
249
|
+
api.logger.error(`Pufferfish inbound: record session failed: ${String(err)}`);
|
|
250
|
+
},
|
|
251
|
+
onDispatchError: (err, info) => {
|
|
252
|
+
api.logger.error(`Pufferfish inbound: dispatch failed (${info.kind}): ${String(err)}`);
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
const disconnectAccount = (accountId) => {
|
|
257
|
+
const runtime = runtimeConnections.get(accountId);
|
|
258
|
+
if (!runtime)
|
|
259
|
+
return;
|
|
260
|
+
api.logger.info(`关闭 Pufferfish WebSocket [账号: ${accountId}]`);
|
|
261
|
+
runtime.wsClient.disconnect();
|
|
262
|
+
removeRuntimeAccount(accountId);
|
|
263
|
+
runtimeConnections.delete(accountId);
|
|
264
|
+
};
|
|
265
|
+
const connectAccount = (account) => {
|
|
266
|
+
const existing = runtimeConnections.get(account.accountId);
|
|
267
|
+
if (existing &&
|
|
268
|
+
existing.account.apiUrl === account.apiUrl &&
|
|
269
|
+
existing.account.wsUrl === account.wsUrl &&
|
|
270
|
+
existing.account.botUserId === account.botUserId) {
|
|
271
|
+
existing.account = account;
|
|
272
|
+
existing.wsClient.updateAccount(account);
|
|
273
|
+
setRuntimeAccount(account);
|
|
274
|
+
// 已建立 WS 时 discovery 仅刷新 token,不必重连。
|
|
275
|
+
if (existing.wsClient.isOpen()) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
// 曾失败/未连上时不能 return:否则下一轮 discovery 仍视为「仅 token 变化」而永远不连。
|
|
279
|
+
existing.wsClient.connect().catch((error) => {
|
|
280
|
+
api.logger.error(`连接 Pufferfish WebSocket 失败 [账号: ${account.accountId}]:`, error);
|
|
281
|
+
});
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (existing) {
|
|
285
|
+
disconnectAccount(account.accountId);
|
|
286
|
+
}
|
|
287
|
+
const wsClient = new PufferfishWebSocketClient(account);
|
|
288
|
+
const adapter = new MessageAdapter();
|
|
289
|
+
wsClient.on('connected', () => {
|
|
290
|
+
api.logger.info(`Pufferfish WebSocket 已连接 [accountId: ${account.accountId}] [botUserId: ${account.botUserId}]`);
|
|
291
|
+
});
|
|
292
|
+
wsClient.on('disconnected', () => {
|
|
293
|
+
api.logger.warn(`Pufferfish WebSocket 已断开 [accountId: ${account.accountId}] [botUserId: ${account.botUserId}]`);
|
|
294
|
+
});
|
|
295
|
+
wsClient.on('error', (error) => {
|
|
296
|
+
api.logger.error(`Pufferfish WebSocket 错误 [accountId: ${account.accountId}] [botUserId: ${account.botUserId}]:`, error);
|
|
297
|
+
});
|
|
298
|
+
wsClient.on('message', async (msg) => {
|
|
299
|
+
try {
|
|
300
|
+
api.logger.debug(`收到 Pufferfish 消息: ${msg.messageId}`);
|
|
301
|
+
const openclawMsg = adapter.toOpenClawMessage(msg);
|
|
302
|
+
await ingestIncomingMessage({
|
|
303
|
+
account,
|
|
304
|
+
channelId: 'pufferfish',
|
|
305
|
+
accountId: account.accountId,
|
|
306
|
+
chatId: msg.chatId,
|
|
307
|
+
senderId: msg.userId.toString(),
|
|
308
|
+
messageId: msg.messageId,
|
|
309
|
+
message: openclawMsg,
|
|
310
|
+
timestamp: msg.timestamp,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
const errMsg = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
315
|
+
api.logger.error(`处理 Pufferfish 消息失败 [accountId: ${account.accountId}] [botUserId: ${account.botUserId}] [messageId: ${msg?.messageId ?? 'unknown'}]: ${errMsg}; raw=${JSON.stringify(msg)}`);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
runtimeConnections.set(account.accountId, { account, wsClient });
|
|
319
|
+
setRuntimeAccount(account);
|
|
320
|
+
wsClient.connect().catch((error) => {
|
|
321
|
+
api.logger.error(`连接 Pufferfish WebSocket 失败 [账号: ${account.accountId}]:`, error);
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
const applyAccounts = (accounts) => {
|
|
325
|
+
const nextIds = new Set();
|
|
326
|
+
for (const account of accounts) {
|
|
327
|
+
if (!account.enabled)
|
|
328
|
+
continue;
|
|
329
|
+
nextIds.add(account.accountId);
|
|
330
|
+
connectAccount(account);
|
|
331
|
+
}
|
|
332
|
+
for (const accountId of runtimeConnections.keys()) {
|
|
333
|
+
if (!nextIds.has(accountId)) {
|
|
334
|
+
disconnectAccount(accountId);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
const loadStaticAccounts = () => {
|
|
339
|
+
const accounts = Object.entries(staticAccounts)
|
|
340
|
+
.map(([accountId, accountConfig]) => ({
|
|
341
|
+
accountId,
|
|
342
|
+
enabled: accountConfig.enabled,
|
|
343
|
+
apiUrl: accountConfig.apiUrl,
|
|
344
|
+
wsUrl: accountConfig.wsUrl,
|
|
345
|
+
botUserId: accountConfig.botUserId,
|
|
346
|
+
token: accountConfig.token,
|
|
347
|
+
privateKey: accountConfig.privateKey,
|
|
348
|
+
}))
|
|
349
|
+
.filter((account) => account.enabled);
|
|
350
|
+
applyAccounts(accounts);
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* 请求或刷新全局 Token
|
|
354
|
+
*/
|
|
355
|
+
const ensureGlobalToken = async (client, operatorApiKey, workerId) => {
|
|
356
|
+
const now = Math.floor(Date.now() / 1000);
|
|
357
|
+
// 如果 token 还有效(距离过期还有 60 秒以上),直接返回
|
|
358
|
+
if (globalToken && tokenExpiresAt > now + 60) {
|
|
359
|
+
return globalToken;
|
|
360
|
+
}
|
|
361
|
+
// 如果有旧 token,尝试刷新
|
|
362
|
+
if (globalToken) {
|
|
363
|
+
try {
|
|
364
|
+
api.logger.info('刷新全局 Token...');
|
|
365
|
+
const result = await client.refreshGlobalToken(workerId, globalToken);
|
|
366
|
+
globalToken = result.token;
|
|
367
|
+
tokenExpiresAt = result.expiresAt;
|
|
368
|
+
scheduleTokenRefresh(client, operatorApiKey, workerId);
|
|
369
|
+
api.logger.info(`全局 Token 刷新成功,过期时间: ${new Date(tokenExpiresAt * 1000).toISOString()}`);
|
|
370
|
+
return globalToken;
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
api.logger.warn('刷新全局 Token 失败,尝试重新请求:', error);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// 请求新 token
|
|
377
|
+
api.logger.info('请求全局 Token...');
|
|
378
|
+
const result = await client.requestGlobalToken(workerId, operatorApiKey);
|
|
379
|
+
globalToken = result.token;
|
|
380
|
+
tokenExpiresAt = result.expiresAt;
|
|
381
|
+
scheduleTokenRefresh(client, operatorApiKey, workerId);
|
|
382
|
+
api.logger.info(`全局 Token 获取成功,过期时间: ${new Date(tokenExpiresAt * 1000).toISOString()}`);
|
|
383
|
+
return globalToken;
|
|
384
|
+
};
|
|
385
|
+
/**
|
|
386
|
+
* 安排 Token 自动刷新
|
|
387
|
+
*/
|
|
388
|
+
const scheduleTokenRefresh = (client, operatorApiKey, workerId) => {
|
|
389
|
+
if (tokenRefreshTimer) {
|
|
390
|
+
clearTimeout(tokenRefreshTimer);
|
|
391
|
+
tokenRefreshTimer = null;
|
|
392
|
+
}
|
|
393
|
+
const now = Math.floor(Date.now() / 1000);
|
|
394
|
+
const ttl = tokenExpiresAt - now;
|
|
395
|
+
// 在过期前 5 分钟刷新(或 TTL 的 80%,取较小值)
|
|
396
|
+
const refreshBeforeSeconds = Math.min(300, Math.floor(ttl * 0.2));
|
|
397
|
+
const refreshInSeconds = Math.max(1, ttl - refreshBeforeSeconds);
|
|
398
|
+
api.logger.debug(`将在 ${refreshInSeconds} 秒后刷新 Token`);
|
|
399
|
+
tokenRefreshTimer = setTimeout(() => {
|
|
400
|
+
ensureGlobalToken(client, operatorApiKey, workerId).catch((error) => {
|
|
401
|
+
api.logger.error('自动刷新 Token 失败:', error);
|
|
402
|
+
});
|
|
403
|
+
}, refreshInSeconds * 1000);
|
|
404
|
+
};
|
|
405
|
+
const startDiscovery = async () => {
|
|
406
|
+
// 默认 1 小时轮询一次(旧代码的默认值误写成 36000000 秒,会导致 setInterval 溢出并退化为 1ms 触发)
|
|
407
|
+
const parsedInterval = Number(discovery?.intervalSeconds);
|
|
408
|
+
const intervalSeconds = Number.isFinite(parsedInterval) && parsedInterval > 0
|
|
409
|
+
? Math.max(5, parsedInterval)
|
|
410
|
+
: 3600;
|
|
411
|
+
const leaseSeconds = Math.max(intervalSeconds * 3, 30);
|
|
412
|
+
const operatorApiKey = discovery?.operatorApiKey ?? '';
|
|
413
|
+
const client = new PufferfishAPIClient({
|
|
414
|
+
accountId: 'discovery',
|
|
415
|
+
enabled: true,
|
|
416
|
+
apiUrl: discovery?.apiUrl ?? '',
|
|
417
|
+
wsUrl: '',
|
|
418
|
+
botUserId: 0,
|
|
419
|
+
token: '', // 不再使用静态 token
|
|
420
|
+
});
|
|
421
|
+
// 首次请求 token
|
|
422
|
+
try {
|
|
423
|
+
await ensureGlobalToken(client, operatorApiKey, workerId);
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
const msg = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
427
|
+
api.logger.error('获取全局 Token 失败:', msg);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const refresh = async () => {
|
|
431
|
+
try {
|
|
432
|
+
// 确保 token 有效
|
|
433
|
+
const token = await ensureGlobalToken(client, operatorApiKey, workerId);
|
|
434
|
+
// 拉取机器人列表
|
|
435
|
+
const accounts = await client.discoverAccounts(token, {
|
|
436
|
+
workerId,
|
|
437
|
+
leaseSeconds,
|
|
438
|
+
});
|
|
439
|
+
applyAccounts(accounts);
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
const msg = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
443
|
+
api.logger.error('Pufferfish discovery 拉取失败:', msg);
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
refresh().catch(() => undefined);
|
|
447
|
+
// Node 的 setInterval/setTimeout 最大延迟约为 2^31-1 ms;超过会触发 TimeoutOverflowWarning 并被强制设为 1ms。
|
|
448
|
+
const maxIntervalSeconds = Math.floor(2_147_483_647 / 1000);
|
|
449
|
+
const safeIntervalSeconds = Math.min(intervalSeconds, maxIntervalSeconds);
|
|
450
|
+
if (safeIntervalSeconds !== intervalSeconds) {
|
|
451
|
+
api.logger.warn(`discovery intervalSeconds=${intervalSeconds} 超出 Node 定时器上限,已降级为 ${safeIntervalSeconds}s`);
|
|
452
|
+
}
|
|
453
|
+
discoveryTimer = setInterval(() => {
|
|
454
|
+
refresh().catch(() => undefined);
|
|
455
|
+
}, safeIntervalSeconds * 1000);
|
|
456
|
+
};
|
|
457
|
+
const discoveryEnabled = !!(discovery?.enabled && discovery.apiUrl && discovery.operatorApiKey);
|
|
458
|
+
if (discoveryEnabled) {
|
|
459
|
+
api.logger.info('Pufferfish Channel 运行在 discovery 模式');
|
|
460
|
+
startDiscovery().catch((error) => {
|
|
461
|
+
const msg = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
462
|
+
api.logger.error('启动 discovery 失败:', msg);
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
api.logger.info('Pufferfish Channel 运行在静态账号模式');
|
|
467
|
+
loadStaticAccounts();
|
|
468
|
+
}
|
|
469
|
+
api.on('gateway_stop', () => {
|
|
470
|
+
if (discoveryTimer) {
|
|
471
|
+
clearInterval(discoveryTimer);
|
|
472
|
+
discoveryTimer = null;
|
|
473
|
+
}
|
|
474
|
+
if (tokenRefreshTimer) {
|
|
475
|
+
clearTimeout(tokenRefreshTimer);
|
|
476
|
+
tokenRefreshTimer = null;
|
|
477
|
+
}
|
|
478
|
+
for (const accountId of runtimeConnections.keys()) {
|
|
479
|
+
disconnectAccount(accountId);
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PufferfishMessage, OpenClawMessage } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 消息格式适配器
|
|
4
|
+
* 负责在 Pufferfish 消息格式和 OpenClaw 消息格式之间转换
|
|
5
|
+
*/
|
|
6
|
+
export declare class MessageAdapter {
|
|
7
|
+
/**
|
|
8
|
+
* 尝试从 Pufferfish 侧透传的 content 中解码 MessageContent(base64(JSON))。
|
|
9
|
+
*
|
|
10
|
+
* Pufferfish 服务端在 WS 转发时会原样透传 `message.Content`,
|
|
11
|
+
* 而该字段在 encryptVersion=0 时是 base64(JSON)。
|
|
12
|
+
*
|
|
13
|
+
* 解码失败则返回 null,调用方应回退使用原始 msg.content。
|
|
14
|
+
*/
|
|
15
|
+
private tryDecodeMessageContent;
|
|
16
|
+
/**
|
|
17
|
+
* 将 Pufferfish 消息转换为 OpenClaw 格式
|
|
18
|
+
* @param msg Pufferfish 消息对象
|
|
19
|
+
* @returns OpenClaw 消息对象
|
|
20
|
+
*/
|
|
21
|
+
toOpenClawMessage(msg: PufferfishMessage): OpenClawMessage;
|
|
22
|
+
/**
|
|
23
|
+
* 从 OpenClaw 消息提取文本内容
|
|
24
|
+
*/
|
|
25
|
+
extractText(msg: OpenClawMessage): string;
|
|
26
|
+
/**
|
|
27
|
+
* 检查消息是否包含图片
|
|
28
|
+
*/
|
|
29
|
+
hasImage(msg: OpenClawMessage): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* 检查消息是否包含文件
|
|
32
|
+
*/
|
|
33
|
+
hasFile(msg: OpenClawMessage): boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=message-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-adapter.d.ts","sourceRoot":"","sources":["../src/message-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErE;;;GAGG;AACH,qBAAa,cAAc;IACzB;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,eAAe;IA6E1D;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM;IAIzC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAIvC;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;CAGvC"}
|