Browse Source

Merge branch 'test-0523'

feature/gateway
TianYun 2 months ago
parent
commit
0edb167ee2
  1. 21
      src/app/api/_gatewayLogging.ts

21
src/app/api/_gatewayLogging.ts

@ -1,4 +1,5 @@
import { logger } from "@/utils/logger"; import { logger } from "@/utils/logger";
import { createHash } from "crypto";
const SENSITIVE_KEY_PATTERN = /authorization|token|api[-_]?key|apikey|secret|password/i; const SENSITIVE_KEY_PATTERN = /authorization|token|api[-_]?key|apikey|secret|password/i;
const MAX_STRING_LENGTH = 500; const MAX_STRING_LENGTH = 500;
@ -13,7 +14,16 @@ type JsonLike =
function redactValue(value: string): string { function redactValue(value: string): string {
if (!value) return "[empty]"; if (!value) return "[empty]";
return `[redacted:${value.length}]`; const match = value.match(/^(\S+)\s+(.+)$/);
const scheme = match?.[1];
const secret = match?.[2] ?? value;
const hash = createHash("sha256").update(secret).digest("hex").slice(0, 12);
const preview =
secret.length <= 10
? `${secret.slice(0, 2)}...${secret.slice(-2)}`
: `${secret.slice(0, 6)}...${secret.slice(-4)}`;
const prefix = scheme ? `${scheme} ` : "";
return `${prefix}${preview} (len=${secret.length}, sha256=${hash})`;
} }
function summarizeString(value: string): string | { type: string; length: number; prefix?: string } { function summarizeString(value: string): string | { type: string; length: number; prefix?: string } {
@ -83,6 +93,11 @@ function sanitizeBody(body?: BodyInit | null): JsonLike | undefined {
} }
} }
function stringifyForLog(value: JsonLike | undefined): string {
if (value === undefined) return "";
return JSON.stringify(value);
}
export function logGatewayRequest( export function logGatewayRequest(
label: string, label: string,
url: string, url: string,
@ -93,7 +108,7 @@ export function logGatewayRequest(
...(context || {}), ...(context || {}),
url, url,
method: init.method || "GET", method: init.method || "GET",
headers: sanitizeHeaders(init.headers), headers: stringifyForLog(sanitizeHeaders(init.headers)),
params: sanitizeBody(init.body), params: stringifyForLog(sanitizeBody(init.body)),
}); });
} }

Loading…
Cancel
Save