Skip to content

Commit 18c57ee

Browse files
committed
fix(proxy): lazy debug eval in route.ts, keep headers as plain objects
- route.ts debug flag was captured at import time (before cli.ts sets X402_PROXY_DEBUG), so dbg() never fired. Now checks env var per call. - injectPayerHeader kept headers as Record<string,string> instead of converting to Headers instance, avoiding mppx headers-spreading bug. - --debug on claude command now sets quiet:false so proxy logs show.
1 parent 274c615 commit 18c57ee

4 files changed

Lines changed: 11 additions & 6 deletions

File tree

packages/x402-proxy/src/commands/claude.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,16 @@ Examples:
8484
},
8585
},
8686
async func(flags, ...rawClaudeArgs) {
87+
const debug = process.env.X402_PROXY_DEBUG === "1";
8788
const started = await startServeServer({
8889
upstreamUrl: flags.upstream ?? DEFAULT_SURF_UPSTREAM_URL,
8990
port: Number(flags.port),
9091
protocol: flags.protocol ?? "mpp",
9192
network: flags.network,
9293
evmKey: flags.evmKey,
9394
solanaKey: flags.solanaKey,
94-
quiet: true,
95+
quiet: !debug,
96+
debug,
9597
});
9698

9799
const claudeArgs = normalizeClaudeArgs(rawClaudeArgs);

packages/x402-proxy/src/commands/serve.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export type StartServeServerOptions = {
3232
evmKey?: string;
3333
solanaKey?: string;
3434
quiet?: boolean;
35+
debug?: boolean;
3536
};
3637

3738
type StartedServeServer = {
@@ -119,6 +120,7 @@ function createRequestHandler(
119120
export async function startServeServer(
120121
options: StartServeServerOptions = {},
121122
): Promise<StartedServeServer> {
123+
if (options.debug) options.quiet = false;
122124
const config = loadConfig();
123125
const wallet = await resolveWalletForServe(options);
124126
const resolvedProtocol = resolveProtocol(options.protocol ?? config?.preferredProtocol);

packages/x402-proxy/src/handler.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,11 @@ export async function createMppProxyHandler(opts: {
163163
const payerAddress = account.address;
164164

165165
function injectPayerHeader(init?: RequestInit): RequestInit {
166-
const headers = new Headers(init?.headers);
167-
headers.set("X-Payer-Address", payerAddress);
168-
return { ...init, headers };
166+
const existing =
167+
init?.headers instanceof Headers
168+
? Object.fromEntries(init.headers.entries())
169+
: ((init?.headers as Record<string, string> | undefined) ?? {});
170+
return { ...init, headers: { ...existing, "X-Payer-Address": payerAddress } };
169171
}
170172

171173
// Lazy session creation - only needed for SSE streaming

packages/x402-proxy/src/openclaw/route.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import { appendHistory } from "../history.js";
55
import type { ResolvedProviderConfig } from "./defaults.js";
66
import { type ModelEntry, parseMppAmount, paymentAmount, SOL_MAINNET } from "./tools.js";
77

8-
const debug = process.env.X402_PROXY_DEBUG === "1";
98
function dbg(msg: string): void {
10-
if (debug) process.stderr.write(`[x402-proxy] ${msg}\n`);
9+
if (process.env.X402_PROXY_DEBUG === "1") process.stderr.write(`[x402-proxy] ${msg}\n`);
1110
}
1211

1312
export type InferenceProxyRouteOptions = {

0 commit comments

Comments
 (0)