@openclaw/crabline 0.1.9 → 0.1.11

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 (189) hide show
  1. package/README.md +47 -22
  2. package/assets/crabline-banner.svg +20 -0
  3. package/dist/src/bin/crabline.js.map +1 -1
  4. package/dist/src/cli/program.d.ts +25 -1
  5. package/dist/src/cli/program.js +579 -82
  6. package/dist/src/cli/program.js.map +1 -1
  7. package/dist/src/config/load.js +59 -6
  8. package/dist/src/config/load.js.map +1 -1
  9. package/dist/src/config/schema.d.ts +116 -92
  10. package/dist/src/config/schema.js +179 -73
  11. package/dist/src/config/schema.js.map +1 -1
  12. package/dist/src/core/errors.js +9 -2
  13. package/dist/src/core/errors.js.map +1 -1
  14. package/dist/src/core/exit-codes.js.map +1 -1
  15. package/dist/src/core/matcher.js +7 -6
  16. package/dist/src/core/matcher.js.map +1 -1
  17. package/dist/src/core/message-template.js.map +1 -1
  18. package/dist/src/core/nonces.d.ts +1 -0
  19. package/dist/src/core/nonces.js +4 -2
  20. package/dist/src/core/nonces.js.map +1 -1
  21. package/dist/src/core/reporters.d.ts +1 -0
  22. package/dist/src/core/reporters.js +42 -4
  23. package/dist/src/core/reporters.js.map +1 -1
  24. package/dist/src/core/run.d.ts +3 -0
  25. package/dist/src/core/run.js +415 -107
  26. package/dist/src/core/run.js.map +1 -1
  27. package/dist/src/core/safe-regex.d.ts +3 -0
  28. package/dist/src/core/safe-regex.js +21 -0
  29. package/dist/src/core/safe-regex.js.map +1 -0
  30. package/dist/src/index.d.ts +2 -2
  31. package/dist/src/index.js +1 -1
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/openclaw/artifact-generation.d.ts +43 -0
  34. package/dist/src/openclaw/artifact-generation.js +363 -0
  35. package/dist/src/openclaw/artifact-generation.js.map +1 -0
  36. package/dist/src/openclaw/bridges/matrix.js +97 -12
  37. package/dist/src/openclaw/bridges/matrix.js.map +1 -1
  38. package/dist/src/openclaw/bridges/mattermost.js +32 -10
  39. package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
  40. package/dist/src/openclaw/bridges/signal.js +55 -18
  41. package/dist/src/openclaw/bridges/signal.js.map +1 -1
  42. package/dist/src/openclaw/bridges/slack.js +85 -7
  43. package/dist/src/openclaw/bridges/slack.js.map +1 -1
  44. package/dist/src/openclaw/bridges/telegram.js +124 -30
  45. package/dist/src/openclaw/bridges/telegram.js.map +1 -1
  46. package/dist/src/openclaw/bridges/whatsapp.js +78 -17
  47. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
  48. package/dist/src/openclaw/bridges/zalo.js +14 -5
  49. package/dist/src/openclaw/bridges/zalo.js.map +1 -1
  50. package/dist/src/openclaw/outbound-contract.d.ts +5 -0
  51. package/dist/src/openclaw/outbound-contract.js +40 -0
  52. package/dist/src/openclaw/outbound-contract.js.map +1 -0
  53. package/dist/src/openclaw/private-file.d.ts +28 -0
  54. package/dist/src/openclaw/private-file.js +465 -0
  55. package/dist/src/openclaw/private-file.js.map +1 -0
  56. package/dist/src/openclaw/shared.d.ts +21 -2
  57. package/dist/src/openclaw/shared.js +115 -18
  58. package/dist/src/openclaw/shared.js.map +1 -1
  59. package/dist/src/openclaw/smoke-lock.d.ts +63 -0
  60. package/dist/src/openclaw/smoke-lock.js +1004 -0
  61. package/dist/src/openclaw/smoke-lock.js.map +1 -0
  62. package/dist/src/openclaw.d.ts +16 -8
  63. package/dist/src/openclaw.js +334 -52
  64. package/dist/src/openclaw.js.map +1 -1
  65. package/dist/src/providers/builtin/discord.d.ts +10 -1
  66. package/dist/src/providers/builtin/discord.js +144 -18
  67. package/dist/src/providers/builtin/discord.js.map +1 -1
  68. package/dist/src/providers/builtin/external-webhook-auth.d.ts +11 -0
  69. package/dist/src/providers/builtin/external-webhook-auth.js +10 -0
  70. package/dist/src/providers/builtin/external-webhook-auth.js.map +1 -0
  71. package/dist/src/providers/builtin/feishu.d.ts +19 -2
  72. package/dist/src/providers/builtin/feishu.js +307 -25
  73. package/dist/src/providers/builtin/feishu.js.map +1 -1
  74. package/dist/src/providers/builtin/googlechat.d.ts +20 -1
  75. package/dist/src/providers/builtin/googlechat.js +178 -19
  76. package/dist/src/providers/builtin/googlechat.js.map +1 -1
  77. package/dist/src/providers/builtin/imessage.d.ts +4 -0
  78. package/dist/src/providers/builtin/imessage.js +26 -11
  79. package/dist/src/providers/builtin/imessage.js.map +1 -1
  80. package/dist/src/providers/builtin/loopback.js +92 -30
  81. package/dist/src/providers/builtin/loopback.js.map +1 -1
  82. package/dist/src/providers/builtin/matrix.d.ts +11 -1
  83. package/dist/src/providers/builtin/matrix.js +53 -29
  84. package/dist/src/providers/builtin/matrix.js.map +1 -1
  85. package/dist/src/providers/builtin/mattermost.d.ts +10 -0
  86. package/dist/src/providers/builtin/mattermost.js +38 -15
  87. package/dist/src/providers/builtin/mattermost.js.map +1 -1
  88. package/dist/src/providers/builtin/msteams.d.ts +17 -1
  89. package/dist/src/providers/builtin/msteams.js +113 -14
  90. package/dist/src/providers/builtin/msteams.js.map +1 -1
  91. package/dist/src/providers/builtin/native-local-mock.d.ts +2 -9
  92. package/dist/src/providers/builtin/native-local-mock.js +12 -35
  93. package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
  94. package/dist/src/providers/builtin/script.d.ts +11 -15
  95. package/dist/src/providers/builtin/script.js +566 -104
  96. package/dist/src/providers/builtin/script.js.map +1 -1
  97. package/dist/src/providers/builtin/slack.d.ts +6 -0
  98. package/dist/src/providers/builtin/slack.js +99 -40
  99. package/dist/src/providers/builtin/slack.js.map +1 -1
  100. package/dist/src/providers/builtin/telegram.d.ts +6 -0
  101. package/dist/src/providers/builtin/telegram.js +64 -43
  102. package/dist/src/providers/builtin/telegram.js.map +1 -1
  103. package/dist/src/providers/builtin/whatsapp.d.ts +28 -8
  104. package/dist/src/providers/builtin/whatsapp.js +567 -30
  105. package/dist/src/providers/builtin/whatsapp.js.map +1 -1
  106. package/dist/src/providers/builtin/zalo.js +30 -19
  107. package/dist/src/providers/builtin/zalo.js.map +1 -1
  108. package/dist/src/providers/catalog.d.ts +3 -3
  109. package/dist/src/providers/catalog.js +3 -3
  110. package/dist/src/providers/catalog.js.map +1 -1
  111. package/dist/src/providers/local-mock.d.ts +11 -2
  112. package/dist/src/providers/local-mock.js +322 -96
  113. package/dist/src/providers/local-mock.js.map +1 -1
  114. package/dist/src/providers/native-ids.d.ts +1 -0
  115. package/dist/src/providers/native-ids.js +6 -1
  116. package/dist/src/providers/native-ids.js.map +1 -1
  117. package/dist/src/providers/recorder.d.ts +30 -2
  118. package/dist/src/providers/recorder.js +549 -70
  119. package/dist/src/providers/recorder.js.map +1 -1
  120. package/dist/src/providers/registry.d.ts +25 -1
  121. package/dist/src/providers/registry.js +280 -40
  122. package/dist/src/providers/registry.js.map +1 -1
  123. package/dist/src/providers/signed-jwt.d.ts +29 -0
  124. package/dist/src/providers/signed-jwt.js +202 -0
  125. package/dist/src/providers/signed-jwt.js.map +1 -0
  126. package/dist/src/providers/slack-ids.js.map +1 -1
  127. package/dist/src/providers/target-normalizers.d.ts +26 -0
  128. package/dist/src/providers/target-normalizers.js +276 -0
  129. package/dist/src/providers/target-normalizers.js.map +1 -0
  130. package/dist/src/providers/types.d.ts +5 -0
  131. package/dist/src/providers/types.js.map +1 -1
  132. package/dist/src/providers/webhook-server.d.ts +2 -0
  133. package/dist/src/providers/webhook-server.js +72 -25
  134. package/dist/src/providers/webhook-server.js.map +1 -1
  135. package/dist/src/servers/http.d.ts +23 -3
  136. package/dist/src/servers/http.js +213 -20
  137. package/dist/src/servers/http.js.map +1 -1
  138. package/dist/src/servers/index.js +20 -21
  139. package/dist/src/servers/index.js.map +1 -1
  140. package/dist/src/servers/matrix.js +465 -51
  141. package/dist/src/servers/matrix.js.map +1 -1
  142. package/dist/src/servers/mattermost.d.ts +5 -0
  143. package/dist/src/servers/mattermost.js +306 -58
  144. package/dist/src/servers/mattermost.js.map +1 -1
  145. package/dist/src/servers/pending-events.d.ts +2 -0
  146. package/dist/src/servers/pending-events.js +11 -0
  147. package/dist/src/servers/pending-events.js.map +1 -0
  148. package/dist/src/servers/recorder.d.ts +5 -0
  149. package/dist/src/servers/recorder.js +262 -3
  150. package/dist/src/servers/recorder.js.map +1 -1
  151. package/dist/src/servers/signal.d.ts +2 -0
  152. package/dist/src/servers/signal.js +444 -56
  153. package/dist/src/servers/signal.js.map +1 -1
  154. package/dist/src/servers/slack.d.ts +5 -0
  155. package/dist/src/servers/slack.js +515 -49
  156. package/dist/src/servers/slack.js.map +1 -1
  157. package/dist/src/servers/telegram.d.ts +111 -0
  158. package/dist/src/servers/telegram.js +830 -158
  159. package/dist/src/servers/telegram.js.map +1 -1
  160. package/dist/src/servers/webhook-target.d.ts +40 -0
  161. package/dist/src/servers/webhook-target.js +349 -0
  162. package/dist/src/servers/webhook-target.js.map +1 -0
  163. package/dist/src/servers/websocket.d.ts +2 -0
  164. package/dist/src/servers/websocket.js +29 -0
  165. package/dist/src/servers/websocket.js.map +1 -0
  166. package/dist/src/servers/whatsapp-baileys-websocket.d.ts +65 -1
  167. package/dist/src/servers/whatsapp-baileys-websocket.js +723 -99
  168. package/dist/src/servers/whatsapp-baileys-websocket.js.map +1 -1
  169. package/dist/src/servers/whatsapp-jid.d.ts +5 -0
  170. package/dist/src/servers/whatsapp-jid.js +32 -0
  171. package/dist/src/servers/whatsapp-jid.js.map +1 -0
  172. package/dist/src/servers/whatsapp-wire/binary-node.d.ts +5 -0
  173. package/dist/src/servers/whatsapp-wire/binary-node.js +87 -20
  174. package/dist/src/servers/whatsapp-wire/binary-node.js.map +1 -1
  175. package/dist/src/servers/whatsapp-wire/crypto.d.ts +6 -1
  176. package/dist/src/servers/whatsapp-wire/crypto.js +99 -45
  177. package/dist/src/servers/whatsapp-wire/crypto.js.map +1 -1
  178. package/dist/src/servers/whatsapp-wire/handshake.js +39 -4
  179. package/dist/src/servers/whatsapp-wire/handshake.js.map +1 -1
  180. package/dist/src/servers/whatsapp-wire/signal.js.map +1 -1
  181. package/dist/src/servers/whatsapp.d.ts +12 -7
  182. package/dist/src/servers/whatsapp.js +269 -107
  183. package/dist/src/servers/whatsapp.js.map +1 -1
  184. package/dist/src/servers/zalo.d.ts +14 -0
  185. package/dist/src/servers/zalo.js +521 -88
  186. package/dist/src/servers/zalo.js.map +1 -1
  187. package/docs/channel-setup.md +197 -19
  188. package/fixtures/examples/crabline.example.yaml +10 -0
  189. package/package.json +20 -15
