mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-27 11:56:43 +02:00
* Add proxy capture core and CLI * Expand transport capture coverage * Add QA Lab capture backend * Refine QA Lab capture UI * Fix proxy capture review feedback * Fix proxy run cleanup and TTS capture * Fix proxy capture transport follow-ups * Fix debug proxy CONNECT target parsing * Harden QA Lab asset path containment
94 lines
3.3 KiB
TypeScript
94 lines
3.3 KiB
TypeScript
import { randomUUID } from "node:crypto";
|
|
import type { Agent } from "node:http";
|
|
import process from "node:process";
|
|
import { HttpsProxyAgent } from "https-proxy-agent";
|
|
import {
|
|
resolveDebugProxyBlobDir,
|
|
resolveDebugProxyCertDir,
|
|
resolveDebugProxyDbPath,
|
|
} from "./paths.js";
|
|
|
|
export const OPENCLAW_DEBUG_PROXY_ENABLED = "OPENCLAW_DEBUG_PROXY_ENABLED";
|
|
export const OPENCLAW_DEBUG_PROXY_URL = "OPENCLAW_DEBUG_PROXY_URL";
|
|
export const OPENCLAW_DEBUG_PROXY_DB_PATH = "OPENCLAW_DEBUG_PROXY_DB_PATH";
|
|
export const OPENCLAW_DEBUG_PROXY_BLOB_DIR = "OPENCLAW_DEBUG_PROXY_BLOB_DIR";
|
|
export const OPENCLAW_DEBUG_PROXY_CERT_DIR = "OPENCLAW_DEBUG_PROXY_CERT_DIR";
|
|
export const OPENCLAW_DEBUG_PROXY_SESSION_ID = "OPENCLAW_DEBUG_PROXY_SESSION_ID";
|
|
export const OPENCLAW_DEBUG_PROXY_REQUIRE = "OPENCLAW_DEBUG_PROXY_REQUIRE";
|
|
|
|
export type DebugProxySettings = {
|
|
enabled: boolean;
|
|
required: boolean;
|
|
proxyUrl?: string;
|
|
dbPath: string;
|
|
blobDir: string;
|
|
certDir: string;
|
|
sessionId: string;
|
|
sourceProcess: string;
|
|
};
|
|
|
|
let cachedImplicitSessionId: string | undefined;
|
|
|
|
function isTruthy(value: string | undefined): boolean {
|
|
return value === "1" || value === "true" || value === "yes" || value === "on";
|
|
}
|
|
|
|
export function resolveDebugProxySettings(
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
): DebugProxySettings {
|
|
const enabled = isTruthy(env[OPENCLAW_DEBUG_PROXY_ENABLED]);
|
|
const explicitSessionId = env[OPENCLAW_DEBUG_PROXY_SESSION_ID]?.trim() || undefined;
|
|
const sessionId = explicitSessionId ?? (cachedImplicitSessionId ??= randomUUID());
|
|
return {
|
|
enabled,
|
|
required: isTruthy(env[OPENCLAW_DEBUG_PROXY_REQUIRE]),
|
|
proxyUrl: env[OPENCLAW_DEBUG_PROXY_URL]?.trim() || undefined,
|
|
dbPath: env[OPENCLAW_DEBUG_PROXY_DB_PATH]?.trim() || resolveDebugProxyDbPath(env),
|
|
blobDir: env[OPENCLAW_DEBUG_PROXY_BLOB_DIR]?.trim() || resolveDebugProxyBlobDir(env),
|
|
certDir: env[OPENCLAW_DEBUG_PROXY_CERT_DIR]?.trim() || resolveDebugProxyCertDir(env),
|
|
sessionId,
|
|
sourceProcess: "openclaw",
|
|
};
|
|
}
|
|
|
|
export function applyDebugProxyEnv(
|
|
env: NodeJS.ProcessEnv,
|
|
params: {
|
|
proxyUrl: string;
|
|
sessionId: string;
|
|
dbPath?: string;
|
|
blobDir?: string;
|
|
certDir?: string;
|
|
},
|
|
): NodeJS.ProcessEnv {
|
|
return {
|
|
...env,
|
|
[OPENCLAW_DEBUG_PROXY_ENABLED]: "1",
|
|
[OPENCLAW_DEBUG_PROXY_REQUIRE]: "1",
|
|
[OPENCLAW_DEBUG_PROXY_URL]: params.proxyUrl,
|
|
[OPENCLAW_DEBUG_PROXY_DB_PATH]: params.dbPath ?? resolveDebugProxyDbPath(env),
|
|
[OPENCLAW_DEBUG_PROXY_BLOB_DIR]: params.blobDir ?? resolveDebugProxyBlobDir(env),
|
|
[OPENCLAW_DEBUG_PROXY_CERT_DIR]: params.certDir ?? resolveDebugProxyCertDir(env),
|
|
[OPENCLAW_DEBUG_PROXY_SESSION_ID]: params.sessionId,
|
|
HTTP_PROXY: params.proxyUrl,
|
|
HTTPS_PROXY: params.proxyUrl,
|
|
ALL_PROXY: params.proxyUrl,
|
|
};
|
|
}
|
|
|
|
export function createDebugProxyWebSocketAgent(settings: DebugProxySettings): Agent | undefined {
|
|
if (!settings.enabled || !settings.proxyUrl) {
|
|
return undefined;
|
|
}
|
|
return new HttpsProxyAgent(settings.proxyUrl);
|
|
}
|
|
|
|
export function resolveEffectiveDebugProxyUrl(configuredProxyUrl?: string): string | undefined {
|
|
const explicit = configuredProxyUrl?.trim();
|
|
if (explicit) {
|
|
return explicit;
|
|
}
|
|
const settings = resolveDebugProxySettings();
|
|
return settings.enabled ? settings.proxyUrl : undefined;
|
|
}
|