@opengoat/core 2026.2.15 → 2026.2.17

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 (87) hide show
  1. package/dist/core/agents/application/agent.service.d.ts +12 -3
  2. package/dist/core/agents/application/agent.service.js +98 -48
  3. package/dist/core/agents/application/agent.service.js.map +1 -1
  4. package/dist/core/boards/application/board.service.d.ts +2 -0
  5. package/dist/core/boards/application/board.service.js +36 -2
  6. package/dist/core/boards/application/board.service.js.map +1 -1
  7. package/dist/core/bootstrap/application/bootstrap.service.js +4 -1
  8. package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -1
  9. package/dist/core/opengoat/application/opengoat.service.d.ts +5 -3
  10. package/dist/core/opengoat/application/opengoat.service.helpers.d.ts +12 -2
  11. package/dist/core/opengoat/application/opengoat.service.helpers.js +86 -8
  12. package/dist/core/opengoat/application/opengoat.service.helpers.js.map +1 -1
  13. package/dist/core/opengoat/application/opengoat.service.js +238 -89
  14. package/dist/core/opengoat/application/opengoat.service.js.map +1 -1
  15. package/dist/core/orchestration/application/orchestration.service.d.ts +1 -0
  16. package/dist/core/orchestration/application/orchestration.service.js +42 -29
  17. package/dist/core/orchestration/application/orchestration.service.js.map +1 -1
  18. package/dist/core/providers/application/provider.service.d.ts +34 -4
  19. package/dist/core/providers/application/provider.service.js +799 -82
  20. package/dist/core/providers/application/provider.service.js.map +1 -1
  21. package/dist/core/providers/index.d.ts +1 -1
  22. package/dist/core/providers/index.js.map +1 -1
  23. package/dist/core/providers/loader.js +4 -2
  24. package/dist/core/providers/loader.js.map +1 -1
  25. package/dist/core/providers/openclaw-gateway-rpc.d.ts +20 -0
  26. package/dist/core/providers/openclaw-gateway-rpc.js +629 -0
  27. package/dist/core/providers/openclaw-gateway-rpc.js.map +1 -0
  28. package/dist/core/providers/provider-module.d.ts +11 -0
  29. package/dist/core/providers/provider-module.js +8 -1
  30. package/dist/core/providers/provider-module.js.map +1 -1
  31. package/dist/core/providers/providers/claude-code/index.d.ts +4 -0
  32. package/dist/core/providers/providers/claude-code/index.js +32 -0
  33. package/dist/core/providers/providers/claude-code/index.js.map +1 -0
  34. package/dist/core/providers/providers/claude-code/provider.d.ts +13 -0
  35. package/dist/core/providers/providers/claude-code/provider.js +152 -0
  36. package/dist/core/providers/providers/claude-code/provider.js.map +1 -0
  37. package/dist/core/providers/providers/codex/index.d.ts +4 -0
  38. package/dist/core/providers/providers/codex/index.js +32 -0
  39. package/dist/core/providers/providers/codex/index.js.map +1 -0
  40. package/dist/core/providers/providers/codex/provider.d.ts +12 -0
  41. package/dist/core/providers/providers/codex/provider.js +156 -0
  42. package/dist/core/providers/providers/codex/provider.js.map +1 -0
  43. package/dist/core/providers/providers/cursor/index.d.ts +4 -0
  44. package/dist/core/providers/providers/cursor/index.js +32 -0
  45. package/dist/core/providers/providers/cursor/index.js.map +1 -0
  46. package/dist/core/providers/providers/cursor/provider.d.ts +12 -0
  47. package/dist/core/providers/providers/cursor/provider.js +161 -0
  48. package/dist/core/providers/providers/cursor/provider.js.map +1 -0
  49. package/dist/core/providers/providers/gemini-cli/index.d.ts +4 -0
  50. package/dist/core/providers/providers/gemini-cli/index.js +36 -0
  51. package/dist/core/providers/providers/gemini-cli/index.js.map +1 -0
  52. package/dist/core/providers/providers/gemini-cli/provider.d.ts +11 -0
  53. package/dist/core/providers/providers/gemini-cli/provider.js +122 -0
  54. package/dist/core/providers/providers/gemini-cli/provider.js.map +1 -0
  55. package/dist/core/providers/providers/openclaw/index.js +8 -0
  56. package/dist/core/providers/providers/openclaw/index.js.map +1 -1
  57. package/dist/core/providers/providers/openclaw/provider.js +1 -0
  58. package/dist/core/providers/providers/openclaw/provider.js.map +1 -1
  59. package/dist/core/providers/providers/opencode/index.d.ts +4 -0
  60. package/dist/core/providers/providers/opencode/index.js +27 -0
  61. package/dist/core/providers/providers/opencode/index.js.map +1 -0
  62. package/dist/core/providers/providers/opencode/provider.d.ts +12 -0
  63. package/dist/core/providers/providers/opencode/provider.js +130 -0
  64. package/dist/core/providers/providers/opencode/provider.js.map +1 -0
  65. package/dist/core/providers/providers/registry.d.ts +2 -0
  66. package/dist/core/providers/providers/registry.js +17 -0
  67. package/dist/core/providers/providers/registry.js.map +1 -0
  68. package/dist/core/providers/registry.d.ts +2 -1
  69. package/dist/core/providers/registry.js +40 -0
  70. package/dist/core/providers/registry.js.map +1 -1
  71. package/dist/core/providers/types.d.ts +1 -0
  72. package/dist/core/scenarios/application/scenario-runner.service.js +2 -1
  73. package/dist/core/scenarios/application/scenario-runner.service.js.map +1 -1
  74. package/dist/core/sessions/application/session.service.d.ts +0 -2
  75. package/dist/core/sessions/application/session.service.js +10 -73
  76. package/dist/core/sessions/application/session.service.js.map +1 -1
  77. package/dist/core/sessions/domain/session.d.ts +0 -3
  78. package/dist/core/sessions/domain/session.js.map +1 -1
  79. package/dist/core/skills/application/skill.service.js +4 -1
  80. package/dist/core/skills/application/skill.service.js.map +1 -1
  81. package/dist/core/templates/assets/ceo/BOOTSTRAP.md +3 -3
  82. package/dist/core/templates/assets/ceo/ROLE.md +3 -2
  83. package/dist/core/templates/assets/skills/og-boards/SKILL.md +65 -0
  84. package/dist/core/templates/default-templates.d.ts +1 -2
  85. package/dist/core/templates/default-templates.js +7 -7
  86. package/dist/core/templates/default-templates.js.map +1 -1
  87. package/package.json +3 -2
