@openclaw/crabline 0.1.6 → 0.1.8

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.
Files changed (47) hide show
  1. package/README.md +107 -2
  2. package/dist/src/cli/program.js +63 -4
  3. package/dist/src/cli/program.js.map +1 -1
  4. package/dist/src/index.d.ts +8 -0
  5. package/dist/src/index.js +4 -0
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/openclaw/bridges/matrix.d.ts +1 -0
  8. package/dist/src/openclaw/bridges/matrix.js +134 -0
  9. package/dist/src/openclaw/bridges/matrix.js.map +1 -0
  10. package/dist/src/openclaw/bridges/mattermost.d.ts +1 -0
  11. package/dist/src/openclaw/bridges/mattermost.js +116 -0
  12. package/dist/src/openclaw/bridges/mattermost.js.map +1 -0
  13. package/dist/src/openclaw/bridges/signal.d.ts +1 -0
  14. package/dist/src/openclaw/bridges/signal.js +112 -0
  15. package/dist/src/openclaw/bridges/signal.js.map +1 -0
  16. package/dist/src/openclaw/bridges/telegram.js +11 -0
  17. package/dist/src/openclaw/bridges/telegram.js.map +1 -1
  18. package/dist/src/openclaw/bridges/zalo.d.ts +1 -0
  19. package/dist/src/openclaw/bridges/zalo.js +102 -0
  20. package/dist/src/openclaw/bridges/zalo.js.map +1 -0
  21. package/dist/src/openclaw/shared.d.ts +3 -0
  22. package/dist/src/openclaw/shared.js.map +1 -1
  23. package/dist/src/openclaw.js +8 -0
  24. package/dist/src/openclaw.js.map +1 -1
  25. package/dist/src/providers/catalog.js +1 -1
  26. package/dist/src/providers/catalog.js.map +1 -1
  27. package/dist/src/servers/http.js +1 -1
  28. package/dist/src/servers/http.js.map +1 -1
  29. package/dist/src/servers/index.d.ts +28 -4
  30. package/dist/src/servers/index.js +25 -1
  31. package/dist/src/servers/index.js.map +1 -1
  32. package/dist/src/servers/matrix.d.ts +37 -0
  33. package/dist/src/servers/matrix.js +387 -0
  34. package/dist/src/servers/matrix.js.map +1 -0
  35. package/dist/src/servers/mattermost.d.ts +33 -0
  36. package/dist/src/servers/mattermost.js +361 -0
  37. package/dist/src/servers/mattermost.js.map +1 -0
  38. package/dist/src/servers/signal.d.ts +27 -0
  39. package/dist/src/servers/signal.js +201 -0
  40. package/dist/src/servers/signal.js.map +1 -0
  41. package/dist/src/servers/telegram.js +8 -0
  42. package/dist/src/servers/telegram.js.map +1 -1
  43. package/dist/src/servers/zalo.d.ts +31 -0
  44. package/dist/src/servers/zalo.js +276 -0
  45. package/dist/src/servers/zalo.js.map +1 -0
  46. package/docs/channel-setup.md +129 -3
  47. package/package.json +5 -4
