browser-debug-mcp-bridge 1.10.0 → 1.11.1

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.
Files changed (45) hide show
  1. package/README.md +267 -195
  2. package/apps/mcp-server/dist/db/events-repository.js +61 -9
  3. package/apps/mcp-server/dist/db/events-repository.js.map +1 -1
  4. package/apps/mcp-server/dist/db/migrations.js +470 -70
  5. package/apps/mcp-server/dist/db/migrations.js.map +1 -1
  6. package/apps/mcp-server/dist/db/schema.js +134 -1
  7. package/apps/mcp-server/dist/db/schema.js.map +1 -1
  8. package/apps/mcp-server/dist/document-response-rewriter.js +196 -0
  9. package/apps/mcp-server/dist/document-response-rewriter.js.map +1 -0
  10. package/apps/mcp-server/dist/json-rewrite.js +189 -0
  11. package/apps/mcp-server/dist/json-rewrite.js.map +1 -0
  12. package/apps/mcp-server/dist/main.js +339 -2
  13. package/apps/mcp-server/dist/main.js.map +1 -1
  14. package/apps/mcp-server/dist/mcp/server.js +2712 -246
  15. package/apps/mcp-server/dist/mcp/server.js.map +1 -1
  16. package/apps/mcp-server/dist/next-asset-mapper.js +701 -0
  17. package/apps/mcp-server/dist/next-asset-mapper.js.map +1 -0
  18. package/apps/mcp-server/dist/next-source-override-planner.js +601 -0
  19. package/apps/mcp-server/dist/next-source-override-planner.js.map +1 -0
  20. package/apps/mcp-server/dist/override-audit-contract.js +51 -0
  21. package/apps/mcp-server/dist/override-audit-contract.js.map +1 -0
  22. package/apps/mcp-server/dist/override-audit.js +740 -0
  23. package/apps/mcp-server/dist/override-audit.js.map +1 -0
  24. package/apps/mcp-server/dist/override-capabilities.js +157 -0
  25. package/apps/mcp-server/dist/override-capabilities.js.map +1 -0
  26. package/apps/mcp-server/dist/override-observed-assets.js +179 -0
  27. package/apps/mcp-server/dist/override-observed-assets.js.map +1 -0
  28. package/apps/mcp-server/dist/override-poc.js +336 -0
  29. package/apps/mcp-server/dist/override-poc.js.map +1 -0
  30. package/apps/mcp-server/dist/override-profile-generator.js +403 -0
  31. package/apps/mcp-server/dist/override-profile-generator.js.map +1 -0
  32. package/apps/mcp-server/dist/override-response-planner.js +559 -0
  33. package/apps/mcp-server/dist/override-response-planner.js.map +1 -0
  34. package/apps/mcp-server/dist/override-rule-types.js +32 -0
  35. package/apps/mcp-server/dist/override-rule-types.js.map +1 -0
  36. package/apps/mcp-server/dist/retention.js +4 -3
  37. package/apps/mcp-server/dist/retention.js.map +1 -1
  38. package/apps/mcp-server/dist/rsc-flight-patch-safety.js +269 -0
  39. package/apps/mcp-server/dist/rsc-flight-patch-safety.js.map +1 -0
  40. package/apps/mcp-server/dist/websocket/messages.js +5 -0
  41. package/apps/mcp-server/dist/websocket/messages.js.map +1 -1
  42. package/apps/mcp-server/dist/websocket/websocket-server.js +10 -0
  43. package/apps/mcp-server/dist/websocket/websocket-server.js.map +1 -1
  44. package/apps/mcp-server/package.json +1 -0
  45. package/package.json +12 -1
