@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
package/sidecar/src/config.ts
CHANGED
|
@@ -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: '
|
|
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
|
-
|
|
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
|
}
|