























@@ -36,50 +36,57 @@ function openDatabase(dbPath: string): OpenedDatabase {
3636ensureParentDir(dbPath);
3737const { DatabaseSync } = requireNodeSqlite();
3838const db = new DatabaseSync(dbPath);
39-const walMaintenance = configureSqliteConnectionPragmas(db, {
40-busyTimeoutMs: 5000,
41-databaseLabel: "debug-proxy-capture",
42-databasePath: dbPath,
43-});
44-db.exec(`
45- CREATE TABLE IF NOT EXISTS capture_sessions (
46- id TEXT PRIMARY KEY,
47- started_at INTEGER NOT NULL,
48- ended_at INTEGER,
49- mode TEXT NOT NULL,
50- source_scope TEXT NOT NULL,
51- source_process TEXT NOT NULL,
52- proxy_url TEXT,
53- db_path TEXT NOT NULL,
54- blob_dir TEXT NOT NULL
55- );
56- CREATE TABLE IF NOT EXISTS capture_events (
57- id INTEGER PRIMARY KEY,
58- session_id TEXT NOT NULL,
59- ts INTEGER NOT NULL,
60- source_scope TEXT NOT NULL,
61- source_process TEXT NOT NULL,
62- protocol TEXT NOT NULL,
63- direction TEXT NOT NULL,
64- kind TEXT NOT NULL,
65- flow_id TEXT NOT NULL,
66- method TEXT,
67- host TEXT,
68- path TEXT,
69- status INTEGER,
70- close_code INTEGER,
71- content_type TEXT,
72- headers_json TEXT,
73- data_text TEXT,
74- data_blob_id TEXT,
75- data_sha256 TEXT,
76- error_text TEXT,
77- meta_json TEXT
78- );
79- CREATE INDEX IF NOT EXISTS capture_events_session_ts_idx ON capture_events(session_id, ts);
80- CREATE INDEX IF NOT EXISTS capture_events_flow_idx ON capture_events(flow_id, ts);
81- `);
82-return { db, walMaintenance };
39+let walMaintenance: SqliteWalMaintenance | undefined;
40+try {
41+walMaintenance = configureSqliteConnectionPragmas(db, {
42+busyTimeoutMs: 5000,
43+databaseLabel: "debug-proxy-capture",
44+databasePath: dbPath,
45+});
46+db.exec(`
47+ CREATE TABLE IF NOT EXISTS capture_sessions (
48+ id TEXT PRIMARY KEY,
49+ started_at INTEGER NOT NULL,
50+ ended_at INTEGER,
51+ mode TEXT NOT NULL,
52+ source_scope TEXT NOT NULL,
53+ source_process TEXT NOT NULL,
54+ proxy_url TEXT,
55+ db_path TEXT NOT NULL,
56+ blob_dir TEXT NOT NULL
57+ );
58+ CREATE TABLE IF NOT EXISTS capture_events (
59+ id INTEGER PRIMARY KEY,
60+ session_id TEXT NOT NULL,
61+ ts INTEGER NOT NULL,
62+ source_scope TEXT NOT NULL,
63+ source_process TEXT NOT NULL,
64+ protocol TEXT NOT NULL,
65+ direction TEXT NOT NULL,
66+ kind TEXT NOT NULL,
67+ flow_id TEXT NOT NULL,
68+ method TEXT,
69+ host TEXT,
70+ path TEXT,
71+ status INTEGER,
72+ close_code INTEGER,
73+ content_type TEXT,
74+ headers_json TEXT,
75+ data_text TEXT,
76+ data_blob_id TEXT,
77+ data_sha256 TEXT,
78+ error_text TEXT,
79+ meta_json TEXT
80+ );
81+ CREATE INDEX IF NOT EXISTS capture_events_session_ts_idx ON capture_events(session_id, ts);
82+ CREATE INDEX IF NOT EXISTS capture_events_flow_idx ON capture_events(flow_id, ts);
83+ `);
84+return { db, walMaintenance };
85+} catch (err) {
86+walMaintenance?.close();
87+db.close();
88+throw err;
89+}
8390}
84918592function serializeJson(value: unknown): string | null {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。