Files
openclaw/src/proxy-capture/types.ts
2026-06-19 01:20:06 +08:00

103 lines
2.3 KiB
TypeScript

// Shared debug-proxy capture schema. These records back the SQLite store, CLI
// reports, and runtime capture events for HTTP/SSE/websocket traffic.
export type CaptureProtocol = "http" | "https" | "sse" | "ws" | "wss" | "connect";
export type CaptureDirection = "outbound" | "inbound" | "local";
export type CaptureEventKind =
| "connect"
| "tls-handshake"
| "request"
| "response"
| "ws-open"
| "ws-frame"
| "ws-close"
| "error"
| "retry-link";
export type CaptureSessionRecord = {
id: string;
startedAt: number;
endedAt?: number;
mode: string;
sourceScope: "openclaw";
sourceProcess: string;
proxyUrl?: string;
/** @deprecated Capture storage now lives in the shared state database. */
dbPath?: string;
/** @deprecated Capture payloads now live in the shared state database. */
blobDir?: string;
};
export type CaptureBlobRecord = {
blobId: string;
path: string;
encoding: "gzip";
sizeBytes: number;
sha256: string;
contentType?: string;
};
export type SharedCaptureBlobRecord = Omit<CaptureBlobRecord, "path"> & {
path?: never;
};
export type CaptureEventRecord = {
sessionId: string;
ts: number;
sourceScope: "openclaw";
sourceProcess: string;
protocol: CaptureProtocol;
direction: CaptureDirection;
kind: CaptureEventKind;
flowId: string;
method?: string;
host?: string;
path?: string;
status?: number;
closeCode?: number;
contentType?: string;
headersJson?: string;
dataText?: string;
dataBlobId?: string;
dataSha256?: string;
errorText?: string;
metaJson?: string;
};
export type CaptureQueryPreset =
| "double-sends"
| "retry-storms"
| "cache-busting"
| "ws-duplicate-frames"
| "missing-ack"
| "error-bursts";
export type CaptureQueryRow = Record<string, string | number | null>;
export type CaptureSessionSummary = {
id: string;
startedAt: number;
endedAt?: number;
mode: string;
sourceProcess: string;
proxyUrl?: string;
eventCount: number;
};
export type CaptureObservedDimension = {
value: string;
count: number;
};
export type CaptureSessionCoverageSummary = {
sessionId: string;
totalEvents: number;
unlabeledEventCount: number;
providers: CaptureObservedDimension[];
apis: CaptureObservedDimension[];
models: CaptureObservedDimension[];
hosts: CaptureObservedDimension[];
localPeers: CaptureObservedDimension[];
};