agent-relay 3.1.8 → 3.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.
- package/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/package.json +8 -8
- package/packages/acp-bridge/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/dist/__tests__/ws-client.test.js +69 -0
- package/packages/openclaw/dist/__tests__/ws-client.test.js.map +1 -1
- package/packages/openclaw/dist/gateway.d.ts +7 -0
- package/packages/openclaw/dist/gateway.d.ts.map +1 -1
- package/packages/openclaw/dist/gateway.js +192 -35
- package/packages/openclaw/dist/gateway.js.map +1 -1
- package/packages/openclaw/dist/setup.d.ts.map +1 -1
- package/packages/openclaw/dist/setup.js +6 -0
- package/packages/openclaw/dist/setup.js.map +1 -1
- package/packages/openclaw/package.json +2 -2
- package/packages/openclaw/skill/SKILL.md +14 -0
- package/packages/openclaw/src/__tests__/ws-client.test.ts +72 -0
- package/packages/openclaw/src/gateway.ts +215 -37
- package/packages/openclaw/src/setup.ts +7 -0
- package/packages/policy/package.json +2 -2
- package/packages/sdk/package.json +2 -2
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -174,13 +174,13 @@
|
|
|
174
174
|
},
|
|
175
175
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
176
176
|
"dependencies": {
|
|
177
|
-
"@agent-relay/config": "3.1.
|
|
178
|
-
"@agent-relay/hooks": "3.1.
|
|
179
|
-
"@agent-relay/sdk": "3.1.
|
|
180
|
-
"@agent-relay/telemetry": "3.1.
|
|
181
|
-
"@agent-relay/trajectory": "3.1.
|
|
182
|
-
"@agent-relay/user-directory": "3.1.
|
|
183
|
-
"@agent-relay/utils": "3.1.
|
|
177
|
+
"@agent-relay/config": "3.1.10",
|
|
178
|
+
"@agent-relay/hooks": "3.1.10",
|
|
179
|
+
"@agent-relay/sdk": "3.1.10",
|
|
180
|
+
"@agent-relay/telemetry": "3.1.10",
|
|
181
|
+
"@agent-relay/trajectory": "3.1.10",
|
|
182
|
+
"@agent-relay/user-directory": "3.1.10",
|
|
183
|
+
"@agent-relay/utils": "3.1.10",
|
|
184
184
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
185
185
|
"@relaycast/sdk": "^0.4.0",
|
|
186
186
|
"chokidar": "^5.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/acp-bridge",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"description": "ACP (Agent Client Protocol) bridge for Agent Relay - expose relay agents to ACP-compatible editors like Zed",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@agent-relay/sdk": "3.1.
|
|
49
|
+
"@agent-relay/sdk": "3.1.10",
|
|
50
50
|
"@agentclientprotocol/sdk": "^0.12.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/hooks",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"description": "Hook emitter, registry, and trajectory hooks for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"test:watch": "vitest"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@agent-relay/config": "3.1.
|
|
41
|
-
"@agent-relay/trajectory": "3.1.
|
|
42
|
-
"@agent-relay/sdk": "3.1.
|
|
40
|
+
"@agent-relay/config": "3.1.10",
|
|
41
|
+
"@agent-relay/trajectory": "3.1.10",
|
|
42
|
+
"@agent-relay/sdk": "3.1.10"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^22.19.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/memory",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.10",
|
|
4
4
|
"description": "Semantic memory storage and retrieval system for agent-relay with multiple backend support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/hooks": "3.1.
|
|
25
|
+
"@agent-relay/hooks": "3.1.10"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|
|
@@ -301,6 +301,75 @@ describe('OpenClawGatewayClient', () => {
|
|
|
301
301
|
await client.connect();
|
|
302
302
|
await client.disconnect();
|
|
303
303
|
});
|
|
304
|
+
it('should fallback to alternate payload version on signature rejection', async () => {
|
|
305
|
+
let connectAttempts = 0;
|
|
306
|
+
server = new MockOpenClawServer({ sendChallenge: false });
|
|
307
|
+
const origWss = server.wss;
|
|
308
|
+
origWss.removeAllListeners('connection');
|
|
309
|
+
origWss.on('connection', (ws) => {
|
|
310
|
+
connectAttempts++;
|
|
311
|
+
// Send challenge
|
|
312
|
+
ws.send(JSON.stringify({
|
|
313
|
+
type: 'event',
|
|
314
|
+
event: 'connect.challenge',
|
|
315
|
+
payload: { nonce: `nonce-fallback-${connectAttempts}`, ts: Date.now() },
|
|
316
|
+
}));
|
|
317
|
+
ws.on('message', (data) => {
|
|
318
|
+
const msg = JSON.parse(data.toString());
|
|
319
|
+
if (msg.method === 'connect') {
|
|
320
|
+
if (connectAttempts === 1) {
|
|
321
|
+
// First attempt: reject with signature invalid
|
|
322
|
+
ws.send(JSON.stringify({
|
|
323
|
+
type: 'res',
|
|
324
|
+
id: 'connect-1',
|
|
325
|
+
ok: false,
|
|
326
|
+
error: { code: 'auth_failed', message: 'device signature invalid' },
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Second attempt (fallback): accept
|
|
331
|
+
ws.send(JSON.stringify({ type: 'res', id: 'connect-1', ok: true }));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
const client = new OpenClawGatewayClient('test-token', server.port);
|
|
337
|
+
await client.connect();
|
|
338
|
+
// Should have connected on the fallback attempt
|
|
339
|
+
expect(connectAttempts).toBe(2);
|
|
340
|
+
await client.disconnect();
|
|
341
|
+
});
|
|
342
|
+
it('should not retry fallback more than once', async () => {
|
|
343
|
+
let connectAttempts = 0;
|
|
344
|
+
server = new MockOpenClawServer({ sendChallenge: false });
|
|
345
|
+
const origWss = server.wss;
|
|
346
|
+
origWss.removeAllListeners('connection');
|
|
347
|
+
origWss.on('connection', (ws) => {
|
|
348
|
+
connectAttempts++;
|
|
349
|
+
ws.send(JSON.stringify({
|
|
350
|
+
type: 'event',
|
|
351
|
+
event: 'connect.challenge',
|
|
352
|
+
payload: { nonce: `nonce-nofallback-${connectAttempts}`, ts: Date.now() },
|
|
353
|
+
}));
|
|
354
|
+
ws.on('message', (data) => {
|
|
355
|
+
const msg = JSON.parse(data.toString());
|
|
356
|
+
if (msg.method === 'connect') {
|
|
357
|
+
// Always reject with signature invalid
|
|
358
|
+
ws.send(JSON.stringify({
|
|
359
|
+
type: 'res',
|
|
360
|
+
id: 'connect-1',
|
|
361
|
+
ok: false,
|
|
362
|
+
error: { code: 'auth_failed', message: 'device signature invalid' },
|
|
363
|
+
}));
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
const client = new OpenClawGatewayClient('test-token', server.port);
|
|
368
|
+
await expect(client.connect()).rejects.toThrow(/auth failed|signature invalid|closed before/i);
|
|
369
|
+
// Should have tried exactly 2 times: primary + one fallback
|
|
370
|
+
expect(connectAttempts).toBe(2);
|
|
371
|
+
await client.disconnect();
|
|
372
|
+
});
|
|
304
373
|
it('should silently ignore unrecognized event messages', async () => {
|
|
305
374
|
server = new MockOpenClawServer();
|
|
306
375
|
const origWss = server.wss;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.test.js","sourceRoot":"","sources":["../../src/__tests__/ws-client.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws-client.test.js","sourceRoot":"","sources":["../../src/__tests__/ws-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,13 @@ export declare class OpenClawGatewayClient {
|
|
|
45
45
|
private connectTimeout;
|
|
46
46
|
private pairingRejected;
|
|
47
47
|
private consecutiveFailures;
|
|
48
|
+
/** Payload version override for v3↔v2 fallback (null = use profile default). */
|
|
49
|
+
private payloadVersionOverride;
|
|
50
|
+
/** Whether a fallback attempt has already been tried this connection cycle. */
|
|
51
|
+
private fallbackAttempted;
|
|
52
|
+
/** Auth rejection counters for observability. */
|
|
53
|
+
private authRejectCount;
|
|
54
|
+
private authFallbackCount;
|
|
48
55
|
/** Default timeout for initial connection (30 seconds). */
|
|
49
56
|
private static readonly CONNECT_TIMEOUT_MS;
|
|
50
57
|
private static readonly MAX_CONSECUTIVE_FAILURES;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign } from 'node:crypto';
|
|
1
|
+
import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from 'node:crypto';
|
|
2
2
|
import { chmod, readFile, rename, writeFile, mkdir } from 'node:fs/promises';
|
|
3
3
|
import { createServer } from 'node:http';
|
|
4
4
|
import { join } from 'node:path';
|
|
@@ -17,9 +17,12 @@ const AUTH_PROFILES = {
|
|
|
17
17
|
signatureEncoding: 'base64url',
|
|
18
18
|
},
|
|
19
19
|
'clawdbot-v1': {
|
|
20
|
+
// Server (openclaw/openclaw device-identity.ts) accepts both PEM and raw-base64url
|
|
21
|
+
// public keys, and decodes signatures in both base64url and base64. Use base64url
|
|
22
|
+
// for consistency — matches the server's own signDevicePayload() output.
|
|
20
23
|
name: 'clawdbot-v1',
|
|
21
|
-
publicKeyFormat: '
|
|
22
|
-
signatureEncoding: '
|
|
24
|
+
publicKeyFormat: 'raw-base64url',
|
|
25
|
+
signatureEncoding: 'base64url',
|
|
23
26
|
},
|
|
24
27
|
};
|
|
25
28
|
/**
|
|
@@ -37,9 +40,12 @@ function resolveAuthProfile() {
|
|
|
37
40
|
if (envVal && AUTH_PROFILES[envVal]) {
|
|
38
41
|
return AUTH_PROFILES[envVal];
|
|
39
42
|
}
|
|
40
|
-
// 2. Variant detection via
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
// 2. Variant detection via filesystem probing — delegates to openclawHome()
|
|
44
|
+
// which checks valid parseable config files, not just directory existence.
|
|
45
|
+
// Strict suffix check avoids false positives from substring matching.
|
|
46
|
+
const home = openclawHome();
|
|
47
|
+
const homeSuffix = home.replace(/[/\\]+$/, '').split(/[/\\]/).pop() ?? '';
|
|
48
|
+
if (homeSuffix === '.clawdbot' || homeSuffix === 'clawdbot') {
|
|
43
49
|
return AUTH_PROFILES['clawdbot-v1'];
|
|
44
50
|
}
|
|
45
51
|
// 3. Default
|
|
@@ -144,29 +150,126 @@ async function loadOrCreateDeviceIdentity() {
|
|
|
144
150
|
}
|
|
145
151
|
return identity;
|
|
146
152
|
}
|
|
147
|
-
|
|
153
|
+
/** Hash helper for diagnostics (no secrets leaked — just truncated SHA-256). */
|
|
154
|
+
function shortHash(data) {
|
|
155
|
+
const buf = typeof data === 'string' ? Buffer.from(data, 'utf-8') : data;
|
|
156
|
+
return createHash('sha256').update(buf).digest('hex').slice(0, 16);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Canonicalization variants to try for debugging. Each produces a different
|
|
160
|
+
* pipe-delimited payload string. The server should match exactly one.
|
|
161
|
+
*/
|
|
162
|
+
function buildCanonicalVariants(device, params) {
|
|
163
|
+
const signedAtMs = String(params.signedAt);
|
|
164
|
+
const signedAtSec = String(Math.floor(params.signedAt / 1000));
|
|
165
|
+
const scopesCsv = params.scopes.join(',');
|
|
166
|
+
return [
|
|
167
|
+
// V0: current default order (v3|deviceId|clientId|clientMode|role|scopes|signedAtMs|token|nonce|platform|deviceFamily)
|
|
168
|
+
{
|
|
169
|
+
name: 'v3-default-ms',
|
|
170
|
+
payload: ['v3', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtMs, params.token || '', params.nonce, params.platform, params.deviceFamily].join('|'),
|
|
171
|
+
},
|
|
172
|
+
// V1: signedAt in seconds instead of milliseconds
|
|
173
|
+
{
|
|
174
|
+
name: 'v3-default-sec',
|
|
175
|
+
payload: ['v3', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtSec, params.token || '', params.nonce, params.platform, params.deviceFamily].join('|'),
|
|
176
|
+
},
|
|
177
|
+
// V2: no token in payload (token omitted entirely)
|
|
178
|
+
{
|
|
179
|
+
name: 'v3-no-token-ms',
|
|
180
|
+
payload: ['v3', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtMs, params.nonce, params.platform, params.deviceFamily].join('|'),
|
|
181
|
+
},
|
|
182
|
+
// V3: nonce before token (swapped positions)
|
|
183
|
+
{
|
|
184
|
+
name: 'v3-nonce-first-ms',
|
|
185
|
+
payload: ['v3', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtMs, params.nonce, params.token || '', params.platform, params.deviceFamily].join('|'),
|
|
186
|
+
},
|
|
187
|
+
// V4: fewer fields — just core identity + nonce + signedAt (minimal)
|
|
188
|
+
{
|
|
189
|
+
name: 'v3-minimal',
|
|
190
|
+
payload: ['v3', device.deviceId, signedAtMs, params.nonce].join('|'),
|
|
191
|
+
},
|
|
192
|
+
// V5: signedAt seconds + no token
|
|
193
|
+
{
|
|
194
|
+
name: 'v3-no-token-sec',
|
|
195
|
+
payload: ['v3', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtSec, params.nonce, params.platform, params.deviceFamily].join('|'),
|
|
196
|
+
},
|
|
197
|
+
// V6: v2 format (no platform/deviceFamily) — used by older gateway versions
|
|
198
|
+
{
|
|
199
|
+
name: 'v2-default-ms',
|
|
200
|
+
payload: ['v2', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtMs, params.token || '', params.nonce].join('|'),
|
|
201
|
+
},
|
|
202
|
+
// V7: v2 with signedAt in seconds
|
|
203
|
+
{
|
|
204
|
+
name: 'v2-default-sec',
|
|
205
|
+
payload: ['v2', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtSec, params.token || '', params.nonce].join('|'),
|
|
206
|
+
},
|
|
207
|
+
// V8: v2 without token
|
|
208
|
+
{
|
|
209
|
+
name: 'v2-no-token-ms',
|
|
210
|
+
payload: ['v2', device.deviceId, params.clientId, params.clientMode, params.role, scopesCsv, signedAtMs, params.nonce].join('|'),
|
|
211
|
+
},
|
|
212
|
+
];
|
|
213
|
+
}
|
|
214
|
+
function signConnectPayload(device, params, versionOverride) {
|
|
148
215
|
const profile = resolveAuthProfile();
|
|
149
|
-
//
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const
|
|
166
|
-
|
|
216
|
+
// Build canonicalization variants for diagnostics
|
|
217
|
+
const variants = buildCanonicalVariants(device, params);
|
|
218
|
+
// Select primary payload version:
|
|
219
|
+
// 1. If versionOverride is set (from fallback), use that directly
|
|
220
|
+
// 2. clawdbot-v1 defaults to v2 (older gateway compat)
|
|
221
|
+
// 3. default profile uses v3
|
|
222
|
+
let primaryName;
|
|
223
|
+
if (versionOverride === 'v2') {
|
|
224
|
+
primaryName = 'v2-default-ms';
|
|
225
|
+
}
|
|
226
|
+
else if (versionOverride === 'v3') {
|
|
227
|
+
primaryName = 'v3-default-ms';
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
primaryName = profile.name === 'clawdbot-v1' ? 'v2-default-ms' : 'v3-default-ms';
|
|
231
|
+
}
|
|
232
|
+
const primary = variants.find(v => v.name === primaryName) ?? variants[0];
|
|
233
|
+
const payloadBytes = Buffer.from(primary.payload, 'utf-8');
|
|
234
|
+
const isDebug = process.env.RELAY_LOG_LEVEL === 'DEBUG' || process.env.OPENCLAW_WS_DEBUG === '1';
|
|
235
|
+
// Concise production log — one line with essential info
|
|
236
|
+
console.log(`[ws-auth] profile=${profile.name} payload=${primary.name} device=${device.deviceId.slice(0, 12)}...${versionOverride ? ` override=${versionOverride}` : ''}`);
|
|
237
|
+
// Verbose debug logging — field hashes and canonicalization matrix
|
|
238
|
+
if (isDebug) {
|
|
239
|
+
console.log(`[ws-auth-debug] signedAt=${params.signedAt}ms nonce=${shortHash(params.nonce)} keyFormat=${profile.publicKeyFormat} sigEncoding=${profile.signatureEncoding}`);
|
|
240
|
+
console.log(`[ws-auth-debug] field hashes: deviceId=${shortHash(device.deviceId)} clientId=${shortHash(params.clientId)} role=${shortHash(params.role)} scopes=${shortHash(params.scopes.join(','))} token=${shortHash(params.token || '')} nonce=${shortHash(params.nonce)}`);
|
|
241
|
+
console.log('[ws-auth-debug] canonicalization matrix:');
|
|
242
|
+
for (const v of variants) {
|
|
243
|
+
console.log(` ${v.name}: hash=${shortHash(v.payload)}`);
|
|
244
|
+
}
|
|
245
|
+
console.log(`[ws-auth-debug] payloadHash=${shortHash(primary.payload)}`);
|
|
246
|
+
}
|
|
167
247
|
// Ed25519 sign — no hash algorithm needed (null), it's built into Ed25519
|
|
168
248
|
const signature = sign(null, payloadBytes, device.privateKeyObj);
|
|
169
|
-
|
|
249
|
+
const encoded = Buffer.from(signature).toString(profile.signatureEncoding);
|
|
250
|
+
// Self-verification (debug only): confirm our signature is valid locally.
|
|
251
|
+
if (isDebug) {
|
|
252
|
+
try {
|
|
253
|
+
// Derive public key from private key (same as server would use from our publicKey field)
|
|
254
|
+
const pubKey = createPublicKey(device.privateKeyObj);
|
|
255
|
+
const selfVerifyRaw = verify(null, payloadBytes, pubKey, signature);
|
|
256
|
+
// Also verify the round-trip: decode our encoded signature like the server would
|
|
257
|
+
const decodedSig = Buffer.from(encoded, profile.signatureEncoding === 'base64url' ? 'base64url' : 'base64');
|
|
258
|
+
const selfVerifyEncoded = verify(null, payloadBytes, pubKey, decodedSig);
|
|
259
|
+
// Verify deviceId matches public key
|
|
260
|
+
const rawPubBytes = pubKey.export({ type: 'spki', format: 'der' }).subarray(12);
|
|
261
|
+
const derivedDeviceId = createHash('sha256').update(rawPubBytes).digest('hex');
|
|
262
|
+
const deviceIdMatch = derivedDeviceId === device.deviceId;
|
|
263
|
+
console.log(`[ws-auth-debug] self-verify: raw=${selfVerifyRaw} encoded=${selfVerifyEncoded} deviceIdMatch=${deviceIdMatch} derivedId=${derivedDeviceId.slice(0, 16)}...`);
|
|
264
|
+
if (!deviceIdMatch) {
|
|
265
|
+
console.error(`[ws-auth-debug] DEVICE ID MISMATCH: derived=${derivedDeviceId} sent=${device.deviceId}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
console.error(`[ws-auth-debug] self-verify error: ${err instanceof Error ? err.message : String(err)}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return encoded;
|
|
170
273
|
}
|
|
171
274
|
/** @internal */
|
|
172
275
|
export class OpenClawGatewayClient {
|
|
@@ -185,6 +288,13 @@ export class OpenClawGatewayClient {
|
|
|
185
288
|
connectTimeout = null;
|
|
186
289
|
pairingRejected = false;
|
|
187
290
|
consecutiveFailures = 0;
|
|
291
|
+
/** Payload version override for v3↔v2 fallback (null = use profile default). */
|
|
292
|
+
payloadVersionOverride = null;
|
|
293
|
+
/** Whether a fallback attempt has already been tried this connection cycle. */
|
|
294
|
+
fallbackAttempted = false;
|
|
295
|
+
/** Auth rejection counters for observability. */
|
|
296
|
+
authRejectCount = 0;
|
|
297
|
+
authFallbackCount = 0;
|
|
188
298
|
/** Default timeout for initial connection (30 seconds). */
|
|
189
299
|
static CONNECT_TIMEOUT_MS = 30_000;
|
|
190
300
|
static MAX_CONSECUTIVE_FAILURES = 5;
|
|
@@ -213,6 +323,9 @@ export class OpenClawGatewayClient {
|
|
|
213
323
|
// Explicit connect() clears pairing rejection so users can retry after fixing their token
|
|
214
324
|
this.pairingRejected = false;
|
|
215
325
|
this.stopped = false;
|
|
326
|
+
// Reset fallback state for fresh connection attempts
|
|
327
|
+
this.payloadVersionOverride = null;
|
|
328
|
+
this.fallbackAttempted = false;
|
|
216
329
|
// Cancel any pending reconnect timer to prevent orphaned WebSocket connections
|
|
217
330
|
if (this.reconnectTimer) {
|
|
218
331
|
clearTimeout(this.reconnectTimer);
|
|
@@ -244,21 +357,27 @@ export class OpenClawGatewayClient {
|
|
|
244
357
|
doConnect() {
|
|
245
358
|
if (this.stopped)
|
|
246
359
|
return;
|
|
360
|
+
let ws;
|
|
247
361
|
try {
|
|
248
|
-
|
|
362
|
+
ws = new WebSocket(`ws://127.0.0.1:${this.port}`);
|
|
249
363
|
}
|
|
250
364
|
catch (err) {
|
|
251
365
|
console.warn(`[openclaw-ws] Connection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
252
366
|
this.scheduleReconnect();
|
|
253
367
|
return;
|
|
254
368
|
}
|
|
255
|
-
this.ws
|
|
369
|
+
this.ws = ws;
|
|
370
|
+
ws.on('open', () => {
|
|
256
371
|
console.log('[openclaw-ws] Connected to OpenClaw gateway');
|
|
257
372
|
});
|
|
258
|
-
|
|
373
|
+
ws.on('message', (data) => {
|
|
259
374
|
this.handleMessage(data.toString());
|
|
260
375
|
});
|
|
261
|
-
|
|
376
|
+
ws.on('close', (code, reason) => {
|
|
377
|
+
// Guard: ignore close events from superseded WebSocket instances.
|
|
378
|
+
// During v3↔v2 fallback, the old WS is replaced before its close fires.
|
|
379
|
+
if (this.ws !== ws)
|
|
380
|
+
return;
|
|
262
381
|
const reasonStr = reason.toString();
|
|
263
382
|
console.warn(`[openclaw-ws] Disconnected: ${code} ${reasonStr}`);
|
|
264
383
|
const wasAuthenticated = this.authenticated;
|
|
@@ -288,7 +407,10 @@ export class OpenClawGatewayClient {
|
|
|
288
407
|
this.scheduleReconnect();
|
|
289
408
|
}
|
|
290
409
|
});
|
|
291
|
-
|
|
410
|
+
ws.on('error', (err) => {
|
|
411
|
+
// Guard: ignore error events from superseded WebSocket instances.
|
|
412
|
+
if (this.ws !== ws)
|
|
413
|
+
return;
|
|
292
414
|
console.warn(`[openclaw-ws] Error: ${err.message}`);
|
|
293
415
|
// If we weren't authenticated yet, reject the connect promise
|
|
294
416
|
if (!this.authenticated && this.connectReject) {
|
|
@@ -311,6 +433,10 @@ export class OpenClawGatewayClient {
|
|
|
311
433
|
if (msg.type === 'event' && msg.event === 'connect.challenge') {
|
|
312
434
|
const payload = msg.payload;
|
|
313
435
|
console.log('[openclaw-ws] Received connect.challenge, signing...');
|
|
436
|
+
// Log raw challenge payload for debugging canonicalization issues
|
|
437
|
+
if (process.env.RELAY_LOG_LEVEL === 'DEBUG' || process.env.OPENCLAW_WS_DEBUG === '1') {
|
|
438
|
+
console.log(`[ws-auth-debug] challenge payload: ${JSON.stringify(payload)}`);
|
|
439
|
+
}
|
|
314
440
|
const signedAt = Date.now();
|
|
315
441
|
const clientId = 'cli';
|
|
316
442
|
const clientMode = 'cli';
|
|
@@ -328,7 +454,7 @@ export class OpenClawGatewayClient {
|
|
|
328
454
|
signedAt,
|
|
329
455
|
token: this.token,
|
|
330
456
|
nonce: payload.nonce,
|
|
331
|
-
});
|
|
457
|
+
}, this.payloadVersionOverride);
|
|
332
458
|
// Select public key format based on resolved auth profile.
|
|
333
459
|
const profile = resolveAuthProfile();
|
|
334
460
|
const publicKeyField = profile.publicKeyFormat === 'spki-pem' && this.device.publicKeyPem
|
|
@@ -373,9 +499,11 @@ export class OpenClawGatewayClient {
|
|
|
373
499
|
}
|
|
374
500
|
// Handle connect response
|
|
375
501
|
if (msg.type === 'res' && msg.id === 'connect-1') {
|
|
376
|
-
this.clearConnectTimeout();
|
|
377
502
|
if (msg.ok) {
|
|
378
|
-
|
|
503
|
+
this.clearConnectTimeout();
|
|
504
|
+
const versionUsed = this.payloadVersionOverride
|
|
505
|
+
?? (resolveAuthProfile().name === 'clawdbot-v1' ? 'v2' : 'v3');
|
|
506
|
+
console.log(`[openclaw-ws] Authenticated successfully (payload=${versionUsed}${this.fallbackAttempted ? ', via fallback' : ''})`);
|
|
379
507
|
this.authenticated = true;
|
|
380
508
|
this.consecutiveFailures = 0;
|
|
381
509
|
this.connectResolve?.();
|
|
@@ -385,7 +513,9 @@ export class OpenClawGatewayClient {
|
|
|
385
513
|
else {
|
|
386
514
|
const errStr = msg.error ? JSON.stringify(msg.error) : 'Authentication rejected';
|
|
387
515
|
const isPairing = /pairing.required|not.paired/i.test(errStr);
|
|
516
|
+
const isSignatureInvalid = /signature.invalid|device.signature|invalid.signature/i.test(errStr);
|
|
388
517
|
if (isPairing) {
|
|
518
|
+
this.clearConnectTimeout();
|
|
389
519
|
const errObj = msg.error;
|
|
390
520
|
const requestId = errObj?.requestId ?? errObj?.request_id ?? '';
|
|
391
521
|
console.error('[openclaw-ws] Pairing rejected — device is not paired with the OpenClaw gateway.');
|
|
@@ -399,8 +529,33 @@ export class OpenClawGatewayClient {
|
|
|
399
529
|
console.error(`[openclaw-ws] Ensure OPENCLAW_GATEWAY_TOKEN matches ${configHint} gateway.auth.token`);
|
|
400
530
|
this.pairingRejected = true;
|
|
401
531
|
}
|
|
532
|
+
else if (isSignatureInvalid && !this.fallbackAttempted) {
|
|
533
|
+
// Signature rejected — try the alternate payload version once.
|
|
534
|
+
// Do NOT clear connect timeout — it protects the fallback attempt too.
|
|
535
|
+
this.authRejectCount++;
|
|
536
|
+
this.authFallbackCount++;
|
|
537
|
+
const profile = resolveAuthProfile();
|
|
538
|
+
const currentVersion = this.payloadVersionOverride
|
|
539
|
+
?? (profile.name === 'clawdbot-v1' ? 'v2' : 'v3');
|
|
540
|
+
const fallbackVersion = currentVersion === 'v2' ? 'v3' : 'v2';
|
|
541
|
+
console.warn(`[ws-auth] Signature rejected with ${currentVersion} payload — retrying with ${fallbackVersion} fallback (rejects=${this.authRejectCount} fallbacks=${this.authFallbackCount})`);
|
|
542
|
+
this.payloadVersionOverride = fallbackVersion;
|
|
543
|
+
this.fallbackAttempted = true;
|
|
544
|
+
// Close current WS and reconnect with the alternate payload.
|
|
545
|
+
// Setting this.ws = null ensures the old WS's close/error handlers
|
|
546
|
+
// no-op via the `this.ws !== ws` guard in doConnect().
|
|
547
|
+
try {
|
|
548
|
+
this.ws?.close();
|
|
549
|
+
}
|
|
550
|
+
catch { }
|
|
551
|
+
this.ws = null;
|
|
552
|
+
setTimeout(() => this.doConnect(), 0);
|
|
553
|
+
return; // Don't reject the connect promise yet — fallback attempt in progress
|
|
554
|
+
}
|
|
402
555
|
else {
|
|
403
|
-
|
|
556
|
+
this.clearConnectTimeout();
|
|
557
|
+
this.authRejectCount++;
|
|
558
|
+
console.warn(`[openclaw-ws] Auth rejected (rejects=${this.authRejectCount}): ${errStr}`);
|
|
404
559
|
}
|
|
405
560
|
this.connectReject?.(new Error(`OpenClaw gateway auth failed: ${errStr}`));
|
|
406
561
|
this.connectReject = null;
|
|
@@ -432,6 +587,8 @@ export class OpenClawGatewayClient {
|
|
|
432
587
|
}
|
|
433
588
|
/** Send a chat.send RPC. Returns true if accepted. */
|
|
434
589
|
async sendChatMessage(text, idempotencyKey) {
|
|
590
|
+
if (this.stopped)
|
|
591
|
+
return false;
|
|
435
592
|
if (!this.authenticated || !this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
436
593
|
// Try to reconnect
|
|
437
594
|
try {
|