clawrelay 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawrelay",
3
- "version": "0.3.5",
3
+ "version": "0.3.7",
4
4
  "description": "Channel relay plugin for OpenClaw — receives messages from an always-on relay proxy",
5
5
  "main": "src/index.ts",
6
6
  "type": "module",
@@ -23,7 +23,7 @@ export function createRelayInboundHandler(api: any) {
23
23
  respond: (ok: boolean, payload?: unknown, error?: unknown) => void;
24
24
  context: any;
25
25
  }) => {
26
- const { params, client, respond } = opts;
26
+ const { params, client, respond, context } = opts;
27
27
 
28
28
  const message = params.message as RelayInboundMessage | undefined;
29
29
  if (!message || !message.messageId || !message.content) {
@@ -63,13 +63,22 @@ export function createRelayInboundHandler(api: any) {
63
63
 
64
64
  const streaming = params.streaming === true;
65
65
 
66
+ // Helper to send an event to the calling client via the gateway broadcast API
67
+ const sendEventToClient = (event: string, payload: unknown) => {
68
+ if (!client?.connId) {
69
+ logger.warn(`[clawrelay] Cannot send event ${event}: no client connId`);
70
+ return;
71
+ }
72
+ context.broadcastToConnIds(event, payload, new Set([client.connId]));
73
+ };
74
+
66
75
  if (streaming) {
67
76
  // Streaming mode: ack immediately, then send deltas via events
68
77
  respond(true, { messageId: message.messageId, streaming: true });
69
78
 
70
79
  const streamCallback = (text: string) => {
71
80
  try {
72
- client.sendEvent('relay.stream.delta', {
81
+ sendEventToClient('relay.stream.delta', {
73
82
  messageId: message.messageId,
74
83
  text,
75
84
  kind: 'deliver',
@@ -88,14 +97,14 @@ export function createRelayInboundHandler(api: any) {
88
97
  streamCallback,
89
98
  });
90
99
 
91
- client.sendEvent('relay.stream.done', {
100
+ sendEventToClient('relay.stream.done', {
92
101
  messageId: message.messageId,
93
102
  text: responseContent,
94
103
  });
95
104
  } catch (err) {
96
105
  const errMsg = err instanceof Error ? err.message : String(err);
97
106
  logger.error(`[clawrelay] Failed to process inbound (streaming): ${errMsg}`);
98
- client.sendEvent('relay.stream.done', {
107
+ sendEventToClient('relay.stream.done', {
99
108
  messageId: message.messageId,
100
109
  text: '',
101
110
  error: `Error processing message: ${errMsg}`,
package/src/index.ts CHANGED
@@ -37,7 +37,7 @@ const plugin = {
37
37
  api.registerGatewayMethod('relay.inbound', relayInboundHandler);
38
38
 
39
39
  // Register HTTP health route on the gateway's HTTP server
40
- api.registerHttpRoute({ path: '/relay/health', handler: relayHealthHandler });
40
+ api.registerHttpRoute({ path: '/relay/health', auth: 'plugin', handler: relayHealthHandler });
41
41
 
42
42
  logger.info('[clawrelay] Relay channel plugin registered (gateway method + HTTP health)');
43
43
  },