@@ -0,0 +1,629 @@
1
+ import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, randomUUID, sign } from "node:crypto";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve as resolvePath } from "node:path";
5
+ import { WebSocket } from "ws";
6
+ const DEFAULT_GATEWAY_PORT = 18_789;
7
+ const DEFAULT_GATEWAY_URL = `ws://127.0.0.1:${DEFAULT_GATEWAY_PORT}`;
8
+ const DEFAULT_TIMEOUT_MS = 10_000;
9
+ const CONNECT_DELAY_MS = 750;
10
+ const AGENT_CALL_TIMEOUT_MS = 630_000;
11
+ const PROTOCOL_VERSION = 3;
12
+ const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
13
+ export async function callOpenClawGatewayRpc(params) {
14
+ const method = params.method.trim();
15
+ if (!method) {
16
+ throw new Error("Gateway method is required.");
17
+ }
18
+ const connection = resolveGatewayConnectionFromEnv(params.env);
19
+ const timeoutMs = sanitizeTimeout(params.options?.timeoutMs ?? DEFAULT_TIMEOUT_MS);
20
+ const expectFinal = params.options?.expectFinal === true;
21
+ return new Promise((resolve, reject) => {
22
+ const socket = new WebSocket(connection.url, {
23
+ maxPayload: 25 * 1024 * 1024,
24
+ });
25
+ let settled = false;
26
+ let closed = false;
27
+ let connectRequestId;
28
+ let requestId;
29
+ let connectSent = false;
30
+ let connectChallengeNonce;
31
+ const identity = loadOrCreateDeviceIdentity(connection.stateDir);
32
+ const role = "operator";
33
+ const scopes = ["operator.admin", "operator.approvals", "operator.pairing"];
34
+ const storedDeviceToken = loadDeviceAuthToken({
35
+ stateDir: connection.stateDir,
36
+ deviceId: identity.deviceId,
37
+ role,
38
+ });
39
+ const authToken = connection.token ?? storedDeviceToken;
40
+ const timer = setTimeout(() => {
41
+ stop(new Error(`OpenClaw gateway timeout after ${timeoutMs}ms.`));
42
+ }, timeoutMs);
43
+ const stop = (error, payload) => {
44
+ if (settled) {
45
+ return;
46
+ }
47
+ settled = true;
48
+ clearTimeout(timer);
49
+ if (!closed) {
50
+ closed = true;
51
+ socket.close();
52
+ }
53
+ if (error) {
54
+ reject(error);
55
+ return;
56
+ }
57
+ resolve(payload);
58
+ };
59
+ const sendFrame = (frame) => {
60
+ if (socket.readyState !== WebSocket.OPEN) {
61
+ stop(new Error("OpenClaw gateway socket is not open."));
62
+ return;
63
+ }
64
+ socket.send(JSON.stringify(frame));
65
+ };
66
+ const sendConnect = () => {
67
+ if (settled || connectSent) {
68
+ return;
69
+ }
70
+ connectSent = true;
71
+ connectRequestId = randomUUID();
72
+ const signedAtMs = Date.now();
73
+ const payload = buildDeviceAuthPayload({
74
+ deviceId: identity.deviceId,
75
+ clientId: "gateway-client",
76
+ clientMode: "backend",
77
+ role,
78
+ scopes,
79
+ signedAtMs,
80
+ token: authToken ?? null,
81
+ nonce: connectChallengeNonce,
82
+ });
83
+ const signature = signDevicePayload(identity.privateKeyPem, payload);
84
+ const connectFrame = {
85
+ type: "req",
86
+ id: connectRequestId,
87
+ method: "connect",
88
+ params: buildConnectParams({
89
+ connection,
90
+ authToken,
91
+ role,
92
+ scopes,
93
+ signedAtMs,
94
+ nonce: connectChallengeNonce,
95
+ deviceId: identity.deviceId,
96
+ publicKey: publicKeyRawBase64UrlFromPem(identity.publicKeyPem),
97
+ signature,
98
+ }),
99
+ };
100
+ sendFrame(connectFrame);
101
+ };
102
+ const sendMethod = () => {
103
+ if (settled) {
104
+ return;
105
+ }
106
+ requestId = randomUUID();
107
+ const methodFrame = {
108
+ type: "req",
109
+ id: requestId,
110
+ method,
111
+ params: params.params ?? {},
112
+ };
113
+ sendFrame(methodFrame);
114
+ };
115
+ socket.on("open", () => {
116
+ setTimeout(() => {
117
+ sendConnect();
118
+ }, CONNECT_DELAY_MS);
119
+ });
120
+ socket.on("message", (raw) => {
121
+ const frame = parseFrame(raw.toString());
122
+ if (!frame || settled) {
123
+ return;
124
+ }
125
+ if (frame.type === "event") {
126
+ if (frame.event === "connect.challenge") {
127
+ const payload = asRecord(frame.payload);
128
+ const nonce = payload.nonce;
129
+ if (typeof nonce === "string" && nonce.trim().length > 0) {
130
+ connectChallengeNonce = nonce.trim();
131
+ if (!connectSent) {
132
+ sendConnect();
133
+ }
134
+ }
135
+ }
136
+ return;
137
+ }
138
+ const frameId = typeof frame.id === "string" ? frame.id : "";
139
+ if (!frameId) {
140
+ return;
141
+ }
142
+ if (connectRequestId && frameId === connectRequestId) {
143
+ if (frame.ok !== true) {
144
+ if (isUnauthorizedDeviceToken(frame.error)) {
145
+ clearDeviceAuthToken({
146
+ stateDir: connection.stateDir,
147
+ deviceId: identity.deviceId,
148
+ role,
149
+ });
150
+ }
151
+ stop(new Error(resolveGatewayError(frame, "OpenClaw gateway connect failed.")));
152
+ return;
153
+ }
154
+ const auth = asRecord(asRecord(frame.payload).auth);
155
+ if (typeof auth.deviceToken === "string" && auth.deviceToken.trim().length > 0) {
156
+ storeDeviceAuthToken({
157
+ stateDir: connection.stateDir,
158
+ deviceId: identity.deviceId,
159
+ role: typeof auth.role === "string" && auth.role.trim().length > 0 ? auth.role : role,
160
+ token: auth.deviceToken.trim(),
161
+ scopes: Array.isArray(auth.scopes) ? auth.scopes.filter((entry) => typeof entry === "string") : scopes,
162
+ });
163
+ }
164
+ sendMethod();
165
+ return;
166
+ }
167
+ if (requestId && frameId === requestId) {
168
+ if (frame.ok !== true) {
169
+ stop(new Error(resolveGatewayError(frame, `OpenClaw gateway "${method}" failed.`)));
170
+ return;
171
+ }
172
+ if (expectFinal &&
173
+ typeof asRecord(frame.payload).status === "string" &&
174
+ asRecord(frame.payload).status === "accepted") {
175
+ return;
176
+ }
177
+ stop(undefined, frame.payload);
178
+ }
179
+ });
180
+ socket.on("error", (error) => {
181
+ stop(error instanceof Error ? error : new Error(String(error)));
182
+ });
183
+ socket.on("close", (_code, reason) => {
184
+ if (!settled) {
185
+ const text = reason.toString().trim();
186
+ stop(new Error(`OpenClaw gateway connection closed${text ? `: ${text}` : "."}`));
187
+ return;
188
+ }
189
+ closed = true;
190
+ });
191
+ });
192
+ }
193
+ export function resolveGatewayConnectionFromEnv(env) {
194
+ const stateDir = resolveStateDir(env);
195
+ const config = readOpenClawConfig(env, stateDir);
196
+ const parsedArgs = parseOpenClawArguments(env.OPENCLAW_ARGUMENTS ?? "");
197
+ const gateway = asRecord(config.gateway);
198
+ const remote = asRecord(gateway.remote);
199
+ const mode = typeof gateway.mode === "string" ? gateway.mode.trim().toLowerCase() : "";
200
+ const localPort = resolveGatewayPort(gateway.port);
201
+ const localScheme = gateway.tls && asRecord(gateway.tls).enabled === true ? "wss" : "ws";
202
+ const rawUrl = env.OPENCLAW_GATEWAY_URL?.trim() ||
203
+ parsedArgs.remoteUrl ||
204
+ (mode === "remote" && typeof remote.url === "string" && remote.url.trim().length > 0
205
+ ? remote.url.trim()
206
+ : undefined) ||
207
+ `${localScheme}://127.0.0.1:${localPort}` ||
208
+ DEFAULT_GATEWAY_URL;
209
+ const url = normalizeGatewayUrl(rawUrl);
210
+ const gatewayAuth = asRecord(gateway.auth);
211
+ const token = env.OPENCLAW_GATEWAY_TOKEN?.trim() ||
212
+ parsedArgs.token ||
213
+ (mode === "remote" && typeof remote.token === "string" && remote.token.trim().length > 0
214
+ ? remote.token.trim()
215
+ : undefined) ||
216
+ (typeof gatewayAuth.token === "string" && gatewayAuth.token.trim().length > 0
217
+ ? gatewayAuth.token.trim()
218
+ : undefined) ||
219
+ env.OPENCLAW_GATEWAY_PASSWORD?.trim() ||
220
+ undefined;
221
+ const password = env.OPENCLAW_GATEWAY_PASSWORD?.trim() ||
222
+ parsedArgs.password ||
223
+ (mode === "remote" && typeof remote.password === "string" && remote.password.trim().length > 0
224
+ ? remote.password.trim()
225
+ : undefined) ||
226
+ (typeof gatewayAuth.password === "string" && gatewayAuth.password.trim().length > 0
227
+ ? gatewayAuth.password.trim()
228
+ : undefined) ||
229
+ undefined;
230
+ return {
231
+ url,
232
+ token,
233
+ password,
234
+ stateDir,
235
+ };
236
+ }
237
+ export function resolveGatewayAgentCallTimeoutMs(timeoutMs) {
238
+ return sanitizeTimeout(timeoutMs ?? AGENT_CALL_TIMEOUT_MS);
239
+ }
240
+ function buildConnectParams(params) {
241
+ const result = {
242
+ minProtocol: PROTOCOL_VERSION,
243
+ maxProtocol: PROTOCOL_VERSION,
244
+ client: {
245
+ id: "gateway-client",
246
+ displayName: "OpenGoat",
247
+ version: "opengoat",
248
+ platform: process.platform,
249
+ mode: "backend",
250
+ instanceId: randomUUID(),
251
+ },
252
+ caps: [],
253
+ role: params.role,
254
+ scopes: params.scopes,
255
+ device: {
256
+ id: params.deviceId,
257
+ publicKey: params.publicKey,
258
+ signature: params.signature,
259
+ signedAt: params.signedAtMs,
260
+ nonce: params.nonce,
261
+ },
262
+ };
263
+ if (params.authToken || params.connection.password) {
264
+ result.auth = {
265
+ ...(params.authToken ? { token: params.authToken } : {}),
266
+ ...(params.connection.password ? { password: params.connection.password } : {}),
267
+ };
268
+ }
269
+ return result;
270
+ }
271
+ function parseOpenClawArguments(raw) {
272
+ const parts = raw
273
+ .split(" ")
274
+ .map((part) => part.trim())
275
+ .filter((part) => part.length > 0);
276
+ let remoteUrl;
277
+ let token;
278
+ let password;
279
+ for (let index = 0; index < parts.length; index += 1) {
280
+ const tokenValue = parts[index];
281
+ const next = parts[index + 1];
282
+ if (!tokenValue) {
283
+ continue;
284
+ }
285
+ if (tokenValue === "--remote" && next) {
286
+ remoteUrl = next;
287
+ index += 1;
288
+ continue;
289
+ }
290
+ if (tokenValue === "--token" && next) {
291
+ token = next;
292
+ index += 1;
293
+ continue;
294
+ }
295
+ if (tokenValue === "--password" && next) {
296
+ password = next;
297
+ index += 1;
298
+ continue;
299
+ }
300
+ }
301
+ return {
302
+ remoteUrl: remoteUrl?.trim() || undefined,
303
+ token: token?.trim() || undefined,
304
+ password: password?.trim() || undefined,
305
+ };
306
+ }
307
+ function normalizeGatewayUrl(raw) {
308
+ const trimmed = raw.trim();
309
+ if (trimmed.startsWith("http://")) {
310
+ return `ws://${trimmed.slice("http://".length)}`;
311
+ }
312
+ if (trimmed.startsWith("https://")) {
313
+ return `wss://${trimmed.slice("https://".length)}`;
314
+ }
315
+ return trimmed;
316
+ }
317
+ function resolveGatewayError(frame, fallback) {
318
+ const record = asRecord(frame.error);
319
+ const message = record.message;
320
+ if (typeof message === "string" && message.trim().length > 0) {
321
+ return message.trim();
322
+ }
323
+ return fallback;
324
+ }
325
+ function isUnauthorizedDeviceToken(errorPayload) {
326
+ const message = asRecord(errorPayload).message;
327
+ if (typeof message !== "string") {
328
+ return false;
329
+ }
330
+ const normalized = message.toLowerCase();
331
+ return normalized.includes("invalid device token") || normalized.includes("device token mismatch");
332
+ }
333
+ function parseFrame(raw) {
334
+ try {
335
+ const parsed = JSON.parse(raw);
336
+ const record = asRecord(parsed);
337
+ const type = record.type;
338
+ if (type === "event" || type === "res") {
339
+ return {
340
+ ...record,
341
+ type,
342
+ };
343
+ }
344
+ }
345
+ catch {
346
+ // Ignore malformed frames.
347
+ }
348
+ return undefined;
349
+ }
350
+ function asRecord(value) {
351
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
352
+ return {};
353
+ }
354
+ return value;
355
+ }
356
+ function resolveGatewayPort(value) {
357
+ const raw = typeof value === "number"
358
+ ? value
359
+ : typeof value === "string" && value.trim().length > 0
360
+ ? Number(value.trim())
361
+ : NaN;
362
+ if (!Number.isFinite(raw) || raw <= 0) {
363
+ return DEFAULT_GATEWAY_PORT;
364
+ }
365
+ return Math.floor(raw);
366
+ }
367
+ function resolveStateDir(env) {
368
+ const raw = env.OPENCLAW_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim() || "";
369
+ if (raw.length > 0) {
370
+ return resolveUserPath(raw, env);
371
+ }
372
+ return resolvePath(homedir(), ".openclaw");
373
+ }
374
+ function resolveConfigPath(env, stateDir) {
375
+ const raw = env.OPENCLAW_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim() || "";
376
+ if (raw.length > 0) {
377
+ return resolveUserPath(raw, env);
378
+ }
379
+ return join(stateDir, "openclaw.json");
380
+ }
381
+ function resolveUserPath(input, env) {
382
+ const trimmed = input.trim();
383
+ if (!trimmed.startsWith("~")) {
384
+ return resolvePath(trimmed);
385
+ }
386
+ if (trimmed === "~") {
387
+ return homedir();
388
+ }
389
+ if (trimmed.startsWith("~/")) {
390
+ return resolvePath(homedir(), trimmed.slice(2));
391
+ }
392
+ const slashIndex = trimmed.indexOf("/");
393
+ const variableName = slashIndex >= 0 ? trimmed.slice(1, slashIndex) : trimmed.slice(1);
394
+ const remainder = slashIndex >= 0 ? trimmed.slice(slashIndex + 1) : "";
395
+ const resolvedVariable = env[variableName];
396
+ if (resolvedVariable && resolvedVariable.trim().length > 0) {
397
+ return resolvePath(resolvedVariable.trim(), remainder);
398
+ }
399
+ return resolvePath(trimmed.replace(/^~+/, homedir()));
400
+ }
401
+ function readOpenClawConfig(env, stateDir) {
402
+ const configPath = resolveConfigPath(env, stateDir);
403
+ try {
404
+ if (!existsSync(configPath)) {
405
+ return {};
406
+ }
407
+ return parseLooseJson(readFileSync(configPath, "utf8")) ?? {};
408
+ }
409
+ catch {
410
+ return {};
411
+ }
412
+ }
413
+ function resolveDeviceIdentityPath(stateDir) {
414
+ return join(stateDir, "identity", "device.json");
415
+ }
416
+ function resolveDeviceAuthPath(stateDir) {
417
+ return join(stateDir, "identity", "device-auth.json");
418
+ }
419
+ function loadOrCreateDeviceIdentity(stateDir) {
420
+ const filePath = resolveDeviceIdentityPath(stateDir);
421
+ try {
422
+ if (existsSync(filePath)) {
423
+ const parsed = parseLooseJson(readFileSync(filePath, "utf8"));
424
+ const deviceId = typeof parsed?.deviceId === "string" ? parsed.deviceId : "";
425
+ const publicKeyPem = typeof parsed?.publicKeyPem === "string" ? parsed.publicKeyPem : "";
426
+ const privateKeyPem = typeof parsed?.privateKeyPem === "string" ? parsed.privateKeyPem : "";
427
+ if (deviceId && publicKeyPem && privateKeyPem) {
428
+ const derivedId = fingerprintPublicKey(publicKeyPem);
429
+ if (derivedId !== deviceId) {
430
+ const updated = {
431
+ ...(parsed ?? {}),
432
+ version: 1,
433
+ deviceId: derivedId,
434
+ publicKeyPem,
435
+ privateKeyPem,
436
+ };
437
+ writeSecureJson(filePath, updated);
438
+ return { deviceId: derivedId, publicKeyPem, privateKeyPem };
439
+ }
440
+ return { deviceId, publicKeyPem, privateKeyPem };
441
+ }
442
+ }
443
+ }
444
+ catch {
445
+ // Fall through and regenerate.
446
+ }
447
+ const identity = generateIdentity();
448
+ writeSecureJson(filePath, {
449
+ version: 1,
450
+ deviceId: identity.deviceId,
451
+ publicKeyPem: identity.publicKeyPem,
452
+ privateKeyPem: identity.privateKeyPem,
453
+ createdAtMs: Date.now(),
454
+ });
455
+ return identity;
456
+ }
457
+ function generateIdentity() {
458
+ const pair = generateKeyPairSync("ed25519");
459
+ const publicKeyPem = pair.publicKey.export({ type: "spki", format: "pem" }).toString();
460
+ const privateKeyPem = pair.privateKey.export({ type: "pkcs8", format: "pem" }).toString();
461
+ return {
462
+ deviceId: fingerprintPublicKey(publicKeyPem),
463
+ publicKeyPem,
464
+ privateKeyPem,
465
+ };
466
+ }
467
+ function publicKeyRawFromPem(publicKeyPem) {
468
+ const der = createPublicKey(publicKeyPem).export({
469
+ type: "spki",
470
+ format: "der",
471
+ });
472
+ if (der.length === ED25519_SPKI_PREFIX.length + 32 &&
473
+ der.subarray(0, ED25519_SPKI_PREFIX.length).equals(ED25519_SPKI_PREFIX)) {
474
+ return der.subarray(ED25519_SPKI_PREFIX.length);
475
+ }
476
+ return der;
477
+ }
478
+ function publicKeyRawBase64UrlFromPem(publicKeyPem) {
479
+ return base64UrlEncode(publicKeyRawFromPem(publicKeyPem));
480
+ }
481
+ function fingerprintPublicKey(publicKeyPem) {
482
+ return createHash("sha256").update(publicKeyRawFromPem(publicKeyPem)).digest("hex");
483
+ }
484
+ function signDevicePayload(privateKeyPem, payload) {
485
+ const key = createPrivateKey(privateKeyPem);
486
+ return base64UrlEncode(sign(null, Buffer.from(payload, "utf8"), key));
487
+ }
488
+ function base64UrlEncode(buf) {
489
+ return buf.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/g, "");
490
+ }
491
+ function buildDeviceAuthPayload(params) {
492
+ const version = params.nonce ? "v2" : "v1";
493
+ const base = [
494
+ version,
495
+ params.deviceId,
496
+ params.clientId,
497
+ params.clientMode,
498
+ params.role,
499
+ params.scopes.join(","),
500
+ String(params.signedAtMs),
501
+ params.token ?? "",
502
+ ];
503
+ if (version === "v2") {
504
+ base.push(params.nonce ?? "");
505
+ }
506
+ return base.join("|");
507
+ }
508
+ function loadDeviceAuthToken(params) {
509
+ const store = readDeviceAuthStore(params.stateDir);
510
+ if (!store || store.deviceId !== params.deviceId) {
511
+ return undefined;
512
+ }
513
+ const entry = asRecord(store.tokens)[params.role];
514
+ const token = asRecord(entry).token;
515
+ if (typeof token === "string" && token.trim().length > 0) {
516
+ return token.trim();
517
+ }
518
+ return undefined;
519
+ }
520
+ function storeDeviceAuthToken(params) {
521
+ const filePath = resolveDeviceAuthPath(params.stateDir);
522
+ const existing = readDeviceAuthStore(params.stateDir);
523
+ const normalizedRole = params.role.trim() || "operator";
524
+ const next = {
525
+ version: 1,
526
+ deviceId: params.deviceId,
527
+ tokens: {},
528
+ };
529
+ if (existing && existing.deviceId === params.deviceId && existing.tokens && typeof existing.tokens === "object") {
530
+ next.tokens = { ...existing.tokens };
531
+ }
532
+ next.tokens[normalizedRole] = {
533
+ token: params.token,
534
+ role: normalizedRole,
535
+ scopes: [...new Set(params.scopes.map((scope) => scope.trim()).filter(Boolean))].sort(),
536
+ updatedAtMs: Date.now(),
537
+ };
538
+ writeSecureJson(filePath, next);
539
+ }
540
+ function clearDeviceAuthToken(params) {
541
+ const filePath = resolveDeviceAuthPath(params.stateDir);
542
+ const existing = readDeviceAuthStore(params.stateDir);
543
+ if (!existing || existing.deviceId !== params.deviceId) {
544
+ return;
545
+ }
546
+ const tokens = existing.tokens && typeof existing.tokens === "object"
547
+ ? { ...existing.tokens }
548
+ : {};
549
+ delete tokens[params.role];
550
+ writeSecureJson(filePath, {
551
+ version: 1,
552
+ deviceId: existing.deviceId,
553
+ tokens,
554
+ });
555
+ }
556
+ function readDeviceAuthStore(stateDir) {
557
+ const filePath = resolveDeviceAuthPath(stateDir);
558
+ try {
559
+ if (!existsSync(filePath)) {
560
+ return undefined;
561
+ }
562
+ const parsed = parseLooseJson(readFileSync(filePath, "utf8"));
563
+ if (!parsed || typeof parsed.deviceId !== "string" || !parsed.deviceId.trim()) {
564
+ return undefined;
565
+ }
566
+ const tokens = parsed.tokens;
567
+ if (!tokens || typeof tokens !== "object" || Array.isArray(tokens)) {
568
+ return undefined;
569
+ }
570
+ return {
571
+ deviceId: parsed.deviceId.trim(),
572
+ tokens: tokens,
573
+ };
574
+ }
575
+ catch {
576
+ return undefined;
577
+ }
578
+ }
579
+ function writeSecureJson(filePath, payload) {
580
+ mkdirSync(dirname(filePath), { recursive: true });
581
+ writeFileSync(filePath, `${JSON.stringify(payload, null, 2)}\n`, { mode: 0o600 });
582
+ try {
583
+ chmodSync(filePath, 0o600);
584
+ }
585
+ catch {
586
+ // Ignore chmod failures on platforms where mode adjustments are unsupported.
587
+ }
588
+ }
589
+ function parseLooseJson(raw) {
590
+ const trimmed = raw.trim();
591
+ if (!trimmed) {
592
+ return undefined;
593
+ }
594
+ try {
595
+ const parsed = JSON.parse(trimmed);
596
+ return asRecord(parsed);
597
+ }
598
+ catch {
599
+ // Continue trying from likely JSON starts.
600
+ }
601
+ const starts = [
602
+ trimmed.indexOf("{"),
603
+ trimmed.lastIndexOf("{"),
604
+ trimmed.indexOf("["),
605
+ trimmed.lastIndexOf("["),
606
+ ].filter((value, index, arr) => value >= 0 && arr.indexOf(value) === index);
607
+ for (const start of starts) {
608
+ const candidate = trimmed.slice(start).trim();
609
+ if (!candidate) {
610
+ continue;
611
+ }
612
+ try {
613
+ const parsed = JSON.parse(candidate);
614
+ return asRecord(parsed);
615
+ }
616
+ catch {
617
+ // Keep trying.
618
+ }
619
+ }
620
+ return undefined;
621
+ }
622
+ function sanitizeTimeout(raw) {
623
+ if (!Number.isFinite(raw) || raw <= 0) {
624
+ return DEFAULT_TIMEOUT_MS;
625
+ }
626
+ const floored = Math.floor(raw);
627
+ return Math.min(Math.max(floored, 1), 2_147_483_647);
628
+ }
629
+ //# sourceMappingURL=openclaw-gateway-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-gateway-rpc.js","sourceRoot":"","sources":["../../../src/core/providers/openclaw-gateway-rpc.ts"],"names":[],"mappings":"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"}