@openclaw/crabline 0.1.9 → 0.1.10

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 +38 -0
  34. package/dist/src/openclaw/artifact-generation.js +314 -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 +26 -0
  54. package/dist/src/openclaw/private-file.js +411 -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 +949 -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 +194 -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 +539 -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 +46 -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 +811 -152
  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":"signal.js","sourceRoot":"","sources":["../../../src/servers/signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../src/servers/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport {\n adminAuthError,\n closeServer,\n drainRequestBody,\n hasAdminToken,\n InvalidJsonBodyError,\n isJsonObject,\n jsonResponse,\n parseUnknownRequestBody,\n queryRecord,\n readInteger,\n readTrimmedString,\n RequestBodyTooLargeError,\n type ServerRequestEvent,\n writeResponse,\n} from \"./http.js\";\nimport {\n recordCommittedServerEvent,\n recordServerEvent,\n type ServerEventObserver,\n} from \"./recorder.js\";\nimport { resolveMaxPendingInboundEvents } from \"./pending-events.js\";\n\ntype SignalServerState = {\n account: string;\n adminToken: string;\n clients: Set<ServerResponse>;\n clientBuffers: Map<ServerResponse, SignalClientBuffer>;\n maxPendingInboundEvents: number;\n maxSseClients: number;\n nextEventSequence: number;\n nextTimestamp: number;\n onEvent: ServerEventObserver | undefined;\n pendingEventBytes: number;\n pendingEvents: SignalSseChunk[];\n pendingSseClients: number;\n recorderPath: string;\n};\n\ntype SignalClientBuffer = {\n bytes: number;\n draining: boolean;\n events: SignalSseChunk[];\n inFlight: SignalSseChunk[];\n};\ntype SignalSseChunk = {\n data: string;\n recipients?: Set<ServerResponse> | undefined;\n sequence?: number | undefined;\n};\nconst SIGNAL_CLI_SSE_KEEPALIVE_MS = 15_000;\nconst DEFAULT_MAX_SIGNAL_SSE_CLIENTS = 32;\nconst MAX_SIGNAL_SSE_BUFFER_BYTES = 2 * 1024 * 1024;\ntype SignalSseWriteResult = \"accepted\" | \"queued\" | \"rejected\";\ntype SignalRpcResult = {\n accepted: boolean;\n record: boolean;\n response: Response;\n};\ntype SignalRecorderEvent = ServerRequestEvent & {\n accepted?: boolean | undefined;\n};\n\nexport type SignalServerManifest = {\n account: string;\n adminToken: string;\n baseUrl: string;\n endpoints: {\n adminInboundUrl: string;\n apiRoot: string;\n eventsUrl: string;\n rpcUrl: string;\n };\n env: Record<string, never>;\n provider: \"signal\";\n recorderPath: string;\n version: 1;\n};\n\nexport type StartedSignalServer = {\n close(): Promise<void>;\n manifest: SignalServerManifest;\n};\n\nexport type StartSignalServerParams = {\n account?: string | undefined;\n adminToken?: string | undefined;\n host?: string | undefined;\n onEvent?: ServerEventObserver | undefined;\n port?: number | undefined;\n recorderPath?: string | undefined;\n maxPendingInboundEvents?: number | undefined;\n maxSseClients?: number | undefined;\n};\n\nasync function appendEvent(\n state: SignalServerState,\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 rpcResponse(id: unknown, result: unknown): Response {\n return jsonResponse({ id: id ?? null, jsonrpc: \"2.0\", result });\n}\n\nfunction rpcError(code: number, message: string, id: unknown = null, status = 400): Response {\n return jsonResponse(\n {\n error: { code, message },\n id: id ?? null,\n jsonrpc: \"2.0\",\n },\n status,\n );\n}\n\nfunction removeSignalClient(\n state: SignalServerState,\n client: ServerResponse,\n destroy: boolean,\n): void {\n const buffer = state.clientBuffers.get(client);\n state.clients.delete(client);\n state.clientBuffers.delete(client);\n if (buffer) {\n const undeliveredEvents = [...buffer.inFlight, ...buffer.events].filter((event) => {\n event.recipients?.delete(client);\n return event.sequence !== undefined && event.recipients?.size === 0;\n });\n const restoredEvents = undeliveredEvents.filter(\n (event) => !state.pendingEvents.includes(event),\n );\n if (restoredEvents.length > 0) {\n state.pendingEvents.push(...restoredEvents);\n state.pendingEvents.sort(\n (left, right) => (left.sequence ?? Number.MAX_SAFE_INTEGER) - (right.sequence ?? 0),\n );\n state.pendingEventBytes += restoredEvents.reduce(\n (total, event) => total + Buffer.byteLength(event.data),\n 0,\n );\n }\n }\n if (destroy) {\n client.destroy();\n }\n if (state.pendingEvents.length > 0 && state.clients.size > 0) {\n queueMicrotask(() => flushPendingSignalEvents(state));\n }\n}\n\nfunction evictSignalClient(state: SignalServerState, client: ServerResponse): void {\n removeSignalClient(state, client, true);\n}\n\nfunction scheduleSignalDrain(state: SignalServerState, client: ServerResponse): void {\n const buffer = state.clientBuffers.get(client);\n if (!buffer || buffer.draining || client.destroyed || client.writableEnded) {\n return;\n }\n buffer.draining = true;\n client.once(\"drain\", () => {\n const current = state.clientBuffers.get(client);\n if (current) {\n current.bytes -= current.inFlight.reduce(\n (total, event) => total + Buffer.byteLength(event.data),\n 0,\n );\n current.inFlight.length = 0;\n current.draining = false;\n flushSignalClientEvents(state, client);\n const remaining = state.clientBuffers.get(client);\n if (remaining && remaining.events.length === 0 && !client.writableNeedDrain) {\n flushPendingSignalEvents(state);\n }\n }\n });\n}\n\nfunction queueSignalClientEvent(\n state: SignalServerState,\n client: ServerResponse,\n event: SignalSseChunk,\n): SignalSseWriteResult {\n const buffer = state.clientBuffers.get(client);\n const eventBytes = Buffer.byteLength(event.data);\n const alreadyBuffered = isSignalEventBuffered(state, event);\n const pendingEventBytes = state.pendingEvents.includes(event) ? 0 : eventBytes;\n if (\n !buffer ||\n (!alreadyBuffered && signalBufferedEventCount(state) >= state.maxPendingInboundEvents) ||\n state.pendingEventBytes + buffer.bytes + pendingEventBytes > MAX_SIGNAL_SSE_BUFFER_BYTES\n ) {\n evictSignalClient(state, client);\n return \"rejected\";\n }\n buffer.events.push(event);\n buffer.bytes += eventBytes;\n event.recipients?.add(client);\n scheduleSignalDrain(state, client);\n return \"queued\";\n}\n\nfunction writeSignalSse(\n state: SignalServerState,\n client: ServerResponse,\n event: SignalSseChunk,\n): SignalSseWriteResult {\n if (client.destroyed) {\n removeSignalClient(state, client, false);\n return \"rejected\";\n }\n if (client.writableEnded) {\n evictSignalClient(state, client);\n return \"rejected\";\n }\n const eventBytes = Buffer.byteLength(event.data);\n if (eventBytes > MAX_SIGNAL_SSE_BUFFER_BYTES) {\n return \"rejected\";\n }\n const buffer = state.clientBuffers.get(client);\n if (client.writableNeedDrain || buffer?.draining || buffer?.events.length) {\n return queueSignalClientEvent(state, client, event);\n }\n if (client.writableLength + eventBytes > MAX_SIGNAL_SSE_BUFFER_BYTES) {\n evictSignalClient(state, client);\n return \"rejected\";\n }\n const accepted = client.write(event.data);\n event.recipients?.add(client);\n if (!accepted) {\n if (buffer) {\n buffer.inFlight.push(event);\n buffer.bytes += eventBytes;\n }\n scheduleSignalDrain(state, client);\n }\n return \"accepted\";\n}\n\nfunction maxSignalClientBufferBytes(state: SignalServerState): number {\n let maxBytes = 0;\n for (const buffer of state.clientBuffers.values()) {\n maxBytes = Math.max(maxBytes, buffer.bytes);\n }\n return maxBytes;\n}\n\nfunction isSignalEventBuffered(state: SignalServerState, event: SignalSseChunk): boolean {\n return (\n state.pendingEvents.includes(event) ||\n [...state.clientBuffers.values()].some(\n (buffer) => buffer.inFlight.includes(event) || buffer.events.includes(event),\n )\n );\n}\n\nfunction signalBufferedEventCount(state: SignalServerState): number {\n const sequences = new Set<number>();\n for (const event of state.pendingEvents) {\n if (event.sequence !== undefined) {\n sequences.add(event.sequence);\n }\n }\n for (const buffer of state.clientBuffers.values()) {\n for (const event of [...buffer.inFlight, ...buffer.events]) {\n if (event.sequence !== undefined) {\n sequences.add(event.sequence);\n }\n }\n }\n return sequences.size;\n}\n\nfunction queueSignalEvent(state: SignalServerState, event: SignalSseChunk): boolean {\n const eventBytes = Buffer.byteLength(event.data);\n if (\n eventBytes > MAX_SIGNAL_SSE_BUFFER_BYTES ||\n state.pendingEventBytes + maxSignalClientBufferBytes(state) + eventBytes >\n MAX_SIGNAL_SSE_BUFFER_BYTES ||\n (!isSignalEventBuffered(state, event) &&\n signalBufferedEventCount(state) >= state.maxPendingInboundEvents)\n ) {\n return false;\n }\n state.pendingEvents.push(event);\n state.pendingEventBytes += eventBytes;\n return true;\n}\n\nfunction replayExclusiveSignalEvents(state: SignalServerState, client: ServerResponse): void {\n const events = new Map<number, SignalSseChunk>();\n for (const [owner, buffer] of state.clientBuffers) {\n if (owner === client) {\n continue;\n }\n for (const event of [...buffer.inFlight, ...buffer.events]) {\n if (\n event.sequence !== undefined &&\n event.recipients?.size === 1 &&\n event.recipients.has(owner)\n ) {\n events.set(event.sequence, event);\n }\n }\n }\n for (const event of [...events.values()].sort(\n (left, right) => left.sequence! - right.sequence!,\n )) {\n if (writeSignalSse(state, client, event) === \"rejected\") {\n break;\n }\n }\n}\n\nfunction flushSignalClientEvents(state: SignalServerState, client: ServerResponse): void {\n while (!client.writableNeedDrain) {\n const buffer = state.clientBuffers.get(client);\n if (!buffer || buffer.events.length === 0) {\n break;\n }\n const event = buffer.events.shift()!;\n if (!client.write(event.data)) {\n buffer.inFlight.push(event);\n scheduleSignalDrain(state, client);\n break;\n }\n buffer.bytes -= Buffer.byteLength(event.data);\n }\n}\n\nfunction flushPendingSignalEvents(state: SignalServerState): void {\n while (state.pendingEvents.length > 0 && state.clients.size > 0) {\n const event = state.pendingEvents[0]!;\n for (const client of [...state.clients]) {\n if (!event.recipients?.has(client)) {\n writeSignalSse(state, client, event);\n }\n }\n if (\n state.clients.size === 0 ||\n [...state.clients].some((client) => !event.recipients?.has(client))\n ) {\n break;\n }\n state.pendingEvents.shift();\n state.pendingEventBytes -= Buffer.byteLength(event.data);\n }\n}\n\nfunction emitSignalEvent(state: SignalServerState, payload: unknown): boolean {\n const event: SignalSseChunk = {\n data: `event:receive\\ndata:${JSON.stringify(payload)}\\n\\n`,\n recipients: new Set(),\n sequence: state.nextEventSequence++,\n };\n if (state.clients.size === 0 || state.pendingEvents.length > 0) {\n return queueSignalEvent(state, event);\n }\n let delivered = false;\n for (const client of state.clients) {\n const result = writeSignalSse(state, client, event);\n delivered = result === \"accepted\" || result === \"queued\" || delivered;\n }\n return delivered || queueSignalEvent(state, event);\n}\n\nasync function handleAdminInbound(params: {\n body: Record<string, unknown>;\n state: SignalServerState;\n}): Promise<Response> {\n const text = typeof params.body.text === \"string\" ? params.body.text : undefined;\n const sourceNumber = readTrimmedString(params.body.sourceNumber ?? params.body.senderId);\n const sourceUuid = readTrimmedString(params.body.sourceUuid);\n if (!text || text.trim().length === 0 || (!sourceNumber && !sourceUuid)) {\n return jsonResponse(\n { error: \"text and at least one source identity are required\", ok: false },\n 400,\n );\n }\n const timestamp = readInteger(params.body.timestamp) ?? params.state.nextTimestamp++;\n const groupId = readTrimmedString(params.body.groupId);\n const payload = {\n envelope: {\n sourceName: readTrimmedString(params.body.sourceName ?? params.body.senderName),\n ...(sourceNumber ? { sourceNumber } : {}),\n ...(sourceUuid ? { sourceUuid } : {}),\n timestamp,\n dataMessage: {\n message: text,\n timestamp,\n ...(groupId ? { groupInfo: { groupId } } : {}),\n },\n },\n };\n if (!emitSignalEvent(params.state, payload)) {\n return jsonResponse(\n {\n error: `Pending inbound queue is full (${params.state.maxPendingInboundEvents} events)`,\n ok: false,\n },\n 503,\n );\n }\n return jsonResponse({ event: payload, ok: true });\n}\n\nasync function handleRpc(params: {\n body: Record<string, unknown>;\n state: SignalServerState;\n}): Promise<SignalRpcResult> {\n const hasId = Object.hasOwn(params.body, \"id\");\n const id = params.body.id;\n const validId =\n !hasId ||\n id === null ||\n typeof id === \"string\" ||\n (typeof id === \"number\" && Number.isFinite(id));\n const method = params.body.method;\n if (typeof method !== \"string\" || !validId) {\n return {\n accepted: false,\n record: false,\n response: rpcError(-32600, \"Invalid Request\", validId ? id : null),\n };\n }\n if (params.body.jsonrpc !== \"2.0\") {\n return {\n accepted: false,\n record: false,\n response: rpcError(-32600, \"Invalid Request\", id),\n };\n }\n const notification = !hasId;\n if (\n params.body.params !== undefined &&\n !Array.isArray(params.body.params) &&\n !isJsonObject(params.body.params)\n ) {\n return {\n accepted: false,\n record: false,\n response: rpcError(-32600, \"Invalid Request\", id),\n };\n }\n if (method === \"version\") {\n return {\n accepted: false,\n record: true,\n response: notification\n ? new Response(null, { status: 204 })\n : rpcResponse(id, { version: \"crabline-signal-1\" }),\n };\n }\n if ([\"send\", \"sendReaction\", \"sendReceipt\", \"sendTyping\"].includes(method)) {\n if (!validSignalRpcParams(method, params.body.params)) {\n return {\n accepted: false,\n record: false,\n response: notification\n ? new Response(null, { status: 204 })\n : rpcError(-32602, \"Invalid params\", id),\n };\n }\n const timestamp = params.state.nextTimestamp++;\n return {\n accepted: true,\n record: true,\n response: notification\n ? new Response(null, { status: 204 })\n : rpcResponse(id, method === \"sendTyping\" ? {} : { timestamp }),\n };\n }\n return {\n accepted: false,\n record: false,\n response: notification\n ? new Response(null, { status: 204 })\n : jsonResponse({\n error: { code: -32601, message: `Method not found: ${method}` },\n id: id ?? null,\n jsonrpc: \"2.0\",\n }),\n };\n}\n\nfunction hasRecipients(params: Record<string, unknown>): boolean {\n const values = [\n params.recipient,\n params.recipients,\n params.groupId,\n params.groupIds,\n params.username,\n params.usernames,\n ];\n return (\n params.noteToSelf === true ||\n values.some(\n (value) =>\n (typeof value === \"string\" && value.trim().length > 0) ||\n (Array.isArray(value) &&\n value.length > 0 &&\n value.every((entry) => typeof entry === \"string\" && entry.trim().length > 0)),\n )\n );\n}\n\nfunction hasTypingRecipients(params: Record<string, unknown>): boolean {\n if (\n params.noteToSelf !== undefined ||\n params.username !== undefined ||\n params.usernames !== undefined ||\n (params.stop !== undefined && typeof params.stop !== \"boolean\")\n ) {\n return false;\n }\n return [params.recipient, params.recipients, params.groupId, params.groupIds].some(\n (value) =>\n (typeof value === \"string\" && value.trim().length > 0) ||\n (Array.isArray(value) &&\n value.length > 0 &&\n value.every((entry) => typeof entry === \"string\" && entry.trim().length > 0)),\n );\n}\n\nfunction validTimestamp(value: unknown): boolean {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction hasStringArray(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((entry) => typeof entry === \"string\" && entry.trim().length > 0)\n );\n}\n\nfunction validSignalRpcParams(method: string, value: unknown): boolean {\n if (!isJsonObject(value)) {\n return false;\n }\n if (method === \"send\") {\n return (\n hasRecipients(value) &&\n (readTrimmedString(value.message) !== undefined ||\n readTrimmedString(value.attachment) !== undefined ||\n hasStringArray(value.attachments))\n );\n }\n if (method === \"sendReaction\") {\n return (\n hasRecipients(value) &&\n readTrimmedString(value.emoji) !== undefined &&\n readTrimmedString(value.targetAuthor) !== undefined &&\n validTimestamp(value.targetTimestamp)\n );\n }\n if (method === \"sendReceipt\") {\n const targetTimestamps = value.targetTimestamps ?? value.targetTimestamp;\n const timestamps = Array.isArray(targetTimestamps) ? targetTimestamps : [targetTimestamps];\n return (\n (readTrimmedString(value.recipient) !== undefined ||\n readTrimmedString(value.username) !== undefined ||\n hasStringArray(value.usernames)) &&\n timestamps.length > 0 &&\n timestamps.every(validTimestamp) &&\n (value.type === undefined || value.type === \"read\" || value.type === \"viewed\")\n );\n }\n return method === \"sendTyping\" && hasTypingRecipients(value);\n}\n\nasync function handleRequest(params: {\n request: IncomingMessage;\n response: ServerResponse;\n state: SignalServerState;\n}): Promise<void> {\n const url = new URL(params.request.url ?? \"/\", \"http://localhost\");\n if (url.pathname === \"/api/v1/events\" && params.request.method === \"GET\") {\n if (params.state.clients.size + params.state.pendingSseClients >= params.state.maxSseClients) {\n await writeResponse(\n params.response,\n jsonResponse({ error: \"Too many event stream clients\", ok: false }, 503),\n );\n return;\n }\n params.state.pendingSseClients += 1;\n try {\n await appendEvent(params.state, {\n at: new Date().toISOString(),\n method: \"GET\",\n path: url.pathname,\n query: queryRecord(url),\n type: \"api\",\n });\n } finally {\n params.state.pendingSseClients -= 1;\n }\n if (params.request.destroyed || params.response.destroyed) {\n return;\n }\n params.response.writeHead(200, {\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n \"content-type\": \"text/event-stream\",\n });\n params.response.flushHeaders();\n params.response.once(\"close\", () => {\n removeSignalClient(params.state, params.response, false);\n });\n params.state.clients.add(params.response);\n params.state.clientBuffers.set(params.response, {\n bytes: 0,\n draining: false,\n events: [],\n inFlight: [],\n });\n replayExclusiveSignalEvents(params.state, params.response);\n if (params.state.clients.has(params.response)) {\n flushPendingSignalEvents(params.state);\n }\n return;\n }\n\n let fetchResponse: Response;\n if (url.pathname === \"/crabline/signal/inbound\" && params.request.method === \"POST\") {\n if (!hasAdminToken(params.request, params.state.adminToken)) {\n drainRequestBody(params.request);\n fetchResponse = adminAuthError();\n } else {\n const body = await parseUnknownRequestBody(params.request);\n if (!isJsonObject(body)) {\n fetchResponse = jsonResponse(\n { error: \"Request body must be a JSON object\", ok: false },\n 400,\n );\n await writeResponse(params.response, fetchResponse);\n return;\n }\n await appendEvent(params.state, {\n at: new Date().toISOString(),\n body,\n method: \"POST\",\n path: url.pathname,\n query: queryRecord(url),\n type: \"admin\",\n });\n fetchResponse = await handleAdminInbound({ body, state: params.state });\n }\n } else if (url.pathname === \"/api/v1/check\" && params.request.method === \"GET\") {\n await appendEvent(params.state, {\n at: new Date().toISOString(),\n method: \"GET\",\n path: url.pathname,\n query: queryRecord(url),\n type: \"api\",\n });\n fetchResponse = new Response(null, { status: 200 });\n } else if (url.pathname === \"/api/v1/rpc\" && params.request.method === \"POST\") {\n const body = await parseUnknownRequestBody(params.request);\n if (!isJsonObject(body)) {\n await writeResponse(params.response, rpcError(-32600, \"Invalid Request\"));\n return;\n }\n const rpc = await handleRpc({ body, state: params.state });\n if (rpc.record) {\n const event: SignalRecorderEvent = {\n accepted: rpc.accepted,\n at: new Date().toISOString(),\n body,\n method: \"POST\",\n path: url.pathname,\n query: queryRecord(url),\n type: \"api\",\n };\n await appendEvent(params.state, event, rpc.accepted || rpc.response.status === 204);\n }\n fetchResponse = rpc.response;\n } else {\n fetchResponse = new Response(\"not found\", { status: 404 });\n }\n await writeResponse(params.response, fetchResponse);\n}\n\nexport async function startSignalServer(\n params: StartSignalServerParams = {},\n): Promise<StartedSignalServer> {\n const state: SignalServerState = {\n account: params.account ?? \"+15550000000\",\n adminToken: params.adminToken ?? randomBytes(24).toString(\"base64url\"),\n clients: new Set(),\n clientBuffers: new Map(),\n maxPendingInboundEvents: resolveMaxPendingInboundEvents(params.maxPendingInboundEvents),\n maxSseClients:\n Number.isSafeInteger(params.maxSseClients) && (params.maxSseClients ?? 0) > 0\n ? params.maxSseClients!\n : DEFAULT_MAX_SIGNAL_SSE_CLIENTS,\n nextEventSequence: 1,\n nextTimestamp: Date.now(),\n onEvent: params.onEvent,\n pendingEventBytes: 0,\n pendingEvents: [],\n pendingSseClients: 0,\n recorderPath: params.recorderPath ?? path.resolve(\".crabline\", \"servers\", \"signal.jsonl\"),\n };\n const host = params.host ?? \"127.0.0.1\";\n const server = createServer((request, response) => {\n void handleRequest({ request, response, state }).catch(async (error) => {\n if (!response.headersSent) {\n let errorResponse: Response;\n const isAdminRequest =\n new URL(request.url ?? \"/\", \"http://localhost\").pathname === \"/crabline/signal/inbound\";\n if (error instanceof InvalidJsonBodyError) {\n errorResponse = isAdminRequest\n ? jsonResponse({ error: \"Request body is not valid JSON\", ok: false }, 400)\n : rpcError(-32700, \"Parse error\");\n } else if (error instanceof RequestBodyTooLargeError) {\n errorResponse = isAdminRequest\n ? jsonResponse({ error: \"Request body is too large\", ok: false }, 413)\n : rpcError(-32600, \"Request body is too large\", null, 413);\n } else {\n errorResponse = jsonResponse({ error: \"internal server error\", ok: false }, 500);\n }\n try {\n await writeResponse(response, errorResponse);\n } catch (writeError) {\n response.destroy(\n writeError instanceof Error ? writeError : new Error(String(writeError)),\n );\n }\n } else {\n response.destroy(error instanceof Error ? error : new Error(String(error)));\n }\n });\n });\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(params.port ?? 0, host, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n const address = server.address();\n if (!address || typeof address === \"string\") {\n await closeServer(server);\n throw new Error(\"Unable to resolve Signal local server address.\");\n }\n const keepalive = setInterval(() => {\n for (const client of state.clients) {\n writeSignalSse(state, client, { data: \":\\n\" });\n }\n }, SIGNAL_CLI_SSE_KEEPALIVE_MS);\n keepalive.unref();\n const baseUrl = `http://${host.includes(\":\") ? `[${host}]` : host}:${address.port}`;\n return {\n async close() {\n clearInterval(keepalive);\n for (const client of state.clients) {\n client.end();\n }\n await closeServer(server);\n },\n manifest: {\n account: state.account,\n adminToken: state.adminToken,\n baseUrl,\n endpoints: {\n adminInboundUrl: `${baseUrl}/crabline/signal/inbound`,\n apiRoot: baseUrl,\n eventsUrl: `${baseUrl}/api/v1/events`,\n rpcUrl: `${baseUrl}/api/v1/rpc`,\n },\n env: {},\n provider: \"signal\",\n recorderPath: state.recorderPath,\n version: 1,\n },\n };\n}\n"]}
@@ -27,6 +27,11 @@ export type StartSlackServerParams = {
27
27
  botId?: string | undefined;
28
28
  botToken?: string | undefined;
29
29
  botUserId?: string | undefined;
30
+ chatPostMessageRateLimit?: {
31
+ remaining: number;
32
+ retryAfterSeconds: number;
33
+ } | undefined;
34
+ eventsRequestUrl?: string | undefined;
30
35
  host?: string | undefined;
31
36
  onEvent?: ServerEventObserver | undefined;
32
37
  port?: number | undefined;