@@ -0,0 +1,387 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { adminAuthError, hasAdminToken, jsonResponse, parseRequestBody, queryRecord, readInteger, readTrimmedString, startHttpJsonServer, } from "./http.js";
5
+ function matrixId(prefix, value, serverName) {
6
+ return `${prefix}${createHash("sha256").update(value).digest("hex").slice(0, 16)}:${serverName}`;
7
+ }
8
+ async function appendEvent(state, event) {
9
+ await fs.mkdir(path.dirname(state.recorderPath), { recursive: true });
10
+ await fs.appendFile(state.recorderPath, `${JSON.stringify(event)}\n`, "utf8");
11
+ }
12
+ function authorized(request, token) {
13
+ const [scheme, value] = request.headers.authorization?.trim().split(/\s+/, 2) ?? [];
14
+ return scheme?.toLowerCase() === "bearer" && value === token;
15
+ }
16
+ function matrixError(errcode, error, status) {
17
+ return jsonResponse({ errcode, error }, status);
18
+ }
19
+ function eventId(state) {
20
+ return matrixId("$", `event-${state.nextEvent++}`, state.serverName);
21
+ }
22
+ function notifySyncWaiters(state) {
23
+ for (const resolve of state.syncWaiters) {
24
+ resolve();
25
+ }
26
+ state.syncWaiters.clear();
27
+ }
28
+ async function waitForSyncEvent(state, timeout) {
29
+ await new Promise((resolve) => {
30
+ const timer = setTimeout(() => {
31
+ state.syncWaiters.delete(onEvent);
32
+ resolve();
33
+ }, timeout);
34
+ const onEvent = () => {
35
+ clearTimeout(timer);
36
+ resolve();
37
+ };
38
+ state.syncWaiters.add(onEvent);
39
+ });
40
+ }
41
+ function createEvent(params) {
42
+ return {
43
+ content: params.content,
44
+ event_id: eventId(params.state),
45
+ origin_server_ts: Date.now(),
46
+ room_id: params.roomId,
47
+ sender: params.sender,
48
+ ...(params.stateKey !== undefined ? { state_key: params.stateKey } : {}),
49
+ type: params.type,
50
+ ...(params.transactionId ? { unsigned: { transaction_id: params.transactionId } } : {}),
51
+ };
52
+ }
53
+ function createRoom(params) {
54
+ const room = {
55
+ createdSequence: params.createdSequence,
56
+ id: params.id,
57
+ name: params.name,
58
+ state: [],
59
+ timeline: [],
60
+ users: new Map([[params.botUserId, { display_name: "OpenClaw QA" }]]),
61
+ };
62
+ room.state.push(createEvent({
63
+ content: { creator: params.botUserId, room_version: "10" },
64
+ roomId: room.id,
65
+ sender: params.botUserId,
66
+ state: params.state,
67
+ stateKey: "",
68
+ type: "m.room.create",
69
+ }), createEvent({
70
+ content: {
71
+ membership: "join",
72
+ displayname: "OpenClaw QA",
73
+ ...(params.direct ? { is_direct: true } : {}),
74
+ },
75
+ roomId: room.id,
76
+ sender: params.botUserId,
77
+ state: params.state,
78
+ stateKey: params.botUserId,
79
+ type: "m.room.member",
80
+ }), createEvent({
81
+ content: { name: room.name },
82
+ roomId: room.id,
83
+ sender: params.botUserId,
84
+ state: params.state,
85
+ stateKey: "",
86
+ type: "m.room.name",
87
+ }));
88
+ return room;
89
+ }
90
+ function syncRoom(room, since) {
91
+ const events = room.timeline
92
+ .filter((entry) => since === undefined || entry.sequence > since)
93
+ .map((entry) => entry.event);
94
+ return {
95
+ account_data: { events: [] },
96
+ ephemeral: { events: [] },
97
+ state: { events: since === undefined || room.createdSequence > since ? room.state : [] },
98
+ timeline: { events, limited: false, prev_batch: `s${since ?? 0}` },
99
+ unread_notifications: { highlight_count: 0, notification_count: 0 },
100
+ };
101
+ }
102
+ function parseSyncToken(value) {
103
+ if (!value) {
104
+ return undefined;
105
+ }
106
+ const match = /^s(\d+)$/u.exec(value);
107
+ return match ? Number(match[1]) : undefined;
108
+ }
109
+ async function handleSync(url, state) {
110
+ const since = parseSyncToken(url.searchParams.get("since"));
111
+ const timeout = Math.min(readInteger(url.searchParams.get("timeout")) ?? 0, 1_000);
112
+ const hasNewEvents = [...state.rooms.values()].some((room) => room.timeline.some((entry) => since === undefined || entry.sequence > since));
113
+ if (since !== undefined && !hasNewEvents && timeout > 0) {
114
+ await waitForSyncEvent(state, timeout);
115
+ }
116
+ const join = Object.fromEntries([...state.rooms.values()].map((room) => [room.id, syncRoom(room, since)]));
117
+ return jsonResponse({
118
+ account_data: { events: [] },
119
+ device_lists: { changed: [], left: [] },
120
+ device_one_time_keys_count: {},
121
+ next_batch: `s${state.nextSequence - 1}`,
122
+ presence: { events: [] },
123
+ rooms: { invite: {}, join, knock: {}, leave: {} },
124
+ to_device: { events: [] },
125
+ });
126
+ }
127
+ function findRoom(state, encodedRoomId) {
128
+ return state.rooms.get(decodeURIComponent(encodedRoomId));
129
+ }
130
+ async function handleAdminInbound(params) {
131
+ const roomId = readTrimmedString(params.body.roomId);
132
+ const sender = readTrimmedString(params.body.sender ?? params.body.senderId);
133
+ const text = readTrimmedString(params.body.text);
134
+ if (!roomId || !sender || !text) {
135
+ return jsonResponse({ error: "roomId, senderId, and text are required", ok: false }, 400);
136
+ }
137
+ const direct = params.body.direct === true;
138
+ const room = params.state.rooms.get(roomId) ??
139
+ createRoom({
140
+ botUserId: params.state.botUserId,
141
+ createdSequence: params.state.nextSequence++,
142
+ direct,
143
+ id: roomId,
144
+ name: readTrimmedString(params.body.roomName) ?? roomId,
145
+ serverName: params.state.serverName,
146
+ state: params.state,
147
+ });
148
+ params.state.rooms.set(roomId, room);
149
+ const senderName = readTrimmedString(params.body.senderName);
150
+ if (!room.users.has(sender)) {
151
+ room.users.set(sender, senderName ? { display_name: senderName } : {});
152
+ const membership = createEvent({
153
+ content: {
154
+ membership: "join",
155
+ ...(senderName ? { displayname: senderName } : {}),
156
+ },
157
+ roomId,
158
+ sender,
159
+ state: params.state,
160
+ stateKey: sender,
161
+ type: "m.room.member",
162
+ });
163
+ room.state.push(membership);
164
+ room.timeline.push({ event: membership, sequence: params.state.nextSequence++ });
165
+ }
166
+ else if (senderName) {
167
+ room.users.set(sender, { display_name: senderName });
168
+ }
169
+ const content = { body: text, msgtype: "m.text" };
170
+ const threadId = readTrimmedString(params.body.threadId);
171
+ if (threadId) {
172
+ content["m.relates_to"] = {
173
+ event_id: threadId,
174
+ is_falling_back: true,
175
+ rel_type: "m.thread",
176
+ "m.in_reply_to": { event_id: threadId },
177
+ };
178
+ }
179
+ const event = createEvent({
180
+ content,
181
+ roomId,
182
+ sender,
183
+ state: params.state,
184
+ type: "m.room.message",
185
+ });
186
+ room.timeline.push({ event, sequence: params.state.nextSequence++ });
187
+ notifySyncWaiters(params.state);
188
+ return jsonResponse({ event, ok: true });
189
+ }
190
+ async function handleMatrixApi(params) {
191
+ const relativePath = params.path.replace(/^\/_matrix\/client\/(?:v3|r0)/u, "");
192
+ if (params.method === "GET" && relativePath === "/account/whoami") {
193
+ return jsonResponse({
194
+ device_id: params.state.deviceId,
195
+ is_guest: false,
196
+ user_id: params.state.botUserId,
197
+ });
198
+ }
199
+ if (params.method === "GET" && relativePath === "/joined_rooms") {
200
+ return jsonResponse({ joined_rooms: [...params.state.rooms.keys()] });
201
+ }
202
+ if (params.method === "GET" && relativePath === "/capabilities") {
203
+ return jsonResponse({ capabilities: {} });
204
+ }
205
+ let match = /^\/profile\/([^/]+)$/u.exec(relativePath);
206
+ if (params.method === "GET" && match) {
207
+ const userId = decodeURIComponent(match[1]);
208
+ const member = [...params.state.rooms.values()]
209
+ .map((room) => room.users.get(userId))
210
+ .find((profile) => profile !== undefined);
211
+ return member
212
+ ? jsonResponse({
213
+ ...(member.avatar_url ? { avatar_url: member.avatar_url } : {}),
214
+ ...(member.display_name ? { displayname: member.display_name } : {}),
215
+ })
216
+ : matrixError("M_NOT_FOUND", "Unknown user", 404);
217
+ }
218
+ if (params.method === "GET" && relativePath === "/pushrules/") {
219
+ const empty = { content: [], override: [], room: [], sender: [], underride: [] };
220
+ return jsonResponse({ global: empty });
221
+ }
222
+ if (params.method === "GET" && relativePath === "/sync") {
223
+ return await handleSync(params.url, params.state);
224
+ }
225
+ match = /^\/user\/([^/]+)\/filter$/u.exec(relativePath);
226
+ if (params.method === "POST" && match) {
227
+ const userId = decodeURIComponent(match[1]);
228
+ if (userId !== params.state.botUserId) {
229
+ return matrixError("M_FORBIDDEN", "Cannot create a filter for another user", 403);
230
+ }
231
+ const filterId = String(params.state.nextFilter++);
232
+ params.state.filters.set(filterId, params.body);
233
+ return jsonResponse({ filter_id: filterId });
234
+ }
235
+ match = /^\/user\/([^/]+)\/filter\/([^/]+)$/u.exec(relativePath);
236
+ if (params.method === "GET" && match) {
237
+ const filter = params.state.filters.get(decodeURIComponent(match[2]));
238
+ return filter ? jsonResponse(filter) : matrixError("M_NOT_FOUND", "Unknown filter", 404);
239
+ }
240
+ match = /^\/rooms\/([^/]+)\/joined_members$/u.exec(relativePath);
241
+ if (params.method === "GET" && match) {
242
+ const room = findRoom(params.state, match[1]);
243
+ return room
244
+ ? jsonResponse({ joined: Object.fromEntries(room.users) })
245
+ : matrixError("M_NOT_FOUND", "Unknown room", 404);
246
+ }
247
+ match = /^\/rooms\/([^/]+)\/state\/([^/]+)(?:\/(.*))?$/u.exec(relativePath);
248
+ if (params.method === "GET" && match) {
249
+ const room = findRoom(params.state, match[1]);
250
+ if (!room) {
251
+ return matrixError("M_NOT_FOUND", "Unknown room", 404);
252
+ }
253
+ const eventType = decodeURIComponent(match[2]);
254
+ const stateKey = decodeURIComponent(match[3] ?? "");
255
+ if (eventType === "m.room.name" && stateKey === "") {
256
+ return jsonResponse({ name: room.name });
257
+ }
258
+ if (eventType === "m.room.canonical_alias" && stateKey === "") {
259
+ return matrixError("M_NOT_FOUND", "Unknown state event", 404);
260
+ }
261
+ if (eventType === "m.room.member") {
262
+ const membership = [...room.state]
263
+ .reverse()
264
+ .find((event) => event.type === "m.room.member" && event.state_key === stateKey);
265
+ return membership
266
+ ? jsonResponse(membership.content)
267
+ : matrixError("M_NOT_FOUND", "Unknown room member", 404);
268
+ }
269
+ return matrixError("M_NOT_FOUND", "Unknown state event", 404);
270
+ }
271
+ match = /^\/rooms\/([^/]+)\/send\/([^/]+)\/([^/]+)$/u.exec(relativePath);
272
+ if (params.method === "PUT" && match) {
273
+ const room = findRoom(params.state, match[1]);
274
+ if (!room) {
275
+ return matrixError("M_NOT_FOUND", "Unknown room", 404);
276
+ }
277
+ const event = createEvent({
278
+ content: params.body,
279
+ roomId: room.id,
280
+ sender: params.state.botUserId,
281
+ state: params.state,
282
+ transactionId: decodeURIComponent(match[3]),
283
+ type: decodeURIComponent(match[2]),
284
+ });
285
+ room.timeline.push({ event, sequence: params.state.nextSequence++ });
286
+ notifySyncWaiters(params.state);
287
+ return jsonResponse({ event_id: event.event_id });
288
+ }
289
+ match = /^\/rooms\/([^/]+)\/typing\/([^/]+)$/u.exec(relativePath);
290
+ if (params.method === "PUT" && match) {
291
+ return jsonResponse({});
292
+ }
293
+ match = /^\/rooms\/([^/]+)\/receipt\/m\.read\/([^/]+)$/u.exec(relativePath);
294
+ if (params.method === "POST" && match) {
295
+ return jsonResponse({});
296
+ }
297
+ return matrixError("M_UNRECOGNIZED", "Unrecognized request", 404);
298
+ }
299
+ export async function startMatrixServer(params = {}) {
300
+ const host = params.host ?? "127.0.0.1";
301
+ const serverName = params.serverName ?? "matrix.test";
302
+ const state = {
303
+ accessToken: params.accessToken ?? `syt_crabline_${randomBytes(12).toString("hex")}`,
304
+ adminToken: params.adminToken ?? randomBytes(24).toString("hex"),
305
+ botUserId: params.botUserId ?? `@openclaw:${serverName}`,
306
+ deviceId: params.deviceId ?? "CRABLINE",
307
+ filters: new Map(),
308
+ nextEvent: 1,
309
+ nextFilter: 1,
310
+ nextSequence: 1,
311
+ recorderPath: params.recorderPath ?? path.resolve("artifacts/crabline/matrix.jsonl"),
312
+ rooms: new Map(),
313
+ serverName,
314
+ syncWaiters: new Set(),
315
+ };
316
+ const roomId = params.roomId ?? matrixId("!", "default-room", serverName);
317
+ state.rooms.set(roomId, createRoom({
318
+ botUserId: state.botUserId,
319
+ createdSequence: 0,
320
+ id: roomId,
321
+ name: params.roomName ?? "Crabline Matrix Room",
322
+ serverName,
323
+ state,
324
+ }));
325
+ const server = await startHttpJsonServer({
326
+ host,
327
+ port: params.port ?? 0,
328
+ serverName: "Matrix",
329
+ async handle(request) {
330
+ const url = new URL(request.url ?? "/", "http://localhost");
331
+ const method = request.method ?? "GET";
332
+ const body = ["POST", "PUT"].includes(method) ? await parseRequestBody(request) : {};
333
+ const type = url.pathname === "/crabline/matrix/inbound" ? "admin" : "api";
334
+ await appendEvent(state, {
335
+ at: new Date().toISOString(),
336
+ ...(Object.keys(body).length > 0 ? { body } : {}),
337
+ method,
338
+ path: url.pathname,
339
+ query: queryRecord(url),
340
+ type,
341
+ });
342
+ if (type === "admin") {
343
+ if (method !== "POST") {
344
+ return jsonResponse({ error: "Method not allowed", ok: false }, 405);
345
+ }
346
+ return hasAdminToken(request, state.adminToken)
347
+ ? await handleAdminInbound({ body, state })
348
+ : adminAuthError();
349
+ }
350
+ if (url.pathname === "/_matrix/client/versions" && method === "GET") {
351
+ return jsonResponse({ unstable_features: {}, versions: ["v1.11"] });
352
+ }
353
+ if (!url.pathname.startsWith("/_matrix/client/")) {
354
+ return matrixError("M_UNRECOGNIZED", "Unrecognized request", 404);
355
+ }
356
+ if (!authorized(request, state.accessToken)) {
357
+ return matrixError("M_UNKNOWN_TOKEN", "Invalid access token", 401);
358
+ }
359
+ return await handleMatrixApi({ body, method, path: url.pathname, state, url });
360
+ },
361
+ });
362
+ const clientApiRoot = `${server.baseUrl}/_matrix/client/v3`;
363
+ return {
364
+ close: server.close,
365
+ manifest: {
366
+ accessToken: state.accessToken,
367
+ adminToken: state.adminToken,
368
+ baseUrl: server.baseUrl,
369
+ botUserId: state.botUserId,
370
+ deviceId: state.deviceId,
371
+ endpoints: {
372
+ adminInboundUrl: `${server.baseUrl}/crabline/matrix/inbound`,
373
+ clientApiRoot,
374
+ syncUrl: `${clientApiRoot}/sync`,
375
+ },
376
+ env: {
377
+ MATRIX_ACCESS_TOKEN: state.accessToken,
378
+ MATRIX_BASE_URL: server.baseUrl,
379
+ MATRIX_USER_ID: state.botUserId,
380
+ },
381
+ provider: "matrix",
382
+ recorderPath: state.recorderPath,
383
+ version: 1,
384
+ },
385
+ };
386
+ }
387
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../../src/servers/matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type MattermostServerManifest = {
2
+ adminToken: string;
3
+ baseUrl: string;
4
+ botToken: string;
5
+ botUserId: string;
6
+ endpoints: {
7
+ adminInboundUrl: string;
8
+ apiRoot: string;
9
+ websocketUrl: string;
10
+ };
11
+ env: {
12
+ MATTERMOST_BOT_TOKEN: string;
13
+ MATTERMOST_URL: string;
14
+ };
15
+ provider: "mattermost";
16
+ recorderPath: string;
17
+ version: 1;
18
+ };
19
+ export type StartedMattermostServer = {
20
+ close(): Promise<void>;
21
+ manifest: MattermostServerManifest;
22
+ };
23
+ export type StartMattermostServerParams = {
24
+ adminToken?: string | undefined;
25
+ botToken?: string | undefined;
26
+ botUserId?: string | undefined;
27
+ botUsername?: string | undefined;
28
+ host?: string | undefined;
29
+ port?: number | undefined;
30
+ recorderPath?: string | undefined;
31
+ };
32
+ export declare function mattermostId(value: string): string;
33
+ export declare function startMattermostServer(params?: StartMattermostServerParams): Promise<StartedMattermostServer>;