@@ -0,0 +1,336 @@
1
+ import { existsSync, readFileSync, statSync } from 'fs';
2
+ import { dirname, isAbsolute, resolve } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { normalizeOverrideMatchMode, normalizeOverridePocRuleType, normalizeOverrideRequestMethod, } from './override-rule-types.js';
5
+ const DEFAULT_CONTENT_TYPE = 'application/javascript; charset=utf-8';
6
+ const DEFAULT_CONFIG_PATH = fileURLToPath(new URL('../../../override-poc.config.json', import.meta.url));
7
+ const LOCAL_CONFIG_FILENAME = 'override-poc.local.json';
8
+ function resolveEnvConfigPath(env) {
9
+ const raw = env.OVERRIDE_POC_CONFIG_PATH;
10
+ if (typeof raw !== 'string') {
11
+ return undefined;
12
+ }
13
+ const trimmed = raw.trim();
14
+ return trimmed.length > 0 ? trimmed : undefined;
15
+ }
16
+ function isRecord(value) {
17
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
18
+ }
19
+ function requireString(value, fieldName) {
20
+ if (typeof value !== 'string' || value.trim().length === 0) {
21
+ throw new Error(`override-poc config field "${fieldName}" must be a non-empty string`);
22
+ }
23
+ return value.trim();
24
+ }
25
+ function requireBoolean(value, fieldName) {
26
+ if (typeof value !== 'boolean') {
27
+ throw new Error(`override-poc config field "${fieldName}" must be a boolean`);
28
+ }
29
+ return value;
30
+ }
31
+ function optionalBoolean(value, fallback, fieldName) {
32
+ if (value === undefined) {
33
+ return fallback;
34
+ }
35
+ if (typeof value !== 'boolean') {
36
+ throw new Error(`override-poc config field "${fieldName}" must be a boolean when provided`);
37
+ }
38
+ return value;
39
+ }
40
+ function optionalString(value, fallback) {
41
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : fallback;
42
+ }
43
+ function optionalFiniteNumber(value, fieldName) {
44
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
45
+ throw new Error(`override-poc config field "${fieldName}" must be a non-negative finite number`);
46
+ }
47
+ return Math.floor(value);
48
+ }
49
+ function parseStringRecord(value, fieldName) {
50
+ if (value === undefined) {
51
+ return undefined;
52
+ }
53
+ if (!isRecord(value)) {
54
+ throw new Error(`override-poc config field "${fieldName}" must be an object when provided`);
55
+ }
56
+ const parsed = {};
57
+ for (const [key, rawValue] of Object.entries(value)) {
58
+ if (typeof rawValue !== 'string') {
59
+ throw new Error(`override-poc config field "${fieldName}.${key}" must be a string`);
60
+ }
61
+ parsed[key.toLowerCase()] = rawValue;
62
+ }
63
+ return parsed;
64
+ }
65
+ function parseRscFlightMetadata(value, fieldName) {
66
+ if (value === undefined) {
67
+ return undefined;
68
+ }
69
+ if (!isRecord(value)) {
70
+ throw new Error(`override-poc config field "${fieldName}" must be an object when provided`);
71
+ }
72
+ const productionMode = requireString(value.productionMode, `${fieldName}.productionMode`);
73
+ if (productionMode !== 'literal-response-v1' && productionMode !== 'structured-flight-v1') {
74
+ throw new Error(`override-poc config field "${fieldName}.productionMode" must be "literal-response-v1" or "structured-flight-v1"`);
75
+ }
76
+ const source = requireString(value.source, `${fieldName}.source`);
77
+ if (source !== 'cdp-response' && source !== 'extension-fetch') {
78
+ throw new Error(`override-poc config field "${fieldName}.source" must be "cdp-response" or "extension-fetch"`);
79
+ }
80
+ const patchKind = requireString(value.patchKind, `${fieldName}.patchKind`);
81
+ if (patchKind !== 'literal-text' && patchKind !== 'string-value-text') {
82
+ throw new Error(`override-poc config field "${fieldName}.patchKind" must be "literal-text" or "string-value-text"`);
83
+ }
84
+ if (productionMode === 'structured-flight-v1' && patchKind !== 'string-value-text'
85
+ || productionMode === 'literal-response-v1' && patchKind !== 'literal-text') {
86
+ throw new Error(`override-poc config field "${fieldName}" has an unsupported RSC productionMode/patchKind combination`);
87
+ }
88
+ if (!Array.isArray(value.textPatches) || value.textPatches.length === 0) {
89
+ throw new Error(`override-poc config field "${fieldName}.textPatches" must include at least one patch`);
90
+ }
91
+ return {
92
+ productionMode,
93
+ source,
94
+ patchKind,
95
+ textPatches: value.textPatches.map((entry, index) => {
96
+ if (!isRecord(entry)) {
97
+ throw new Error(`override-poc config field "${fieldName}.textPatches[${index}]" must be an object`);
98
+ }
99
+ const expectedCount = optionalFiniteNumber(entry.expectedCount, `${fieldName}.textPatches[${index}].expectedCount`);
100
+ return {
101
+ search: requireString(entry.search, `${fieldName}.textPatches[${index}].search`),
102
+ replacement: typeof entry.replacement === 'string' ? entry.replacement : requireString(entry.replacement, `${fieldName}.textPatches[${index}].replacement`),
103
+ expectedCount,
104
+ };
105
+ }),
106
+ originalSha256: requireString(value.originalSha256, `${fieldName}.originalSha256`),
107
+ patchedSha256: requireString(value.patchedSha256, `${fieldName}.patchedSha256`),
108
+ originalBytes: optionalFiniteNumber(value.originalBytes, `${fieldName}.originalBytes`),
109
+ patchedBytes: optionalFiniteNumber(value.patchedBytes, `${fieldName}.patchedBytes`),
110
+ contentType: requireString(value.contentType, `${fieldName}.contentType`),
111
+ requestHeaders: parseStringRecord(value.requestHeaders, `${fieldName}.requestHeaders`),
112
+ };
113
+ }
114
+ function resolveTargetAssetUrl(raw, fieldName) {
115
+ const targetAssetUrl = typeof raw.targetAssetUrl === 'string' ? raw.targetAssetUrl : undefined;
116
+ const targetUrl = typeof raw.targetUrl === 'string' ? raw.targetUrl : undefined;
117
+ return requireString(targetAssetUrl ?? targetUrl, fieldName);
118
+ }
119
+ function parseRule(raw, index) {
120
+ if (!isRecord(raw)) {
121
+ throw new Error(`override-poc profile rule at index ${index} must be a JSON object`);
122
+ }
123
+ return {
124
+ ruleId: optionalString(raw.ruleId, `rule-${index + 1}`),
125
+ enabled: optionalBoolean(raw.enabled, true, `rules[${index}].enabled`),
126
+ ruleType: normalizeOverridePocRuleType(raw.ruleType),
127
+ requestMethod: normalizeOverrideRequestMethod(raw.requestMethod),
128
+ requestHeaders: parseStringRecord(raw.requestHeaders, `rules[${index}].requestHeaders`),
129
+ matchMode: normalizeOverrideMatchMode(raw.matchMode),
130
+ allowExperimentalRscFlightFulfillment: optionalBoolean(raw.allowExperimentalRscFlightFulfillment, false, `rules[${index}].allowExperimentalRscFlightFulfillment`),
131
+ rscFlight: parseRscFlightMetadata(raw.rscFlight, `rules[${index}].rscFlight`),
132
+ targetAssetUrl: resolveTargetAssetUrl(raw, `rules[${index}].targetAssetUrl`),
133
+ localFilePath: requireString(raw.localFilePath, `rules[${index}].localFilePath`),
134
+ contentType: optionalString(raw.contentType, DEFAULT_CONTENT_TYPE),
135
+ };
136
+ }
137
+ function parseProfile(raw, index, rootAutoReload) {
138
+ if (!isRecord(raw)) {
139
+ throw new Error(`override-poc profile at index ${index} must be a JSON object`);
140
+ }
141
+ const rules = Array.isArray(raw.rules)
142
+ ? raw.rules.map((rule, ruleIndex) => parseRule(rule, ruleIndex))
143
+ : [];
144
+ if (rules.length === 0) {
145
+ throw new Error(`override-poc profile at index ${index} must define at least one rule`);
146
+ }
147
+ return {
148
+ profileId: optionalString(raw.profileId, `profile-${index + 1}`),
149
+ name: optionalString(raw.name, `Profile ${index + 1}`),
150
+ enabled: optionalBoolean(raw.enabled, true, `profiles[${index}].enabled`),
151
+ autoReload: optionalBoolean(raw.autoReload, rootAutoReload, `profiles[${index}].autoReload`),
152
+ rules,
153
+ };
154
+ }
155
+ function parseLegacyConfig(raw) {
156
+ const enabled = requireBoolean(raw.enabled, 'enabled');
157
+ const autoReload = requireBoolean(raw.autoReload, 'autoReload');
158
+ const rule = {
159
+ ruleId: optionalString(raw.ruleId, 'default'),
160
+ enabled: true,
161
+ ruleType: normalizeOverridePocRuleType(raw.ruleType),
162
+ requestMethod: normalizeOverrideRequestMethod(raw.requestMethod),
163
+ requestHeaders: parseStringRecord(raw.requestHeaders, 'requestHeaders'),
164
+ matchMode: normalizeOverrideMatchMode(raw.matchMode),
165
+ allowExperimentalRscFlightFulfillment: optionalBoolean(raw.allowExperimentalRscFlightFulfillment, false, 'allowExperimentalRscFlightFulfillment'),
166
+ rscFlight: parseRscFlightMetadata(raw.rscFlight, 'rscFlight'),
167
+ targetAssetUrl: resolveTargetAssetUrl(raw, 'targetAssetUrl'),
168
+ localFilePath: requireString(raw.localFilePath, 'localFilePath'),
169
+ contentType: optionalString(raw.contentType, DEFAULT_CONTENT_TYPE),
170
+ };
171
+ const profileId = optionalString(raw.profileId, 'poc');
172
+ return {
173
+ enabled,
174
+ activeProfileId: profileId,
175
+ profiles: [{
176
+ profileId,
177
+ name: optionalString(raw.name, 'Override POC'),
178
+ enabled: true,
179
+ autoReload,
180
+ rules: [rule],
181
+ }],
182
+ };
183
+ }
184
+ export function parseOverridePocConfig(raw) {
185
+ if (!isRecord(raw)) {
186
+ throw new Error('override-poc config must be a JSON object');
187
+ }
188
+ if (!Array.isArray(raw.profiles)) {
189
+ return parseLegacyConfig(raw);
190
+ }
191
+ const enabled = requireBoolean(raw.enabled, 'enabled');
192
+ const rootAutoReload = optionalBoolean(raw.autoReload, true, 'autoReload');
193
+ const profiles = raw.profiles.map((profile, index) => parseProfile(profile, index, rootAutoReload));
194
+ if (profiles.length === 0) {
195
+ throw new Error('override-poc config must define at least one profile');
196
+ }
197
+ const activeProfileId = optionalString(raw.activeProfileId, profiles[0]?.profileId ?? 'profile-1');
198
+ if (!profiles.some((profile) => profile.profileId === activeProfileId)) {
199
+ throw new Error(`override-poc activeProfileId does not match any profile: ${activeProfileId}`);
200
+ }
201
+ return {
202
+ enabled,
203
+ activeProfileId,
204
+ profiles,
205
+ };
206
+ }
207
+ export function resolveOverridePocLocalFilePath(config, configPath) {
208
+ const resolvedConfigPath = resolveOverridePocConfigPath(configPath);
209
+ if (isAbsolute(config.localFilePath)) {
210
+ return config.localFilePath;
211
+ }
212
+ return resolve(dirname(resolvedConfigPath), config.localFilePath);
213
+ }
214
+ export function getOverridePocLocalConfigPath(defaultConfigPath = DEFAULT_CONFIG_PATH) {
215
+ return resolve(dirname(defaultConfigPath), LOCAL_CONFIG_FILENAME);
216
+ }
217
+ export function resolveOverridePocConfigPath(configPath, env = process.env, defaultConfigPath = DEFAULT_CONFIG_PATH) {
218
+ if (typeof configPath === 'string' && configPath.trim().length > 0) {
219
+ return configPath.trim();
220
+ }
221
+ const envConfigPath = resolveEnvConfigPath(env);
222
+ if (envConfigPath) {
223
+ return envConfigPath;
224
+ }
225
+ const localConfigPath = getOverridePocLocalConfigPath(defaultConfigPath);
226
+ if (existsSync(localConfigPath)) {
227
+ return localConfigPath;
228
+ }
229
+ return defaultConfigPath;
230
+ }
231
+ export function loadOverridePocConfig(configPath) {
232
+ const resolvedConfigPath = resolveOverridePocConfigPath(configPath);
233
+ let rawText;
234
+ try {
235
+ rawText = readFileSync(resolvedConfigPath, 'utf8');
236
+ }
237
+ catch (error) {
238
+ throw new Error(`Unable to read override-poc config at ${resolvedConfigPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
239
+ }
240
+ let parsed;
241
+ try {
242
+ parsed = JSON.parse(rawText);
243
+ }
244
+ catch (error) {
245
+ throw new Error(`Invalid JSON in override-poc config at ${resolvedConfigPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
246
+ }
247
+ return parseOverridePocConfig(parsed);
248
+ }
249
+ function resolveRuleSummary(rule, configPath) {
250
+ const resolvedLocalFilePath = resolveOverridePocLocalFilePath(rule, configPath);
251
+ const fileExists = existsSync(resolvedLocalFilePath);
252
+ const fileSizeBytes = fileExists ? statSync(resolvedLocalFilePath).size : null;
253
+ return {
254
+ ...rule,
255
+ resolvedLocalFilePath,
256
+ fileExists,
257
+ fileSizeBytes,
258
+ };
259
+ }
260
+ function resolveProfileSummary(profile, configPath) {
261
+ const rules = profile.rules.map((rule) => resolveRuleSummary(rule, configPath));
262
+ const enabledRules = rules.filter((rule) => rule.enabled);
263
+ return {
264
+ ...profile,
265
+ rules,
266
+ ruleCount: rules.length,
267
+ enabledRuleCount: enabledRules.length,
268
+ fileExists: enabledRules.length > 0 && enabledRules.every((rule) => rule.fileExists),
269
+ };
270
+ }
271
+ export function getOverridePocConfigSummary(configPath) {
272
+ const resolvedConfigPath = resolveOverridePocConfigPath(configPath);
273
+ const config = loadOverridePocConfig(resolvedConfigPath);
274
+ const profiles = config.profiles.map((profile) => resolveProfileSummary(profile, resolvedConfigPath));
275
+ const activeProfile = profiles.find((profile) => profile.profileId === config.activeProfileId) ?? profiles[0];
276
+ if (!activeProfile) {
277
+ throw new Error('override-poc config must define at least one profile');
278
+ }
279
+ const enabledRules = activeProfile.rules.filter((rule) => rule.enabled);
280
+ const primaryRule = enabledRules[0] ?? activeProfile.rules[0];
281
+ if (!primaryRule) {
282
+ throw new Error(`override-poc active profile "${activeProfile.profileId}" must define at least one rule`);
283
+ }
284
+ const enabled = config.enabled && activeProfile.enabled && enabledRules.length > 0;
285
+ const fileExists = enabledRules.length > 0 && enabledRules.every((rule) => rule.fileExists);
286
+ return {
287
+ configEnabled: config.enabled,
288
+ enabled,
289
+ activeProfileId: activeProfile.profileId,
290
+ profileId: activeProfile.profileId,
291
+ profileName: activeProfile.name,
292
+ autoReload: activeProfile.autoReload,
293
+ configPath: resolvedConfigPath,
294
+ profiles,
295
+ rules: activeProfile.rules,
296
+ ruleCount: activeProfile.ruleCount,
297
+ enabledRuleCount: activeProfile.enabledRuleCount,
298
+ ruleType: primaryRule.ruleType,
299
+ requestMethod: primaryRule.requestMethod,
300
+ matchMode: primaryRule.matchMode,
301
+ targetAssetUrl: primaryRule.targetAssetUrl,
302
+ localFilePath: primaryRule.localFilePath,
303
+ resolvedLocalFilePath: primaryRule.resolvedLocalFilePath,
304
+ contentType: primaryRule.contentType,
305
+ fileExists,
306
+ fileSizeBytes: primaryRule.fileSizeBytes,
307
+ };
308
+ }
309
+ export function getOverridePocAssetResponse(assetUrl, configPath, requestMethod = 'GET') {
310
+ const summary = getOverridePocConfigSummary(configPath);
311
+ if (!summary.enabled) {
312
+ throw new Error(`Override POC is disabled in ${summary.configPath}`);
313
+ }
314
+ const normalizedRequestMethod = normalizeOverrideRequestMethod(requestMethod);
315
+ const rule = summary.rules.find((candidate) => {
316
+ return candidate.targetAssetUrl === assetUrl
317
+ && normalizeOverrideRequestMethod(candidate.requestMethod) === normalizedRequestMethod;
318
+ });
319
+ if (!rule) {
320
+ throw new Error('Requested assetUrl/requestMethod does not match any enabled rule in the active override profile');
321
+ }
322
+ if (!rule.enabled) {
323
+ throw new Error(`Override rule is disabled: ${rule.ruleId}`);
324
+ }
325
+ if (!rule.fileExists) {
326
+ throw new Error(`Configured local file does not exist: ${rule.resolvedLocalFilePath}`);
327
+ }
328
+ const buffer = readFileSync(rule.resolvedLocalFilePath);
329
+ return {
330
+ buffer,
331
+ contentType: rule.contentType,
332
+ summary,
333
+ rule,
334
+ };
335
+ }
336
+ //# sourceMappingURL=override-poc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-poc.js","sourceRoot":"","sources":["../src/override-poc.ts"],"names":[],"mappings":"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"}