@@ -1 +1 @@
1
- {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../../src/servers/matrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../../src/servers/matrix.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport { isIP } from \"node:net\";\nimport path from \"node:path\";\nimport {\n adminAuthError,\n hasAdminToken,\n InvalidJsonBodyError,\n isJsonObject,\n jsonResponse,\n parseUnknownRequestBody,\n queryRecord,\n readInteger,\n readTrimmedString,\n RequestBodyTooLargeError,\n startHttpJsonServer,\n type ServerRequestEvent,\n} from \"./http.js\";\nimport {\n recordCommittedServerEvent,\n recordServerEvent,\n type ServerEventObserver,\n} from \"./recorder.js\";\n\ntype MatrixEvent = {\n content: Record<string, unknown>;\n event_id: string;\n origin_server_ts: number;\n room_id: string;\n sender: string;\n state_key?: string;\n type: string;\n unsigned?: { transaction_id: string };\n};\n\ntype MatrixRoom = {\n createdSequence: number;\n ephemeral: Array<{\n event: { content: Record<string, unknown>; type: \"m.receipt\" | \"m.typing\" };\n sequence: number;\n }>;\n id: string;\n lastDroppedTimelineSequence: number | undefined;\n name: string;\n state: MatrixEvent[];\n stateBeforeTimeline: Map<string, MatrixEvent>;\n timeline: Array<{ sequence: number; event: MatrixEvent }>;\n typingTimeouts: Map<string, NodeJS.Timeout>;\n typingUsers: Set<string>;\n users: Map<string, { avatar_url?: string; display_name?: string }>;\n};\n\ntype MatrixTransactionResponse = {\n body: Record<string, unknown>;\n expiresAt: number;\n status: number;\n};\n\ntype MatrixServerState = {\n accessToken: string;\n adminToken: string;\n botUserId: string;\n deviceId: string;\n filterBytes: number;\n filters: Map<string, { body: Record<string, unknown>; bytes: number }>;\n nextEvent: number;\n nextFilter: number;\n nextSequence: number;\n onEvent: ServerEventObserver | undefined;\n recorderPath: string;\n rooms: Map<string, MatrixRoom>;\n serverName: string;\n syncWaiters: Set<() => void>;\n transactions: Map<string, MatrixTransactionResponse>;\n};\n\ntype MatrixRecorderEvent = ServerRequestEvent & {\n accepted?: boolean | undefined;\n};\n\nconst MAX_MATRIX_FILTER_BYTES = 1024 * 1024;\nconst MAX_MATRIX_FILTERS = 100;\nconst MAX_MATRIX_IDENTIFIER_BYTES = 255;\nconst MAX_MATRIX_TIMELINE_EVENTS = 1_000;\nconst MAX_MATRIX_TRANSACTION_RESPONSES = 1_000;\nconst MATRIX_TRANSACTION_RETENTION_MS = 10 * 60_000;\nconst MAX_NODE_TIMER_DELAY_MS = 2_147_483_647;\n\nclass InvalidMatrixPathEncodingError extends Error {\n constructor() {\n super(\"Matrix request path contains invalid percent encoding.\");\n this.name = \"InvalidMatrixPathEncodingError\";\n }\n}\n\nexport type MatrixServerManifest = {\n accessToken: string;\n adminToken: string;\n baseUrl: string;\n botUserId: string;\n deviceId: string;\n endpoints: {\n adminInboundUrl: string;\n clientApiRoot: string;\n syncUrl: string;\n };\n env: {\n MATRIX_ACCESS_TOKEN: string;\n MATRIX_BASE_URL: string;\n MATRIX_USER_ID: string;\n };\n provider: \"matrix\";\n recorderPath: string;\n version: 1;\n};\n\nexport type StartedMatrixServer = {\n close(): Promise<void>;\n manifest: MatrixServerManifest;\n};\n\nexport type StartMatrixServerParams = {\n accessToken?: string | undefined;\n adminToken?: string | undefined;\n botUserId?: string | undefined;\n deviceId?: string | undefined;\n host?: string | undefined;\n onEvent?: ServerEventObserver | undefined;\n port?: number | undefined;\n recorderPath?: string | undefined;\n roomId?: string | undefined;\n roomName?: string | undefined;\n serverName?: string | undefined;\n};\n\nfunction matrixId(prefix: \"$\" | \"!\", value: string, serverName: string): string {\n return `${prefix}${createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 16)}:${serverName}`;\n}\n\nfunction isMatrixIpv4Address(value: string): boolean {\n const octets = value.split(\".\");\n return (\n octets.length === 4 && octets.every((octet) => /^\\d{1,3}$/u.test(octet) && Number(octet) <= 255)\n );\n}\n\nfunction isMatrixServerName(value: string): boolean {\n const ipv6 = /^\\[([^\\]]+)\\](?::(\\d{1,5}))?$/u.exec(value);\n if (ipv6) {\n return isIP(ipv6[1]!) === 6;\n }\n const hostAndPort = /^([^:]+?)(?::(\\d{1,5}))?$/u.exec(value);\n if (!hostAndPort) {\n return false;\n }\n const hostname = hostAndPort[1]!;\n if (isMatrixIpv4Address(hostname)) {\n return true;\n }\n if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/u.test(hostname)) {\n return false;\n }\n return hostname.length <= 255 && /^[A-Za-z0-9.-]+$/u.test(hostname);\n}\n\nfunction hasLoneSurrogate(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next < 0xdc00 || next > 0xdfff) {\n return true;\n }\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n return true;\n }\n }\n return false;\n}\n\nfunction isMatrixScopedIdentifier(value: string, sigil: \"!\" | \"$\" | \"@\"): boolean {\n const separator = value.indexOf(\":\");\n const localpart = value.slice(1, separator);\n return (\n value.startsWith(sigil) &&\n Buffer.byteLength(value, \"utf8\") <= MAX_MATRIX_IDENTIFIER_BYTES &&\n separator >= (sigil === \"@\" ? 1 : 2) &&\n !localpart.includes(\"\\0\") &&\n !hasLoneSurrogate(localpart) &&\n isMatrixServerName(value.slice(separator + 1))\n );\n}\n\nfunction isMatrixHashIdentifier(\n value: string,\n sigil: \"!\" | \"$\",\n allowLegacyBase64: boolean,\n): boolean {\n if (!value.startsWith(sigil) || Buffer.byteLength(value, \"utf8\") > MAX_MATRIX_IDENTIFIER_BYTES) {\n return false;\n }\n const opaqueId = value.slice(1);\n const encoding =\n allowLegacyBase64 && /^[A-Za-z0-9+/]{43}$/u.test(opaqueId)\n ? \"base64\"\n : /^[A-Za-z0-9_-]{43}$/u.test(opaqueId)\n ? \"base64url\"\n : undefined;\n if (!encoding) {\n return false;\n }\n const decoded = Buffer.from(opaqueId, encoding);\n return decoded.length === 32 && decoded.toString(encoding).replace(/=+$/u, \"\") === opaqueId;\n}\n\nfunction isMatrixRoomId(value: string): boolean {\n return isMatrixScopedIdentifier(value, \"!\") || isMatrixHashIdentifier(value, \"!\", false);\n}\n\nfunction isMatrixEventId(value: string): boolean {\n return isMatrixScopedIdentifier(value, \"$\") || isMatrixHashIdentifier(value, \"$\", true);\n}\n\nfunction isMatrixUserId(value: string): boolean {\n return isMatrixScopedIdentifier(value, \"@\");\n}\n\nasync function appendEvent(\n state: MatrixServerState,\n event: ServerRequestEvent,\n committed = false,\n): Promise<void> {\n const params = { event, onEvent: state.onEvent, recorderPath: state.recorderPath };\n await (committed ? recordCommittedServerEvent(params) : recordServerEvent(params));\n}\n\nfunction authorized(request: IncomingMessage, token: string): boolean {\n const match = /^Bearer\\s+(\\S+)$/iu.exec(request.headers.authorization ?? \"\");\n return match?.[1] === token;\n}\n\nfunction matrixError(errcode: string, error: string, status: number): Response {\n return jsonResponse({ errcode, error }, status);\n}\n\nfunction matrixResourceLimitError(error: string): Response {\n return jsonResponse(\n {\n admin_contact: \"mailto:admin@localhost\",\n errcode: \"M_RESOURCE_LIMIT_EXCEEDED\",\n error,\n },\n 503,\n );\n}\n\nfunction decodeMatrixPathSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n throw new InvalidMatrixPathEncodingError();\n }\n}\n\nfunction eventId(state: MatrixServerState): string {\n return matrixId(\"$\", `event-${state.nextEvent++}`, state.serverName);\n}\n\nfunction notifySyncWaiters(state: MatrixServerState): void {\n for (const resolve of state.syncWaiters) {\n resolve();\n }\n state.syncWaiters.clear();\n}\n\nasync function waitForSyncEvent(state: MatrixServerState, timeout: number): Promise<void> {\n await new Promise<void>((resolve) => {\n const timer = setTimeout(() => {\n state.syncWaiters.delete(onEvent);\n resolve();\n }, timeout);\n const onEvent = () => {\n clearTimeout(timer);\n resolve();\n };\n state.syncWaiters.add(onEvent);\n });\n}\n\nfunction createEvent(params: {\n content: Record<string, unknown>;\n roomId: string;\n sender: string;\n state: MatrixServerState;\n stateKey?: string;\n transactionId?: string;\n type: string;\n}): MatrixEvent {\n return {\n content: params.content,\n event_id: eventId(params.state),\n origin_server_ts: Date.now(),\n room_id: params.roomId,\n sender: params.sender,\n ...(params.stateKey !== undefined ? { state_key: params.stateKey } : {}),\n type: params.type,\n ...(params.transactionId ? { unsigned: { transaction_id: params.transactionId } } : {}),\n };\n}\n\nfunction createRoom(params: {\n botUserId: string;\n createdSequence: number;\n direct?: boolean;\n id: string;\n name: string;\n serverName: string;\n state: MatrixServerState;\n}): MatrixRoom {\n const room: MatrixRoom = {\n createdSequence: params.createdSequence,\n ephemeral: [],\n id: params.id,\n lastDroppedTimelineSequence: undefined,\n name: params.name,\n state: [],\n stateBeforeTimeline: new Map(),\n timeline: [],\n typingTimeouts: new Map(),\n typingUsers: new Set(),\n users: new Map([[params.botUserId, { display_name: \"OpenClaw QA\" }]]),\n };\n room.state.push(\n createEvent({\n content: { creator: params.botUserId, room_version: \"10\" },\n roomId: room.id,\n sender: params.botUserId,\n state: params.state,\n stateKey: \"\",\n type: \"m.room.create\",\n }),\n createEvent({\n content: {\n membership: \"join\",\n displayname: \"OpenClaw QA\",\n ...(params.direct ? { is_direct: true } : {}),\n },\n roomId: room.id,\n sender: params.botUserId,\n state: params.state,\n stateKey: params.botUserId,\n type: \"m.room.member\",\n }),\n createEvent({\n content: { name: room.name },\n roomId: room.id,\n sender: params.botUserId,\n state: params.state,\n stateKey: \"\",\n type: \"m.room.name\",\n }),\n );\n for (const event of room.state) {\n room.stateBeforeTimeline.set(matrixStateKey(event), event);\n }\n return room;\n}\n\nfunction matrixStateKey(event: MatrixEvent): string {\n return JSON.stringify([event.type, event.state_key ?? \"\"]);\n}\n\nfunction appendTimelineEvent(\n room: MatrixRoom,\n entry: { event: MatrixEvent; sequence: number },\n): void {\n room.timeline.push(entry);\n if (room.timeline.length > MAX_MATRIX_TIMELINE_EVENTS) {\n const dropped = room.timeline.splice(0, room.timeline.length - MAX_MATRIX_TIMELINE_EVENTS);\n room.lastDroppedTimelineSequence = dropped.at(-1)?.sequence;\n for (const droppedEntry of dropped) {\n if (droppedEntry.event.state_key !== undefined) {\n room.stateBeforeTimeline.set(matrixStateKey(droppedEntry.event), droppedEntry.event);\n }\n }\n }\n}\n\nfunction appendEphemeralEvent(\n room: MatrixRoom,\n entry: {\n event: { content: Record<string, unknown>; type: \"m.receipt\" | \"m.typing\" };\n sequence: number;\n },\n): void {\n room.ephemeral.push(entry);\n if (room.ephemeral.length > MAX_MATRIX_TIMELINE_EVENTS) {\n room.ephemeral.splice(0, room.ephemeral.length - MAX_MATRIX_TIMELINE_EVENTS);\n }\n}\n\nfunction publishTypingState(state: MatrixServerState, room: MatrixRoom): void {\n appendEphemeralEvent(room, {\n event: { content: { user_ids: [...room.typingUsers] }, type: \"m.typing\" },\n sequence: state.nextSequence++,\n });\n notifySyncWaiters(state);\n}\n\nfunction rememberTransaction(\n state: MatrixServerState,\n key: string,\n response: MatrixTransactionResponse,\n): void {\n state.transactions.set(key, response);\n}\n\nfunction forgetExpiredTransactions(state: MatrixServerState): void {\n const now = Date.now();\n for (const [key, response] of state.transactions) {\n if (response.expiresAt > now) {\n break;\n }\n state.transactions.delete(key);\n }\n}\n\nfunction transactionResponse(\n state: MatrixServerState,\n key: string,\n): MatrixTransactionResponse | undefined {\n forgetExpiredTransactions(state);\n const response = state.transactions.get(key);\n if (!response) {\n return undefined;\n }\n state.transactions.delete(key);\n response.expiresAt = Date.now() + MATRIX_TRANSACTION_RETENTION_MS;\n state.transactions.set(key, response);\n return response;\n}\n\nfunction readTimelineLimit(filter: Record<string, unknown> | undefined): number | undefined {\n const room = filter?.room;\n const timeline = isJsonObject(room) ? room.timeline : undefined;\n const limit = isJsonObject(timeline) ? readInteger(timeline.limit) : undefined;\n return limit === undefined ? undefined : Math.max(0, limit);\n}\n\nfunction resolveSyncFilter(\n url: URL,\n state: MatrixServerState,\n): Record<string, unknown> | Response | undefined {\n const value = url.searchParams.get(\"filter\");\n if (value === null) {\n return undefined;\n }\n const stored = state.filters.get(value);\n if (stored) {\n return stored.body;\n }\n try {\n const parsed = JSON.parse(value) as unknown;\n return isJsonObject(parsed) ? parsed : matrixError(\"M_INVALID_PARAM\", \"Invalid filter\", 400);\n } catch {\n return matrixError(\"M_INVALID_PARAM\", \"Unknown filter\", 400);\n }\n}\n\nfunction syncRoom(room: MatrixRoom, since: number | undefined, timelineLimit: number | undefined) {\n const available = room.timeline.filter((entry) => since === undefined || entry.sequence > since);\n const timeline =\n timelineLimit === undefined\n ? available\n : available.slice(Math.max(0, available.length - timelineLimit));\n const firstSequence = timeline[0]?.sequence;\n const historyWasTrimmed =\n room.lastDroppedTimelineSequence !== undefined &&\n (since === undefined || since < room.lastDroppedTimelineSequence);\n const limited = historyWasTrimmed || timeline.length < available.length;\n const omittedTimeline = available.slice(0, available.length - timeline.length);\n const omittedState = new Map<string, MatrixEvent>();\n if (since === undefined || room.createdSequence > since || historyWasTrimmed) {\n for (const [key, event] of room.stateBeforeTimeline) {\n omittedState.set(key, event);\n }\n }\n for (const entry of omittedTimeline) {\n if (entry.event.state_key !== undefined) {\n omittedState.set(matrixStateKey(entry.event), entry.event);\n }\n }\n return {\n account_data: { events: [] },\n ephemeral: {\n events: room.ephemeral\n .filter((entry) => since === undefined || entry.sequence > since)\n .map((entry) => entry.event),\n },\n state: {\n events: [...omittedState.values()].filter(\n (event) => !timeline.some((entry) => entry.event.event_id === event.event_id),\n ),\n },\n timeline: {\n events: timeline.map((entry) => entry.event),\n limited,\n prev_batch: `s${firstSequence === undefined ? (since ?? 0) : firstSequence - 1}`,\n },\n unread_notifications: { highlight_count: 0, notification_count: 0 },\n };\n}\n\nfunction parseSyncToken(value: string | null): number | null | undefined {\n if (value === null) {\n return undefined;\n }\n const match = /^s(\\d+)$/u.exec(value);\n if (!match) {\n return null;\n }\n const sequence = Number(match[1]);\n return Number.isSafeInteger(sequence) ? sequence : null;\n}\n\nasync function handleSync(url: URL, state: MatrixServerState): Promise<Response> {\n const since = parseSyncToken(url.searchParams.get(\"since\"));\n if (since === null || (since !== undefined && since > state.nextSequence - 1)) {\n return matrixError(\"M_UNKNOWN_POS\", \"Unknown position\", 400);\n }\n const filter = resolveSyncFilter(url, state);\n if (filter instanceof Response) {\n return filter;\n }\n const timelineLimit = readTimelineLimit(filter);\n const timeout = Math.min(readInteger(url.searchParams.get(\"timeout\")) ?? 0, 1_000);\n const hasNewEvents = [...state.rooms.values()].some((room) =>\n [...room.timeline, ...room.ephemeral].some(\n (entry) => since === undefined || entry.sequence > since,\n ),\n );\n if (since !== undefined && !hasNewEvents && timeout > 0) {\n await waitForSyncEvent(state, timeout);\n }\n const join = Object.fromEntries(\n [...state.rooms.values()].map((room) => [room.id, syncRoom(room, since, timelineLimit)]),\n );\n return jsonResponse({\n account_data: { events: [] },\n device_lists: { changed: [], left: [] },\n device_one_time_keys_count: {},\n next_batch: `s${state.nextSequence - 1}`,\n presence: { events: [] },\n rooms: { invite: {}, join, knock: {}, leave: {} },\n to_device: { events: [] },\n });\n}\n\nfunction findRoom(state: MatrixServerState, encodedRoomId: string): MatrixRoom | undefined {\n return state.rooms.get(decodeMatrixPathSegment(encodedRoomId));\n}\n\nasync function handleAdminInbound(params: {\n body: Record<string, unknown>;\n state: MatrixServerState;\n}): Promise<Response> {\n const roomId = readTrimmedString(params.body.roomId);\n const sender = readTrimmedString(params.body.sender ?? params.body.senderId);\n const text = readTrimmedString(params.body.text);\n if (!roomId || !sender || !text) {\n return jsonResponse({ error: \"roomId, senderId, and text are required\", ok: false }, 400);\n }\n const threadId = readTrimmedString(params.body.threadId);\n if (\n !isMatrixRoomId(roomId) ||\n !isMatrixUserId(sender) ||\n (threadId !== undefined && !isMatrixEventId(threadId))\n ) {\n return jsonResponse({ error: \"Invalid Matrix identifier\", ok: false }, 400);\n }\n const direct = params.body.direct === true;\n const room =\n params.state.rooms.get(roomId) ??\n createRoom({\n botUserId: params.state.botUserId,\n createdSequence: params.state.nextSequence++,\n direct,\n id: roomId,\n name: readTrimmedString(params.body.roomName) ?? roomId,\n serverName: params.state.serverName,\n state: params.state,\n });\n params.state.rooms.set(roomId, room);\n const senderName = readTrimmedString(params.body.senderName);\n const existingProfile = room.users.get(sender);\n if (existingProfile === undefined) {\n room.users.set(sender, senderName ? { display_name: senderName } : {});\n const membership = createEvent({\n content: {\n membership: \"join\",\n ...(senderName ? { displayname: senderName } : {}),\n },\n roomId,\n sender,\n state: params.state,\n stateKey: sender,\n type: \"m.room.member\",\n });\n room.state.push(membership);\n appendTimelineEvent(room, { event: membership, sequence: params.state.nextSequence++ });\n } else if (senderName && existingProfile.display_name !== senderName) {\n room.users.set(sender, { ...existingProfile, display_name: senderName });\n const membership = createEvent({\n content: { membership: \"join\", displayname: senderName },\n roomId,\n sender,\n state: params.state,\n stateKey: sender,\n type: \"m.room.member\",\n });\n const stateIndex = room.state.findIndex(\n (event) => event.type === \"m.room.member\" && event.state_key === sender,\n );\n if (stateIndex >= 0) {\n room.state[stateIndex] = membership;\n } else {\n room.state.push(membership);\n }\n appendTimelineEvent(room, {\n event: membership,\n sequence: params.state.nextSequence++,\n });\n }\n const content: Record<string, unknown> = { body: text, msgtype: \"m.text\" };\n if (threadId) {\n content[\"m.relates_to\"] = {\n event_id: threadId,\n is_falling_back: true,\n rel_type: \"m.thread\",\n \"m.in_reply_to\": { event_id: threadId },\n };\n }\n const event = createEvent({\n content,\n roomId,\n sender,\n state: params.state,\n type: \"m.room.message\",\n });\n appendTimelineEvent(room, { event, sequence: params.state.nextSequence++ });\n notifySyncWaiters(params.state);\n return jsonResponse({ event, ok: true });\n}\n\nasync function handleMatrixApi(params: {\n body: Record<string, unknown>;\n method: string;\n path: string;\n recorderEvent: MatrixRecorderEvent;\n state: MatrixServerState;\n url: URL;\n}): Promise<Response> {\n const relativePath = params.path.replace(/^\\/_matrix\\/client\\/(?:v3|r0)/u, \"\");\n if (params.method === \"GET\" && relativePath === \"/account/whoami\") {\n return jsonResponse({\n device_id: params.state.deviceId,\n is_guest: false,\n user_id: params.state.botUserId,\n });\n }\n if (params.method === \"GET\" && relativePath === \"/joined_rooms\") {\n return jsonResponse({ joined_rooms: [...params.state.rooms.keys()] });\n }\n if (params.method === \"GET\" && relativePath === \"/capabilities\") {\n return jsonResponse({ capabilities: {} });\n }\n let match = /^\\/profile\\/([^/]+)$/u.exec(relativePath);\n if (params.method === \"GET\" && match) {\n const userId = decodeMatrixPathSegment(match[1]!);\n const member = [...params.state.rooms.values()]\n .map((room) => room.users.get(userId))\n .find((profile) => profile !== undefined);\n return member\n ? jsonResponse({\n ...(member.avatar_url ? { avatar_url: member.avatar_url } : {}),\n ...(member.display_name ? { displayname: member.display_name } : {}),\n })\n : matrixError(\"M_NOT_FOUND\", \"Unknown user\", 404);\n }\n if (params.method === \"GET\" && relativePath === \"/pushrules/\") {\n const empty = { content: [], override: [], room: [], sender: [], underride: [] };\n return jsonResponse({ global: empty });\n }\n if (params.method === \"GET\" && relativePath === \"/sync\") {\n return await handleSync(params.url, params.state);\n }\n\n match = /^\\/user\\/([^/]+)\\/filter$/u.exec(relativePath);\n if (params.method === \"POST\" && match) {\n const userId = decodeMatrixPathSegment(match[1]!);\n if (userId !== params.state.botUserId) {\n return matrixError(\"M_FORBIDDEN\", \"Cannot create a filter for another user\", 403);\n }\n const bytes = Buffer.byteLength(JSON.stringify(params.body), \"utf8\");\n if (\n params.state.filters.size >= MAX_MATRIX_FILTERS ||\n params.state.filterBytes + bytes > MAX_MATRIX_FILTER_BYTES\n ) {\n return matrixResourceLimitError(\"Too many stored filters\");\n }\n const filterId = String(params.state.nextFilter++);\n params.state.filters.set(filterId, { body: params.body, bytes });\n params.state.filterBytes += bytes;\n return jsonResponse({ filter_id: filterId });\n }\n\n match = /^\\/user\\/([^/]+)\\/filter\\/([^/]+)$/u.exec(relativePath);\n if (params.method === \"GET\" && match) {\n const userId = decodeMatrixPathSegment(match[1]!);\n if (userId !== params.state.botUserId) {\n return matrixError(\"M_FORBIDDEN\", \"Cannot get filters for another user\", 403);\n }\n const filter = params.state.filters.get(decodeMatrixPathSegment(match[2]!));\n return filter ? jsonResponse(filter.body) : matrixError(\"M_NOT_FOUND\", \"Unknown filter\", 404);\n }\n\n match = /^\\/rooms\\/([^/]+)\\/joined_members$/u.exec(relativePath);\n if (params.method === \"GET\" && match) {\n const room = findRoom(params.state, match[1]!);\n return room\n ? jsonResponse({ joined: Object.fromEntries(room.users) })\n : matrixError(\"M_NOT_FOUND\", \"Unknown room\", 404);\n }\n\n match = /^\\/rooms\\/([^/]+)\\/state\\/([^/]+)(?:\\/(.*))?$/u.exec(relativePath);\n if (params.method === \"GET\" && match) {\n const room = findRoom(params.state, match[1]!);\n if (!room) {\n return matrixError(\"M_NOT_FOUND\", \"Unknown room\", 404);\n }\n const eventType = decodeMatrixPathSegment(match[2]!);\n const stateKey = decodeMatrixPathSegment(match[3] ?? \"\");\n if (eventType === \"m.room.name\" && stateKey === \"\") {\n return jsonResponse({ name: room.name });\n }\n if (eventType === \"m.room.canonical_alias\" && stateKey === \"\") {\n return matrixError(\"M_NOT_FOUND\", \"Unknown state event\", 404);\n }\n if (eventType === \"m.room.member\") {\n const membership = [...room.state]\n .reverse()\n .find((event) => event.type === \"m.room.member\" && event.state_key === stateKey);\n return membership\n ? jsonResponse(membership.content)\n : matrixError(\"M_NOT_FOUND\", \"Unknown room member\", 404);\n }\n return matrixError(\"M_NOT_FOUND\", \"Unknown state event\", 404);\n }\n\n match = /^\\/rooms\\/([^/]+)\\/send\\/([^/]+)\\/([^/]+)$/u.exec(relativePath);\n if (params.method === \"PUT\" && match) {\n const roomId = decodeMatrixPathSegment(match[1]!);\n const eventType = decodeMatrixPathSegment(match[2]!);\n const transactionId = decodeMatrixPathSegment(match[3]!);\n const transactionKey = JSON.stringify([\n params.state.botUserId,\n roomId,\n eventType,\n transactionId,\n ]);\n const existingResponse = transactionResponse(params.state, transactionKey);\n if (existingResponse) {\n params.recorderEvent.accepted =\n existingResponse.status >= 200 && existingResponse.status < 300;\n return jsonResponse(existingResponse.body, existingResponse.status);\n }\n if (params.state.transactions.size >= MAX_MATRIX_TRANSACTION_RESPONSES) {\n params.recorderEvent.accepted = false;\n return matrixResourceLimitError(\"Too many retained transaction responses\");\n }\n const room = params.state.rooms.get(roomId);\n if (!room) {\n params.recorderEvent.accepted = false;\n const body = { errcode: \"M_NOT_FOUND\", error: \"Unknown room\" };\n rememberTransaction(params.state, transactionKey, {\n body,\n expiresAt: Date.now() + MATRIX_TRANSACTION_RETENTION_MS,\n status: 404,\n });\n return jsonResponse(body, 404);\n }\n const event = createEvent({\n content: params.body,\n roomId: room.id,\n sender: params.state.botUserId,\n state: params.state,\n transactionId,\n type: eventType,\n });\n appendTimelineEvent(room, { event, sequence: params.state.nextSequence++ });\n const body = { event_id: event.event_id };\n rememberTransaction(params.state, transactionKey, {\n body,\n expiresAt: Date.now() + MATRIX_TRANSACTION_RETENTION_MS,\n status: 200,\n });\n notifySyncWaiters(params.state);\n params.recorderEvent.accepted = true;\n return jsonResponse(body);\n }\n\n match = /^\\/rooms\\/([^/]+)\\/typing\\/([^/]+)$/u.exec(relativePath);\n if (params.method === \"PUT\" && match) {\n const room = findRoom(params.state, match[1]!);\n if (!room) {\n return matrixError(\"M_NOT_FOUND\", \"Unknown room\", 404);\n }\n const userId = decodeMatrixPathSegment(match[2]!);\n if (userId !== params.state.botUserId) {\n return matrixError(\"M_FORBIDDEN\", \"Cannot set typing state for another user\", 403);\n }\n if (typeof params.body.typing !== \"boolean\") {\n return matrixError(\"M_BAD_JSON\", \"typing must be a boolean\", 400);\n }\n const timeout =\n params.body.typing &&\n typeof params.body.timeout === \"number\" &&\n Number.isSafeInteger(params.body.timeout)\n ? params.body.timeout\n : undefined;\n if (\n params.body.typing &&\n (timeout === undefined || timeout < 1 || timeout > MAX_NODE_TIMER_DELAY_MS)\n ) {\n return matrixError(\n \"M_BAD_JSON\",\n `timeout must be a positive integer no greater than ${MAX_NODE_TIMER_DELAY_MS}`,\n 400,\n );\n }\n const existingTimeout = room.typingTimeouts.get(userId);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n room.typingTimeouts.delete(userId);\n }\n if (params.body.typing) {\n room.typingUsers.add(userId);\n const timer = setTimeout(() => {\n room.typingTimeouts.delete(userId);\n if (room.typingUsers.delete(userId)) {\n publishTypingState(params.state, room);\n }\n }, timeout!);\n timer.unref();\n room.typingTimeouts.set(userId, timer);\n } else {\n room.typingUsers.delete(userId);\n }\n publishTypingState(params.state, room);\n return jsonResponse({});\n }\n match = /^\\/rooms\\/([^/]+)\\/receipt\\/m\\.read\\/([^/]+)$/u.exec(relativePath);\n if (params.method === \"POST\" && match) {\n const room = findRoom(params.state, match[1]!);\n if (!room) {\n return matrixError(\"M_NOT_FOUND\", \"Unknown room\", 404);\n }\n const receiptEventId = decodeMatrixPathSegment(match[2]!);\n appendEphemeralEvent(room, {\n event: {\n content: {\n [receiptEventId]: {\n \"m.read\": {\n [params.state.botUserId]: {\n ts: Date.now(),\n ...(readTrimmedString(params.body.thread_id)\n ? { thread_id: readTrimmedString(params.body.thread_id) }\n : {}),\n },\n },\n },\n },\n type: \"m.receipt\",\n },\n sequence: params.state.nextSequence++,\n });\n notifySyncWaiters(params.state);\n return jsonResponse({});\n }\n\n return matrixError(\"M_UNRECOGNIZED\", \"Unrecognized request\", 404);\n}\n\nexport async function startMatrixServer(\n params: StartMatrixServerParams = {},\n): Promise<StartedMatrixServer> {\n const host = params.host ?? \"127.0.0.1\";\n const serverName = params.serverName ?? \"matrix.test\";\n const state: MatrixServerState = {\n accessToken: params.accessToken ?? `syt_crabline_${randomBytes(12).toString(\"hex\")}`,\n adminToken: params.adminToken ?? randomBytes(24).toString(\"hex\"),\n botUserId: params.botUserId ?? `@openclaw:${serverName}`,\n deviceId: params.deviceId ?? \"CRABLINE\",\n filterBytes: 0,\n filters: new Map(),\n nextEvent: 1,\n nextFilter: 1,\n nextSequence: 1,\n onEvent: params.onEvent,\n recorderPath: params.recorderPath ?? path.resolve(\"artifacts/crabline/matrix.jsonl\"),\n rooms: new Map(),\n serverName,\n syncWaiters: new Set(),\n transactions: new Map(),\n };\n const roomId = params.roomId ?? matrixId(\"!\", \"default-room\", serverName);\n state.rooms.set(\n roomId,\n createRoom({\n botUserId: state.botUserId,\n createdSequence: 0,\n id: roomId,\n name: params.roomName ?? \"Crabline Matrix Room\",\n serverName,\n state,\n }),\n );\n\n const server = await startHttpJsonServer({\n handleError: (error) => {\n if (error instanceof InvalidJsonBodyError) {\n return matrixError(\"M_NOT_JSON\", \"Request body is not valid JSON\", 400);\n }\n if (error instanceof RequestBodyTooLargeError) {\n return matrixError(\"M_TOO_LARGE\", \"Request body is too large\", 413);\n }\n if (error instanceof InvalidMatrixPathEncodingError) {\n return matrixError(\"M_INVALID_PARAM\", \"Invalid request path encoding\", 400);\n }\n return matrixError(\"M_UNKNOWN\", \"Internal server error\", 500);\n },\n host,\n port: params.port ?? 0,\n serverName: \"Matrix\",\n async handle(request) {\n const url = new URL(request.url ?? \"/\", \"http://localhost\");\n const method = request.method ?? \"GET\";\n const type = url.pathname === \"/crabline/matrix/inbound\" ? \"admin\" : \"api\";\n if (type === \"admin\") {\n if (method !== \"POST\") {\n return jsonResponse({ error: \"Method not allowed\", ok: false }, 405);\n }\n if (!hasAdminToken(request, state.adminToken)) {\n request.resume();\n return adminAuthError();\n }\n const body = await parseUnknownRequestBody(request);\n if (!isJsonObject(body)) {\n return jsonResponse({ error: \"Request body must be a JSON object\", ok: false }, 400);\n }\n await appendEvent(state, {\n at: new Date().toISOString(),\n ...(Object.keys(body).length > 0 ? { body } : {}),\n method,\n path: url.pathname,\n query: queryRecord(url),\n type,\n });\n return await handleAdminInbound({ body, state });\n }\n if (url.pathname === \"/_matrix/client/versions\" && method === \"GET\") {\n await appendEvent(state, {\n at: new Date().toISOString(),\n method,\n path: url.pathname,\n query: queryRecord(url),\n type,\n });\n return jsonResponse({ unstable_features: {}, versions: [\"v1.11\"] });\n }\n if (!url.pathname.startsWith(\"/_matrix/client/\")) {\n return matrixError(\"M_UNRECOGNIZED\", \"Unrecognized request\", 404);\n }\n if (!authorized(request, state.accessToken)) {\n request.resume();\n return matrixError(\"M_UNKNOWN_TOKEN\", \"Invalid access token\", 401);\n }\n const parsedBody = [\"POST\", \"PUT\"].includes(method)\n ? await parseUnknownRequestBody(request)\n : {};\n if (!isJsonObject(parsedBody)) {\n return matrixError(\"M_BAD_JSON\", \"Request body must be a JSON object\", 400);\n }\n const event: MatrixRecorderEvent = {\n at: new Date().toISOString(),\n ...(Object.keys(parsedBody).length > 0 ? { body: parsedBody } : {}),\n method,\n path: url.pathname,\n query: queryRecord(url),\n type,\n };\n const response = await handleMatrixApi({\n body: parsedBody,\n method,\n path: url.pathname,\n recorderEvent: event,\n state,\n url,\n });\n await appendEvent(state, event, response.ok && [\"DELETE\", \"POST\", \"PUT\"].includes(method));\n return response;\n },\n });\n\n const clientApiRoot = `${server.baseUrl}/_matrix/client/v3`;\n return {\n async close() {\n for (const room of state.rooms.values()) {\n for (const timer of room.typingTimeouts.values()) {\n clearTimeout(timer);\n }\n room.typingTimeouts.clear();\n }\n await server.close();\n },\n manifest: {\n accessToken: state.accessToken,\n adminToken: state.adminToken,\n baseUrl: server.baseUrl,\n botUserId: state.botUserId,\n deviceId: state.deviceId,\n endpoints: {\n adminInboundUrl: `${server.baseUrl}/crabline/matrix/inbound`,\n clientApiRoot,\n syncUrl: `${clientApiRoot}/sync`,\n },\n env: {\n MATRIX_ACCESS_TOKEN: state.accessToken,\n MATRIX_BASE_URL: server.baseUrl,\n MATRIX_USER_ID: state.botUserId,\n },\n provider: \"matrix\",\n recorderPath: state.recorderPath,\n version: 1,\n },\n };\n}\n"]}
@@ -30,6 +30,11 @@ export type StartMattermostServerParams = {
30
30
  onEvent?: ServerEventObserver | undefined;
31
31
  port?: number | undefined;
32
32
  recorderPath?: string | undefined;
33
+ maxPendingInboundEvents?: number | undefined;
34
+ maxWebSocketBufferedBytes?: number | undefined;
35
+ maxWebSocketMessageBytes?: number | undefined;
36
+ maxUnauthenticatedWebSocketClients?: number | undefined;
37
+ websocketAuthenticationTimeoutMs?: number | undefined;
33
38
  };
34
39
  export declare function mattermostId(value: string): string;
35
40
  export declare function startMattermostServer(params?: StartMattermostServerParams): Promise<StartedMattermostServer>;