browser-debug-mcp-bridge 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apps/mcp-server/dist/db/migrations.js +221 -1
- package/apps/mcp-server/dist/db/migrations.js.map +1 -1
- package/apps/mcp-server/dist/db/schema.js +167 -2
- package/apps/mcp-server/dist/db/schema.js.map +1 -1
- package/apps/mcp-server/dist/lighthouse-report.js +1001 -0
- package/apps/mcp-server/dist/lighthouse-report.js.map +1 -0
- package/apps/mcp-server/dist/main.js +249 -1
- package/apps/mcp-server/dist/main.js.map +1 -1
- package/apps/mcp-server/dist/mcp/server.js +793 -1
- package/apps/mcp-server/dist/mcp/server.js.map +1 -1
- package/apps/mcp-server/dist/mock-store.js +408 -0
- package/apps/mcp-server/dist/mock-store.js.map +1 -0
- package/apps/mcp-server/dist/override-audit-contract.js +58 -0
- package/apps/mcp-server/dist/override-audit-contract.js.map +1 -1
- package/apps/mcp-server/dist/override-audit.js +97 -1
- package/apps/mcp-server/dist/override-audit.js.map +1 -1
- package/apps/mcp-server/dist/ssr-mock.js +480 -0
- package/apps/mcp-server/dist/ssr-mock.js.map +1 -0
- package/apps/mcp-server/package.json +5 -0
- package/package.json +2 -2
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { isMockRouteBodyKind, isMockRouteMatchMode, isMockRouteMode, isMockRouteSourceKind, isMockRunStatus, } from './override-audit-contract.js';
|
|
3
|
+
function encodeJson(value) {
|
|
4
|
+
return JSON.stringify(value ?? null);
|
|
5
|
+
}
|
|
6
|
+
function parseJsonValue(value) {
|
|
7
|
+
if (!value) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(value);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function parseHeaderRecord(value) {
|
|
18
|
+
const parsed = parseJsonValue(value);
|
|
19
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
const headers = {};
|
|
23
|
+
for (const [key, raw] of Object.entries(parsed)) {
|
|
24
|
+
if (typeof raw === 'string') {
|
|
25
|
+
headers[key.toLowerCase()] = raw;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return headers;
|
|
29
|
+
}
|
|
30
|
+
function mapMockRouteRow(row) {
|
|
31
|
+
const bodyKind = isMockRouteBodyKind(row.body_kind) ? row.body_kind : 'text';
|
|
32
|
+
return {
|
|
33
|
+
routeId: row.route_id,
|
|
34
|
+
createdAt: row.created_at,
|
|
35
|
+
updatedAt: row.updated_at,
|
|
36
|
+
enabled: row.enabled === 1,
|
|
37
|
+
mode: isMockRouteMode(row.mode) ? row.mode : 'browser',
|
|
38
|
+
method: row.method,
|
|
39
|
+
matchMode: isMockRouteMatchMode(row.match_mode) ? row.match_mode : 'exact',
|
|
40
|
+
targetUrl: row.target_url,
|
|
41
|
+
statusCode: row.status_code,
|
|
42
|
+
responseHeaders: parseHeaderRecord(row.response_headers_json),
|
|
43
|
+
bodyKind,
|
|
44
|
+
bodyJson: bodyKind === 'json' ? parseJsonValue(row.body_json) : undefined,
|
|
45
|
+
bodyText: row.body_text,
|
|
46
|
+
bodyBase64: row.body_base64,
|
|
47
|
+
bodyFilePath: row.body_file_path,
|
|
48
|
+
delayMs: row.delay_ms,
|
|
49
|
+
sourceKind: isMockRouteSourceKind(row.source_kind) ? row.source_kind : 'manual',
|
|
50
|
+
sessionScope: row.session_scope,
|
|
51
|
+
projectRoot: row.project_root,
|
|
52
|
+
ttlMs: row.ttl_ms,
|
|
53
|
+
expiresAt: row.expires_at,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function mapMockRunRow(row) {
|
|
57
|
+
return {
|
|
58
|
+
runId: row.run_id,
|
|
59
|
+
routeId: row.route_id,
|
|
60
|
+
executionMode: isMockRouteMode(row.execution_mode) ? row.execution_mode : 'browser',
|
|
61
|
+
sessionId: row.session_id,
|
|
62
|
+
tabId: row.tab_id,
|
|
63
|
+
projectRoot: row.project_root,
|
|
64
|
+
startedAt: row.started_at,
|
|
65
|
+
endedAt: row.ended_at,
|
|
66
|
+
status: isMockRunStatus(row.status) ? row.status : 'active',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function mapMockHitRow(row) {
|
|
70
|
+
return {
|
|
71
|
+
hitId: row.hit_id,
|
|
72
|
+
runId: row.run_id,
|
|
73
|
+
routeId: row.route_id,
|
|
74
|
+
timestamp: row.ts,
|
|
75
|
+
requestUrl: row.request_url,
|
|
76
|
+
requestMethod: row.request_method,
|
|
77
|
+
matched: row.matched === 1,
|
|
78
|
+
fulfilled: row.fulfilled === 1,
|
|
79
|
+
statusCode: row.status_code,
|
|
80
|
+
responseSource: isMockRouteSourceKind(row.response_source) ? row.response_source : 'manual',
|
|
81
|
+
errorCode: row.error_code,
|
|
82
|
+
errorMessage: row.error_message,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function upsertMockRoute(db, record) {
|
|
86
|
+
db.prepare(`
|
|
87
|
+
INSERT INTO mock_routes (
|
|
88
|
+
route_id,
|
|
89
|
+
created_at,
|
|
90
|
+
updated_at,
|
|
91
|
+
enabled,
|
|
92
|
+
mode,
|
|
93
|
+
method,
|
|
94
|
+
match_mode,
|
|
95
|
+
target_url,
|
|
96
|
+
status_code,
|
|
97
|
+
response_headers_json,
|
|
98
|
+
body_kind,
|
|
99
|
+
body_json,
|
|
100
|
+
body_text,
|
|
101
|
+
body_base64,
|
|
102
|
+
body_file_path,
|
|
103
|
+
delay_ms,
|
|
104
|
+
source_kind,
|
|
105
|
+
session_scope,
|
|
106
|
+
project_root,
|
|
107
|
+
ttl_ms,
|
|
108
|
+
expires_at
|
|
109
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
110
|
+
ON CONFLICT(route_id) DO UPDATE SET
|
|
111
|
+
updated_at = excluded.updated_at,
|
|
112
|
+
enabled = excluded.enabled,
|
|
113
|
+
mode = excluded.mode,
|
|
114
|
+
method = excluded.method,
|
|
115
|
+
match_mode = excluded.match_mode,
|
|
116
|
+
target_url = excluded.target_url,
|
|
117
|
+
status_code = excluded.status_code,
|
|
118
|
+
response_headers_json = excluded.response_headers_json,
|
|
119
|
+
body_kind = excluded.body_kind,
|
|
120
|
+
body_json = excluded.body_json,
|
|
121
|
+
body_text = excluded.body_text,
|
|
122
|
+
body_base64 = excluded.body_base64,
|
|
123
|
+
body_file_path = excluded.body_file_path,
|
|
124
|
+
delay_ms = excluded.delay_ms,
|
|
125
|
+
source_kind = excluded.source_kind,
|
|
126
|
+
session_scope = excluded.session_scope,
|
|
127
|
+
project_root = excluded.project_root,
|
|
128
|
+
ttl_ms = excluded.ttl_ms,
|
|
129
|
+
expires_at = excluded.expires_at
|
|
130
|
+
`).run(record.routeId, record.createdAt, record.updatedAt, record.enabled ? 1 : 0, record.mode, record.method, record.matchMode, record.targetUrl, record.statusCode, encodeJson(record.responseHeaders), record.bodyKind, record.bodyKind === 'json' ? encodeJson(record.bodyJson) : null, record.bodyKind === 'text' ? (record.bodyText ?? '') : null, record.bodyKind === 'base64' ? (record.bodyBase64 ?? '') : null, record.bodyKind === 'file' ? (record.bodyFilePath ?? '') : null, record.delayMs, record.sourceKind, record.sessionScope ?? null, record.projectRoot ?? null, record.ttlMs ?? null, record.expiresAt ?? null);
|
|
131
|
+
return record;
|
|
132
|
+
}
|
|
133
|
+
export function getMockRoute(db, routeId) {
|
|
134
|
+
const row = db.prepare(`
|
|
135
|
+
SELECT
|
|
136
|
+
route_id, created_at, updated_at, enabled, mode, method, match_mode, target_url,
|
|
137
|
+
status_code, response_headers_json, body_kind, body_json, body_text, body_base64,
|
|
138
|
+
body_file_path, delay_ms, source_kind, session_scope, project_root, ttl_ms, expires_at
|
|
139
|
+
FROM mock_routes
|
|
140
|
+
WHERE route_id = ?
|
|
141
|
+
LIMIT 1
|
|
142
|
+
`).get(routeId);
|
|
143
|
+
return row ? mapMockRouteRow(row) : null;
|
|
144
|
+
}
|
|
145
|
+
export function deleteMockRoute(db, routeId) {
|
|
146
|
+
const result = db.prepare('DELETE FROM mock_routes WHERE route_id = ?').run(routeId);
|
|
147
|
+
return result.changes > 0;
|
|
148
|
+
}
|
|
149
|
+
export function listMockRoutes(db, options) {
|
|
150
|
+
const where = [];
|
|
151
|
+
const params = [];
|
|
152
|
+
if (options.projectRoot) {
|
|
153
|
+
where.push('project_root = ?');
|
|
154
|
+
params.push(options.projectRoot);
|
|
155
|
+
}
|
|
156
|
+
if (options.mode) {
|
|
157
|
+
where.push('(mode = ? OR mode = ?)');
|
|
158
|
+
params.push(options.mode, 'both');
|
|
159
|
+
}
|
|
160
|
+
if (typeof options.enabled === 'boolean') {
|
|
161
|
+
where.push('enabled = ?');
|
|
162
|
+
params.push(options.enabled ? 1 : 0);
|
|
163
|
+
}
|
|
164
|
+
const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
165
|
+
const rows = db.prepare(`
|
|
166
|
+
SELECT
|
|
167
|
+
route_id, created_at, updated_at, enabled, mode, method, match_mode, target_url,
|
|
168
|
+
status_code, response_headers_json, body_kind, body_json, body_text, body_base64,
|
|
169
|
+
body_file_path, delay_ms, source_kind, session_scope, project_root, ttl_ms, expires_at
|
|
170
|
+
FROM mock_routes
|
|
171
|
+
${whereSql}
|
|
172
|
+
ORDER BY created_at DESC, rowid DESC
|
|
173
|
+
LIMIT ? OFFSET ?
|
|
174
|
+
`).all(...params, options.limit + 1, options.offset);
|
|
175
|
+
const hasMore = rows.length > options.limit;
|
|
176
|
+
return {
|
|
177
|
+
routes: rows.slice(0, options.limit).map(mapMockRouteRow),
|
|
178
|
+
hasMore,
|
|
179
|
+
nextOffset: hasMore ? options.offset + options.limit : null,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
export function insertMockRun(db, record) {
|
|
183
|
+
const now = Date.now();
|
|
184
|
+
db.prepare(`
|
|
185
|
+
INSERT INTO mock_runs (
|
|
186
|
+
run_id, route_id, execution_mode, session_id, tab_id, project_root,
|
|
187
|
+
started_at, ended_at, status, created_at, updated_at
|
|
188
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
189
|
+
ON CONFLICT(run_id) DO UPDATE SET
|
|
190
|
+
route_id = excluded.route_id,
|
|
191
|
+
execution_mode = excluded.execution_mode,
|
|
192
|
+
session_id = excluded.session_id,
|
|
193
|
+
tab_id = excluded.tab_id,
|
|
194
|
+
project_root = excluded.project_root,
|
|
195
|
+
started_at = excluded.started_at,
|
|
196
|
+
ended_at = excluded.ended_at,
|
|
197
|
+
status = excluded.status,
|
|
198
|
+
updated_at = excluded.updated_at
|
|
199
|
+
`).run(record.runId, record.routeId, record.executionMode, record.sessionId ?? null, record.tabId ?? null, record.projectRoot ?? null, record.startedAt, record.endedAt ?? null, record.status, now, now);
|
|
200
|
+
return record;
|
|
201
|
+
}
|
|
202
|
+
export function insertMockHit(db, record) {
|
|
203
|
+
const now = Date.now();
|
|
204
|
+
db.prepare(`
|
|
205
|
+
INSERT INTO mock_hits (
|
|
206
|
+
hit_id, run_id, route_id, ts, request_url, request_method, matched, fulfilled,
|
|
207
|
+
status_code, response_source, error_code, error_message, created_at, updated_at
|
|
208
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
209
|
+
ON CONFLICT(hit_id) DO UPDATE SET
|
|
210
|
+
run_id = excluded.run_id,
|
|
211
|
+
route_id = excluded.route_id,
|
|
212
|
+
ts = excluded.ts,
|
|
213
|
+
request_url = excluded.request_url,
|
|
214
|
+
request_method = excluded.request_method,
|
|
215
|
+
matched = excluded.matched,
|
|
216
|
+
fulfilled = excluded.fulfilled,
|
|
217
|
+
status_code = excluded.status_code,
|
|
218
|
+
response_source = excluded.response_source,
|
|
219
|
+
error_code = excluded.error_code,
|
|
220
|
+
error_message = excluded.error_message,
|
|
221
|
+
updated_at = excluded.updated_at
|
|
222
|
+
`).run(record.hitId, record.runId ?? null, record.routeId, record.timestamp, record.requestUrl, record.requestMethod, record.matched ? 1 : 0, record.fulfilled ? 1 : 0, record.statusCode ?? null, record.responseSource, record.errorCode ?? null, record.errorMessage ?? null, now, now);
|
|
223
|
+
return record;
|
|
224
|
+
}
|
|
225
|
+
export function listActiveBrowserMockRoutes(db, now = Date.now()) {
|
|
226
|
+
const rows = db.prepare(`
|
|
227
|
+
SELECT
|
|
228
|
+
route_id, created_at, updated_at, enabled, mode, method, match_mode, target_url,
|
|
229
|
+
status_code, response_headers_json, body_kind, body_json, body_text, body_base64,
|
|
230
|
+
body_file_path, delay_ms, source_kind, session_scope, project_root, ttl_ms, expires_at
|
|
231
|
+
FROM mock_routes
|
|
232
|
+
WHERE enabled = 1
|
|
233
|
+
AND (mode = 'browser' OR mode = 'both')
|
|
234
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
235
|
+
ORDER BY created_at DESC, rowid DESC
|
|
236
|
+
LIMIT 500
|
|
237
|
+
`).all(now);
|
|
238
|
+
return rows.map(mapMockRouteRow);
|
|
239
|
+
}
|
|
240
|
+
export function listActiveSsrMockRoutes(db, now = Date.now()) {
|
|
241
|
+
const rows = db.prepare(`
|
|
242
|
+
SELECT
|
|
243
|
+
route_id, created_at, updated_at, enabled, mode, method, match_mode, target_url,
|
|
244
|
+
status_code, response_headers_json, body_kind, body_json, body_text, body_base64,
|
|
245
|
+
body_file_path, delay_ms, source_kind, session_scope, project_root, ttl_ms, expires_at
|
|
246
|
+
FROM mock_routes
|
|
247
|
+
WHERE enabled = 1
|
|
248
|
+
AND (mode = 'ssr' OR mode = 'both')
|
|
249
|
+
AND (expires_at IS NULL OR expires_at > ?)
|
|
250
|
+
ORDER BY created_at DESC, rowid DESC
|
|
251
|
+
LIMIT 500
|
|
252
|
+
`).all(now);
|
|
253
|
+
return rows.map(mapMockRouteRow);
|
|
254
|
+
}
|
|
255
|
+
export function findActiveBrowserMockRoute(db, requestUrl, requestMethod = 'GET', now = Date.now()) {
|
|
256
|
+
const normalizedMethod = requestMethod.trim().toUpperCase();
|
|
257
|
+
const routes = listActiveBrowserMockRoutes(db, now)
|
|
258
|
+
.filter((route) => route.method === normalizedMethod)
|
|
259
|
+
.sort((left, right) => {
|
|
260
|
+
if (left.matchMode !== right.matchMode) {
|
|
261
|
+
return left.matchMode === 'exact' ? -1 : 1;
|
|
262
|
+
}
|
|
263
|
+
return right.targetUrl.length - left.targetUrl.length || right.createdAt - left.createdAt;
|
|
264
|
+
});
|
|
265
|
+
return routes.find((route) => {
|
|
266
|
+
return route.matchMode === 'prefix'
|
|
267
|
+
? requestUrl.startsWith(route.targetUrl)
|
|
268
|
+
: requestUrl === route.targetUrl;
|
|
269
|
+
}) ?? null;
|
|
270
|
+
}
|
|
271
|
+
function getRoutePathWithSearch(route) {
|
|
272
|
+
try {
|
|
273
|
+
const parsed = new URL(route.targetUrl);
|
|
274
|
+
return `${parsed.pathname || '/'}${parsed.search}`;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function matchesSsrRequestPath(route, requestPathWithSearch) {
|
|
281
|
+
const targetPathWithSearch = getRoutePathWithSearch(route);
|
|
282
|
+
if (!targetPathWithSearch) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
return route.matchMode === 'prefix'
|
|
286
|
+
? requestPathWithSearch.startsWith(targetPathWithSearch)
|
|
287
|
+
: requestPathWithSearch === targetPathWithSearch;
|
|
288
|
+
}
|
|
289
|
+
export function findActiveSsrMockRoute(db, scope, requestPathWithSearch, requestMethod = 'GET', now = Date.now()) {
|
|
290
|
+
const normalizedMethod = requestMethod.trim().toUpperCase();
|
|
291
|
+
const routes = listActiveSsrMockRoutes(db, now)
|
|
292
|
+
.filter((route) => route.method === normalizedMethod)
|
|
293
|
+
.filter((route) => route.routeId === scope || route.sessionScope === scope || route.sessionScope === null)
|
|
294
|
+
.sort((left, right) => {
|
|
295
|
+
const leftScopeScore = left.routeId === scope ? 0 : left.sessionScope === scope ? 1 : 2;
|
|
296
|
+
const rightScopeScore = right.routeId === scope ? 0 : right.sessionScope === scope ? 1 : 2;
|
|
297
|
+
if (leftScopeScore !== rightScopeScore) {
|
|
298
|
+
return leftScopeScore - rightScopeScore;
|
|
299
|
+
}
|
|
300
|
+
if (left.matchMode !== right.matchMode) {
|
|
301
|
+
return left.matchMode === 'exact' ? -1 : 1;
|
|
302
|
+
}
|
|
303
|
+
const leftPathLength = getRoutePathWithSearch(left)?.length ?? 0;
|
|
304
|
+
const rightPathLength = getRoutePathWithSearch(right)?.length ?? 0;
|
|
305
|
+
return rightPathLength - leftPathLength || right.createdAt - left.createdAt;
|
|
306
|
+
});
|
|
307
|
+
return routes.find((route) => matchesSsrRequestPath(route, requestPathWithSearch)) ?? null;
|
|
308
|
+
}
|
|
309
|
+
function defaultMockContentType(route) {
|
|
310
|
+
const configured = route.responseHeaders['content-type'];
|
|
311
|
+
if (configured) {
|
|
312
|
+
return configured;
|
|
313
|
+
}
|
|
314
|
+
switch (route.bodyKind) {
|
|
315
|
+
case 'json':
|
|
316
|
+
return 'application/json; charset=utf-8';
|
|
317
|
+
case 'text':
|
|
318
|
+
return 'text/plain; charset=utf-8';
|
|
319
|
+
default:
|
|
320
|
+
return 'application/octet-stream';
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
export function buildMockRouteResponse(route) {
|
|
324
|
+
const contentType = defaultMockContentType(route);
|
|
325
|
+
const responseHeaders = {
|
|
326
|
+
...route.responseHeaders,
|
|
327
|
+
'content-type': contentType,
|
|
328
|
+
};
|
|
329
|
+
let buffer;
|
|
330
|
+
switch (route.bodyKind) {
|
|
331
|
+
case 'json':
|
|
332
|
+
buffer = Buffer.from(JSON.stringify(route.bodyJson ?? null), 'utf8');
|
|
333
|
+
break;
|
|
334
|
+
case 'text':
|
|
335
|
+
buffer = Buffer.from(route.bodyText ?? '', 'utf8');
|
|
336
|
+
break;
|
|
337
|
+
case 'base64':
|
|
338
|
+
buffer = Buffer.from(route.bodyBase64 ?? '', 'base64');
|
|
339
|
+
break;
|
|
340
|
+
case 'file':
|
|
341
|
+
if (!route.bodyFilePath) {
|
|
342
|
+
throw new Error(`Mock route ${route.routeId} has bodyKind=file but no bodyFilePath`);
|
|
343
|
+
}
|
|
344
|
+
buffer = readFileSync(route.bodyFilePath);
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
route,
|
|
349
|
+
buffer,
|
|
350
|
+
contentType,
|
|
351
|
+
responseHeaders,
|
|
352
|
+
responseCode: route.statusCode,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
export function listMockRuns(db, options) {
|
|
356
|
+
const where = [];
|
|
357
|
+
const params = [];
|
|
358
|
+
if (options.routeId) {
|
|
359
|
+
where.push('route_id = ?');
|
|
360
|
+
params.push(options.routeId);
|
|
361
|
+
}
|
|
362
|
+
if (options.sessionId) {
|
|
363
|
+
where.push('session_id = ?');
|
|
364
|
+
params.push(options.sessionId);
|
|
365
|
+
}
|
|
366
|
+
const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
367
|
+
const rows = db.prepare(`
|
|
368
|
+
SELECT run_id, route_id, execution_mode, session_id, tab_id, project_root, started_at, ended_at, status
|
|
369
|
+
FROM mock_runs
|
|
370
|
+
${whereSql}
|
|
371
|
+
ORDER BY started_at DESC, rowid DESC
|
|
372
|
+
LIMIT ? OFFSET ?
|
|
373
|
+
`).all(...params, options.limit + 1, options.offset);
|
|
374
|
+
const hasMore = rows.length > options.limit;
|
|
375
|
+
return {
|
|
376
|
+
runs: rows.slice(0, options.limit).map(mapMockRunRow),
|
|
377
|
+
hasMore,
|
|
378
|
+
nextOffset: hasMore ? options.offset + options.limit : null,
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
export function listMockHits(db, options) {
|
|
382
|
+
const where = [];
|
|
383
|
+
const params = [];
|
|
384
|
+
if (options.routeId) {
|
|
385
|
+
where.push('route_id = ?');
|
|
386
|
+
params.push(options.routeId);
|
|
387
|
+
}
|
|
388
|
+
if (options.runId) {
|
|
389
|
+
where.push('run_id = ?');
|
|
390
|
+
params.push(options.runId);
|
|
391
|
+
}
|
|
392
|
+
const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
393
|
+
const rows = db.prepare(`
|
|
394
|
+
SELECT hit_id, run_id, route_id, ts, request_url, request_method, matched, fulfilled, status_code,
|
|
395
|
+
response_source, error_code, error_message
|
|
396
|
+
FROM mock_hits
|
|
397
|
+
${whereSql}
|
|
398
|
+
ORDER BY ts DESC, rowid DESC
|
|
399
|
+
LIMIT ? OFFSET ?
|
|
400
|
+
`).all(...params, options.limit + 1, options.offset);
|
|
401
|
+
const hasMore = rows.length > options.limit;
|
|
402
|
+
return {
|
|
403
|
+
hits: rows.slice(0, options.limit).map(mapMockHitRow),
|
|
404
|
+
hasMore,
|
|
405
|
+
nextOffset: hasMore ? options.offset + options.limit : null,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=mock-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-store.js","sourceRoot":"","sources":["../src/mock-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,43 @@ export const OVERRIDE_PLAN_AUDIT_KINDS = [
|
|
|
36
36
|
'response-patch',
|
|
37
37
|
'next-source-overlay',
|
|
38
38
|
];
|
|
39
|
+
export const SSR_MOCK_AUDIT_ACTIONS = [
|
|
40
|
+
'discover',
|
|
41
|
+
'apply-config',
|
|
42
|
+
'remove-config',
|
|
43
|
+
];
|
|
44
|
+
export const SSR_MOCK_AUDIT_STATUSES = [
|
|
45
|
+
'succeeded',
|
|
46
|
+
'no_change',
|
|
47
|
+
'not_mockable',
|
|
48
|
+
'not_found',
|
|
49
|
+
];
|
|
50
|
+
export const MOCK_ROUTE_MODES = [
|
|
51
|
+
'browser',
|
|
52
|
+
'ssr',
|
|
53
|
+
'both',
|
|
54
|
+
];
|
|
55
|
+
export const MOCK_ROUTE_MATCH_MODES = [
|
|
56
|
+
'exact',
|
|
57
|
+
'prefix',
|
|
58
|
+
];
|
|
59
|
+
export const MOCK_ROUTE_BODY_KINDS = [
|
|
60
|
+
'json',
|
|
61
|
+
'text',
|
|
62
|
+
'base64',
|
|
63
|
+
'file',
|
|
64
|
+
];
|
|
65
|
+
export const MOCK_ROUTE_SOURCE_KINDS = [
|
|
66
|
+
'manual',
|
|
67
|
+
'captured',
|
|
68
|
+
'patched',
|
|
69
|
+
];
|
|
70
|
+
export const MOCK_RUN_STATUSES = [
|
|
71
|
+
'active',
|
|
72
|
+
'completed',
|
|
73
|
+
'failed',
|
|
74
|
+
'stopped',
|
|
75
|
+
];
|
|
39
76
|
export function isOverridePocRunStatus(value) {
|
|
40
77
|
return typeof value === 'string' && OVERRIDE_POC_RUN_STATUSES.includes(value);
|
|
41
78
|
}
|
|
@@ -48,4 +85,25 @@ export function isOverridePocFailureCode(value) {
|
|
|
48
85
|
export function isOverridePlanAuditKind(value) {
|
|
49
86
|
return typeof value === 'string' && OVERRIDE_PLAN_AUDIT_KINDS.includes(value);
|
|
50
87
|
}
|
|
88
|
+
export function isSsrMockAuditAction(value) {
|
|
89
|
+
return typeof value === 'string' && SSR_MOCK_AUDIT_ACTIONS.includes(value);
|
|
90
|
+
}
|
|
91
|
+
export function isSsrMockAuditStatus(value) {
|
|
92
|
+
return typeof value === 'string' && SSR_MOCK_AUDIT_STATUSES.includes(value);
|
|
93
|
+
}
|
|
94
|
+
export function isMockRouteMode(value) {
|
|
95
|
+
return typeof value === 'string' && MOCK_ROUTE_MODES.includes(value);
|
|
96
|
+
}
|
|
97
|
+
export function isMockRouteMatchMode(value) {
|
|
98
|
+
return typeof value === 'string' && MOCK_ROUTE_MATCH_MODES.includes(value);
|
|
99
|
+
}
|
|
100
|
+
export function isMockRouteBodyKind(value) {
|
|
101
|
+
return typeof value === 'string' && MOCK_ROUTE_BODY_KINDS.includes(value);
|
|
102
|
+
}
|
|
103
|
+
export function isMockRouteSourceKind(value) {
|
|
104
|
+
return typeof value === 'string' && MOCK_ROUTE_SOURCE_KINDS.includes(value);
|
|
105
|
+
}
|
|
106
|
+
export function isMockRunStatus(value) {
|
|
107
|
+
return typeof value === 'string' && MOCK_RUN_STATUSES.includes(value);
|
|
108
|
+
}
|
|
51
109
|
//# sourceMappingURL=override-audit-contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"override-audit-contract.js","sourceRoot":"","sources":["../src/override-audit-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,SAAS;IACT,WAAW;IACX,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,iBAAiB;IACjB,oBAAoB;IACpB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IACvB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,4BAA4B;IAC5B,mBAAmB;IACnB,6BAA6B;IAC7B,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,2BAA2B;IAC3B,+BAA+B;IAC/B,6BAA6B;IAC7B,2BAA2B;IAC3B,kBAAkB;IAClB,mBAAmB;IACnB,SAAS;CACD,CAAC;AAIX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,gBAAgB;IAChB,qBAAqB;CACb,CAAC;
|
|
1
|
+
{"version":3,"file":"override-audit-contract.js","sourceRoot":"","sources":["../src/override-audit-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isOverridePocFailureCode, isOverridePlanAuditKind, } from './override-audit-contract.js';
|
|
1
|
+
import { isOverridePocFailureCode, isOverridePlanAuditKind, isSsrMockAuditAction, isSsrMockAuditStatus, } from './override-audit-contract.js';
|
|
2
2
|
const DEBUGGER_SETUP_FAILURE_CODES = new Set([
|
|
3
3
|
'DEBUGGER_ATTACH_FAILED',
|
|
4
4
|
'DEBUGGER_SETUP_FAILED',
|
|
@@ -105,6 +105,23 @@ function mapRequestRow(row) {
|
|
|
105
105
|
responseCode: row.response_code,
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
|
+
function mapSsrMockAuditRow(row) {
|
|
109
|
+
return {
|
|
110
|
+
auditId: row.audit_id,
|
|
111
|
+
createdAt: row.created_at,
|
|
112
|
+
action: isSsrMockAuditAction(row.action) ? row.action : 'discover',
|
|
113
|
+
status: isSsrMockAuditStatus(row.status) ? row.status : 'succeeded',
|
|
114
|
+
projectRoot: row.project_root,
|
|
115
|
+
targetUrl: row.target_url,
|
|
116
|
+
apiHost: row.api_host,
|
|
117
|
+
envVarName: row.env_var_name,
|
|
118
|
+
envFilePath: row.env_file_path,
|
|
119
|
+
mockBaseUrl: row.mock_base_url,
|
|
120
|
+
rollbackId: row.rollback_id,
|
|
121
|
+
summary: parseJsonValue(row.summary_json),
|
|
122
|
+
result: parseJsonValue(row.result_json),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
108
125
|
function parseCspMetaTags(value) {
|
|
109
126
|
if (!value) {
|
|
110
127
|
return [];
|
|
@@ -285,6 +302,41 @@ export function insertOverridePlanAudit(db, record) {
|
|
|
285
302
|
: encodeJson(record.capturedFromLiveSession), encodeJson(record.rollback), now);
|
|
286
303
|
return record;
|
|
287
304
|
}
|
|
305
|
+
export function insertSsrMockAudit(db, record) {
|
|
306
|
+
const now = Date.now();
|
|
307
|
+
db.prepare(`
|
|
308
|
+
INSERT INTO ssr_mock_audits (
|
|
309
|
+
audit_id,
|
|
310
|
+
created_at,
|
|
311
|
+
action,
|
|
312
|
+
status,
|
|
313
|
+
project_root,
|
|
314
|
+
target_url,
|
|
315
|
+
api_host,
|
|
316
|
+
env_var_name,
|
|
317
|
+
env_file_path,
|
|
318
|
+
mock_base_url,
|
|
319
|
+
rollback_id,
|
|
320
|
+
summary_json,
|
|
321
|
+
result_json,
|
|
322
|
+
updated_at
|
|
323
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
324
|
+
ON CONFLICT(audit_id) DO UPDATE SET
|
|
325
|
+
action = excluded.action,
|
|
326
|
+
status = excluded.status,
|
|
327
|
+
project_root = excluded.project_root,
|
|
328
|
+
target_url = excluded.target_url,
|
|
329
|
+
api_host = excluded.api_host,
|
|
330
|
+
env_var_name = excluded.env_var_name,
|
|
331
|
+
env_file_path = excluded.env_file_path,
|
|
332
|
+
mock_base_url = excluded.mock_base_url,
|
|
333
|
+
rollback_id = excluded.rollback_id,
|
|
334
|
+
summary_json = excluded.summary_json,
|
|
335
|
+
result_json = excluded.result_json,
|
|
336
|
+
updated_at = excluded.updated_at
|
|
337
|
+
`).run(record.auditId, record.createdAt, record.action, record.status, record.projectRoot, record.targetUrl ?? null, record.apiHost ?? null, record.envVarName ?? null, record.envFilePath ?? null, record.mockBaseUrl ?? null, record.rollbackId ?? null, encodeJson(record.summary), encodeJson(record.result), now);
|
|
338
|
+
return record;
|
|
339
|
+
}
|
|
288
340
|
export function listOverridePocRuns(db, sessionId, limit, offset) {
|
|
289
341
|
const rows = db.prepare(`
|
|
290
342
|
SELECT
|
|
@@ -394,6 +446,50 @@ export function listOverridePlanAudits(db, options) {
|
|
|
394
446
|
nextOffset: hasMore ? options.offset + options.limit : null,
|
|
395
447
|
};
|
|
396
448
|
}
|
|
449
|
+
export function listSsrMockAudits(db, options) {
|
|
450
|
+
const where = [];
|
|
451
|
+
const params = [];
|
|
452
|
+
if (options.projectRoot) {
|
|
453
|
+
where.push('project_root = ?');
|
|
454
|
+
params.push(options.projectRoot);
|
|
455
|
+
}
|
|
456
|
+
if (options.rollbackId) {
|
|
457
|
+
where.push('rollback_id = ?');
|
|
458
|
+
params.push(options.rollbackId);
|
|
459
|
+
}
|
|
460
|
+
if (options.envVarName) {
|
|
461
|
+
where.push('env_var_name = ?');
|
|
462
|
+
params.push(options.envVarName);
|
|
463
|
+
}
|
|
464
|
+
const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
465
|
+
const rows = db.prepare(`
|
|
466
|
+
SELECT
|
|
467
|
+
audit_id,
|
|
468
|
+
created_at,
|
|
469
|
+
action,
|
|
470
|
+
status,
|
|
471
|
+
project_root,
|
|
472
|
+
target_url,
|
|
473
|
+
api_host,
|
|
474
|
+
env_var_name,
|
|
475
|
+
env_file_path,
|
|
476
|
+
mock_base_url,
|
|
477
|
+
rollback_id,
|
|
478
|
+
summary_json,
|
|
479
|
+
result_json
|
|
480
|
+
FROM ssr_mock_audits
|
|
481
|
+
${whereSql}
|
|
482
|
+
ORDER BY created_at DESC, rowid DESC
|
|
483
|
+
LIMIT ? OFFSET ?
|
|
484
|
+
`).all(...params, options.limit + 1, options.offset);
|
|
485
|
+
const hasMore = rows.length > options.limit;
|
|
486
|
+
const page = rows.slice(0, options.limit).map(mapSsrMockAuditRow);
|
|
487
|
+
return {
|
|
488
|
+
audits: page,
|
|
489
|
+
hasMore,
|
|
490
|
+
nextOffset: hasMore ? options.offset + options.limit : null,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
397
493
|
export function listOverridePocRequests(db, sessionId, limit, offset, runId) {
|
|
398
494
|
const rows = (runId
|
|
399
495
|
? db.prepare(`
|