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.
@@ -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;AAoEX,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,yBAA+C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,6BAAmD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,0BAAgD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,yBAA+C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvG,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(`