@omnixal/openclaw-nats-plugin 0.2.8 → 0.2.9

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": "@omnixal/openclaw-nats-plugin",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "description": "NATS JetStream event-driven plugin for OpenClaw",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,7 +17,7 @@ export const envSchema = {
17
17
  },
18
18
  gateway: {
19
19
  wsUrl: Env.string({ default: 'ws://localhost:18789', env: 'OPENCLAW_WS_URL' }),
20
- token: Env.string({ default: '', env: 'OPENCLAW_DEVICE_TOKEN' }),
20
+ token: Env.string({ default: '', env: 'OPENCLAW_SIDECAR_DEVICE_TOKEN' }),
21
21
  },
22
22
  consumer: {
23
23
  name: Env.string({ default: 'openclaw-main', env: 'NATS_CONSUMER_NAME' }),
@@ -1,6 +1,6 @@
1
1
  import { Controller, BaseController, Subscribe, OnQueueReady, type Message } from '@onebun/core';
2
2
  import { PipelineService } from '../pre-handlers/pipeline.service';
3
- import { GatewayClientService } from '../gateway/gateway-client.service';
3
+ import { GatewayClientService, GatewayRpcError } from '../gateway/gateway-client.service';
4
4
  import { PendingService } from '../pending/pending.service';
5
5
  import { RouterService } from '../router/router.service';
6
6
  import { MetricsService } from '../metrics/metrics.service';
@@ -73,6 +73,13 @@ export class ConsumerController extends BaseController {
73
73
  await this.logService.logDelivery(route.id, envelope.subject, JSON.stringify({ eventId: envelope.id, target: route.target }));
74
74
  } catch (routeErr) {
75
75
  await this.logService.logError('route', route.id, envelope.subject, routeErr);
76
+ // Gateway rejected the request (e.g. missing scope) — store in pending, don't nack
77
+ if (routeErr instanceof GatewayRpcError) {
78
+ this.logger.error(`Gateway rejected event ${envelope.id}: ${routeErr.errorCode} — ${routeErr.errorMessage}`);
79
+ await this.pendingService.addPending(envelope);
80
+ await message.ack();
81
+ return;
82
+ }
76
83
  throw routeErr;
77
84
  }
78
85
  }
@@ -117,7 +117,20 @@ export class GatewayClientService extends BaseService implements OnModuleInit, O
117
117
  if (payload?.type === 'hello-ok') {
118
118
  if (!this.connected) {
119
119
  this.connected = true;
120
- this.logger.info('OpenClaw handshake complete connected');
120
+ const grantedScopes = payload.auth?.scopes ?? [];
121
+ const serverVersion = payload.server?.version ?? 'unknown';
122
+ this.logger.info('OpenClaw handshake complete', {
123
+ protocol: payload.protocol,
124
+ serverVersion,
125
+ grantedScopes,
126
+ connId: payload.server?.connId,
127
+ });
128
+ if (grantedScopes.length > 0 && !grantedScopes.includes('operator.write')) {
129
+ this.logger.error(
130
+ `Gateway did NOT grant operator.write scope! Granted: [${grantedScopes.join(', ')}]. ` +
131
+ 'Message delivery will fail. Rotate the device token with --scope operator.write',
132
+ );
133
+ }
121
134
  }
122
135
  return;
123
136
  }