@anwenhappy2026/x-channel 0.1.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.
@@ -0,0 +1,314 @@
1
+ import { getXChannelRuntime } from "./runtime.js";
2
+ function info(log, message) {
3
+ log?.info?.(message);
4
+ }
5
+ function warn(log, message) {
6
+ log?.warn?.(message);
7
+ }
8
+ function logError(log, message) {
9
+ log?.error?.(message);
10
+ }
11
+ function toInboundBody(input) {
12
+ if (!input || typeof input !== "object") {
13
+ throw new Error("Request body must be a JSON object.");
14
+ }
15
+ const body = input;
16
+ if (typeof body.text !== "string" || !body.text.trim()) {
17
+ throw new Error("`text` is required and must be a non-empty string.");
18
+ }
19
+ return {
20
+ text: body.text,
21
+ userId: typeof body.userId === "string" ? body.userId : undefined,
22
+ accountId: typeof body.accountId === "string" ? body.accountId : undefined,
23
+ conversationId: typeof body.conversationId === "string" ? body.conversationId : undefined,
24
+ metadata: body.metadata && typeof body.metadata === "object"
25
+ ? body.metadata
26
+ : undefined,
27
+ };
28
+ }
29
+ async function dispatchInboundMessage(cfg, account, body, onChunk) {
30
+ const runtime = getXChannelRuntime();
31
+ const userId = body.userId ?? "ws-test-user";
32
+ const accountId = body.accountId ?? account.accountId ?? "default";
33
+ const conversationId = body.conversationId ??
34
+ account.defaultConversationId ??
35
+ "ws-test-conversation";
36
+ const route = runtime.channel.routing.resolveAgentRoute({
37
+ cfg,
38
+ channel: "x-channel",
39
+ accountId,
40
+ peer: { kind: "direct", id: userId },
41
+ });
42
+ const envelopeOptions = runtime.channel.reply.resolveEnvelopeFormatOptions(cfg);
43
+ const now = Date.now();
44
+ const fromAddress = `x-channel:user:${userId}`;
45
+ const bodyText = runtime.channel.reply.formatInboundEnvelope({
46
+ channel: "x-channel",
47
+ from: userId,
48
+ timestamp: now,
49
+ body: body.text,
50
+ chatType: "direct",
51
+ sender: { id: userId, name: userId },
52
+ envelope: envelopeOptions,
53
+ });
54
+ const ctxPayload = runtime.channel.reply.finalizeInboundContext({
55
+ Body: bodyText,
56
+ BodyForAgent: body.text,
57
+ RawBody: body.text,
58
+ CommandBody: body.text,
59
+ From: fromAddress,
60
+ To: fromAddress,
61
+ SessionKey: route.sessionKey,
62
+ AccountId: route.accountId,
63
+ ChatType: "direct",
64
+ SenderId: userId,
65
+ SenderName: userId,
66
+ Provider: "x-channel",
67
+ Surface: "x-channel",
68
+ MessageSid: `x-channel:${now}`,
69
+ Timestamp: now,
70
+ OriginatingChannel: "x-channel",
71
+ OriginatingTo: fromAddress,
72
+ ConversationId: conversationId,
73
+ });
74
+ const replies = [];
75
+ let chunkIndex = 0;
76
+ await runtime.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
77
+ ctx: ctxPayload,
78
+ cfg,
79
+ replyOptions: {
80
+ disableBlockStreaming: false,
81
+ },
82
+ dispatcherOptions: {
83
+ deliver: async (payload, info) => {
84
+ if (info.kind === "tool")
85
+ return;
86
+ const chunk = { kind: info.kind, text: payload.text };
87
+ replies.push(chunk);
88
+ if (onChunk) {
89
+ await onChunk({ ...chunk, index: chunkIndex++ });
90
+ }
91
+ },
92
+ },
93
+ });
94
+ return {
95
+ accountId,
96
+ userId,
97
+ text: body.text,
98
+ conversationId,
99
+ metadata: { from: "ws-client", ...(body.metadata ?? {}) },
100
+ replies,
101
+ };
102
+ }
103
+ async function startWsClient(cfg, account, abortSignal, log) {
104
+ const wsCfg = account.ws;
105
+ info(log, `[x-channel:${account.accountId}] ws init: enabled=${String(wsCfg.enabled)} url=${wsCfg.url ?? ""}`);
106
+ if (!wsCfg.enabled || !wsCfg.url) {
107
+ info(log, `[x-channel:${account.accountId}] ws disabled or url missing, skip ws client startup`);
108
+ return;
109
+ }
110
+ const WebSocketCtor = globalThis.WebSocket;
111
+ if (!WebSocketCtor) {
112
+ throw new Error("WebSocket runtime is unavailable in current Node runtime.");
113
+ }
114
+ let retries = 0;
115
+ let retryTimer = null;
116
+ let socket = null;
117
+ let stopped = false;
118
+ let opened = false;
119
+ const clearRetryTimer = () => {
120
+ if (retryTimer) {
121
+ clearTimeout(retryTimer);
122
+ retryTimer = null;
123
+ }
124
+ };
125
+ const closeSocket = () => {
126
+ if (!socket)
127
+ return;
128
+ try {
129
+ socket.close();
130
+ }
131
+ catch {
132
+ // no-op
133
+ }
134
+ socket = null;
135
+ };
136
+ const scheduleReconnect = () => {
137
+ if (stopped)
138
+ return;
139
+ if (wsCfg.maxRetries >= 0 && retries >= wsCfg.maxRetries) {
140
+ logError(log, `[x-channel:${account.accountId}] ws max retries reached (${wsCfg.maxRetries})`);
141
+ return;
142
+ }
143
+ const delay = Math.min(wsCfg.maxRetryMs, Math.round(wsCfg.initialRetryMs * wsCfg.backoffFactor ** retries));
144
+ retries += 1;
145
+ warn(log, `[x-channel:${account.accountId}] ws disconnected, reconnect in ${delay}ms (attempt ${retries})`);
146
+ retryTimer = setTimeout(() => {
147
+ void connect();
148
+ }, delay);
149
+ };
150
+ const connect = async () => {
151
+ if (stopped)
152
+ return;
153
+ clearRetryTimer();
154
+ closeSocket();
155
+ opened = false;
156
+ info(log, `[x-channel:${account.accountId}] ws connecting: ${wsCfg.url}`);
157
+ let timedOut = false;
158
+ const timeout = setTimeout(() => {
159
+ timedOut = true;
160
+ closeSocket();
161
+ }, wsCfg.connectTimeoutMs);
162
+ const ws = new WebSocketCtor(wsCfg.url, wsCfg.protocols.length > 0 ? wsCfg.protocols : undefined);
163
+ socket = ws;
164
+ ws.addEventListener("open", () => {
165
+ if (timedOut || stopped)
166
+ return;
167
+ clearTimeout(timeout);
168
+ opened = true;
169
+ retries = 0;
170
+ info(log, `[x-channel:${account.accountId}] ws connected: ${wsCfg.url}`);
171
+ if (wsCfg.handshake) {
172
+ try {
173
+ ws.send(JSON.stringify({
174
+ type: "handshake",
175
+ accountId: account.accountId,
176
+ channel: "x-channel",
177
+ ...wsCfg.handshake,
178
+ }));
179
+ }
180
+ catch (error) {
181
+ const message = error instanceof Error ? error.message : String(error);
182
+ warn(log, `[x-channel:${account.accountId}] ws handshake send failed: ${message}`);
183
+ }
184
+ }
185
+ });
186
+ ws.addEventListener("message", async (event) => {
187
+ if (stopped)
188
+ return;
189
+ try {
190
+ const raw = typeof event.data === "string" ? event.data : String(event.data);
191
+ const parsed = JSON.parse(raw);
192
+ const requestId = typeof parsed.requestId === "string" ? parsed.requestId : undefined;
193
+ const body = toInboundBody(parsed);
194
+ ws.send(JSON.stringify({
195
+ ok: true,
196
+ requestId,
197
+ type: "accepted",
198
+ message: "request accepted",
199
+ }));
200
+ let pendingLastDelta = null;
201
+ const dispatched = await dispatchInboundMessage(cfg, account, body, (chunk) => {
202
+ if (chunk.kind !== "block") {
203
+ return;
204
+ }
205
+ if (pendingLastDelta) {
206
+ ws.send(JSON.stringify({
207
+ ok: true,
208
+ requestId,
209
+ type: "delta",
210
+ done: false,
211
+ index: pendingLastDelta.index,
212
+ kind: pendingLastDelta.kind,
213
+ text: pendingLastDelta.text,
214
+ }));
215
+ }
216
+ pendingLastDelta = {
217
+ index: chunk.index,
218
+ kind: chunk.kind,
219
+ text: chunk.text ?? "",
220
+ };
221
+ });
222
+ if (pendingLastDelta) {
223
+ const delta = pendingLastDelta;
224
+ ws.send(JSON.stringify({
225
+ ok: true,
226
+ requestId,
227
+ type: "delta",
228
+ done: true,
229
+ index: delta.index,
230
+ kind: delta.kind,
231
+ text: delta.text,
232
+ event: {
233
+ channelId: "x-channel",
234
+ accountId: dispatched.accountId,
235
+ userId: dispatched.userId,
236
+ text: dispatched.text,
237
+ conversationId: dispatched.conversationId,
238
+ metadata: dispatched.metadata,
239
+ },
240
+ }));
241
+ }
242
+ else {
243
+ ws.send(JSON.stringify({
244
+ ok: true,
245
+ requestId,
246
+ type: "done",
247
+ done: true,
248
+ event: {
249
+ channelId: "x-channel",
250
+ accountId: dispatched.accountId,
251
+ userId: dispatched.userId,
252
+ text: dispatched.text,
253
+ conversationId: dispatched.conversationId,
254
+ metadata: dispatched.metadata,
255
+ },
256
+ }));
257
+ }
258
+ }
259
+ catch (error) {
260
+ const message = error instanceof Error ? error.message : "Unknown ws message error.";
261
+ logError(log, `[x-channel:${account.accountId}] ws message error: ${message}`);
262
+ try {
263
+ ws.send(JSON.stringify({ ok: false, error: message }));
264
+ }
265
+ catch {
266
+ // no-op
267
+ }
268
+ }
269
+ });
270
+ ws.addEventListener("error", (event) => {
271
+ if (stopped)
272
+ return;
273
+ const message = event instanceof Error
274
+ ? event.message
275
+ : typeof event?.message === "string"
276
+ ? event.message
277
+ : "unknown ws error";
278
+ warn(log, `[x-channel:${account.accountId}] ws error: ${message}`);
279
+ });
280
+ ws.addEventListener("close", (event) => {
281
+ clearTimeout(timeout);
282
+ if (stopped)
283
+ return;
284
+ const code = typeof event?.code === "number" ? event.code : -1;
285
+ const reason = typeof event?.reason === "string" ? event.reason : "";
286
+ warn(log, `[x-channel:${account.accountId}] ws closed: code=${code} reason=${reason}`);
287
+ if (!opened && timedOut) {
288
+ warn(log, `[x-channel:${account.accountId}] ws connect timeout after ${wsCfg.connectTimeoutMs}ms`);
289
+ }
290
+ scheduleReconnect();
291
+ });
292
+ };
293
+ abortSignal.addEventListener("abort", () => {
294
+ stopped = true;
295
+ clearRetryTimer();
296
+ closeSocket();
297
+ info(log, `[x-channel:${account.accountId}] ws stopped by abort signal`);
298
+ }, { once: true });
299
+ await connect();
300
+ }
301
+ export async function startGateway(ctx) {
302
+ const { account, abortSignal, cfg, log, onReady, onError } = ctx;
303
+ info(log, `[x-channel:${account.accountId}] gateway init: HTTP route registered on OpenClaw server at /v1/chat/completions`);
304
+ try {
305
+ await startWsClient(cfg, account, abortSignal, log);
306
+ onReady?.();
307
+ }
308
+ catch (error) {
309
+ const message = error instanceof Error ? error.message : "Failed to start ws client.";
310
+ logError(log, `[x-channel:${account.accountId}] ${message}`);
311
+ onError?.(error instanceof Error ? error : new Error(message));
312
+ }
313
+ }
314
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
3
+ export declare function createHttpHandler(api: OpenClawPluginApi): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
4
+ //# sourceMappingURL=http-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-handler.d.ts","sourceRoot":"","sources":["../../src/http-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,qBAAqB,CAAC;AA6W7E,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,iBAAiB,GACrB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAwN9D"}