@browserbridge/bbx 1.8.0 → 1.10.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.
Files changed (48) hide show
  1. package/PRIVACY.md +29 -3
  2. package/README.md +10 -3
  3. package/SECURITY.md +12 -0
  4. package/package.json +7 -1
  5. package/packages/agent-client/src/cli-args.js +70 -6
  6. package/packages/agent-client/src/cli-batch.js +127 -59
  7. package/packages/agent-client/src/cli-helpers.js +8 -0
  8. package/packages/agent-client/src/cli-output.js +8 -1
  9. package/packages/agent-client/src/cli-setup-commands.js +3 -1
  10. package/packages/agent-client/src/cli.js +254 -26
  11. package/packages/agent-client/src/client.js +156 -3
  12. package/packages/agent-client/src/command-registry.js +14 -4
  13. package/packages/agent-client/src/config.js +195 -0
  14. package/packages/agent-client/src/mcp-config.js +8 -8
  15. package/packages/agent-client/src/npm-self-update.js +305 -0
  16. package/packages/agent-client/src/remotes.js +4 -2
  17. package/packages/agent-client/src/runtime.js +99 -7
  18. package/packages/agent-client/src/types.ts +38 -0
  19. package/packages/mcp-server/src/guidance.js +37 -6
  20. package/packages/mcp-server/src/handlers-capture.js +29 -2
  21. package/packages/mcp-server/src/handlers-dom.js +54 -3
  22. package/packages/mcp-server/src/handlers-page.js +333 -60
  23. package/packages/mcp-server/src/handlers-utils.js +141 -151
  24. package/packages/mcp-server/src/handlers.js +17 -4
  25. package/packages/mcp-server/src/server.js +269 -51
  26. package/packages/mcp-server/src/toolset.js +48 -0
  27. package/packages/native-host/src/artifact-store.js +353 -0
  28. package/packages/native-host/src/config.js +9 -1
  29. package/packages/native-host/src/daemon-logger.js +3 -1
  30. package/packages/native-host/src/daemon.js +457 -27
  31. package/packages/native-host/src/dom-baseline-owners.js +210 -0
  32. package/packages/native-host/src/native-host.js +38 -29
  33. package/packages/protocol/src/budget-presets.js +182 -0
  34. package/packages/protocol/src/capability-values.js +2 -0
  35. package/packages/protocol/src/defaults.js +28 -0
  36. package/packages/protocol/src/errors.js +48 -5
  37. package/packages/protocol/src/har.js +34 -0
  38. package/packages/protocol/src/incidental-sanitizer.js +197 -0
  39. package/packages/protocol/src/index.js +4 -0
  40. package/packages/protocol/src/json-lines.js +3 -2
  41. package/packages/protocol/src/protocol.js +316 -6
  42. package/packages/protocol/src/recovery-telemetry.js +302 -0
  43. package/packages/protocol/src/registry.js +226 -6
  44. package/packages/protocol/src/summary.js +116 -25
  45. package/packages/protocol/src/types.ts +490 -4
  46. package/skills/browser-bridge/SKILL.md +26 -8
  47. package/skills/browser-bridge/references/protocol.md +125 -15
  48. package/skills/browser-bridge/references/token-efficiency.md +17 -7
@@ -29,7 +29,8 @@ export type Capability =
29
29
  | 'tabs.manage'
30
30
  | 'performance.read'
31
31
  | 'network.read'
32
- | 'network.intercept';
32
+ | 'network.intercept'
33
+ | 'sensitive.read';
33
34
 
34
35
  export type ErrorCode =
35
36
  | 'ACCESS_DENIED'
@@ -45,7 +46,15 @@ export type ErrorCode =
45
46
  | 'DIALOG_NOT_OPEN'
46
47
  | 'DIALOG_ACTION_CONFLICT'
47
48
  | 'RESULT_TRUNCATED'
48
- | 'RATE_LIMITED'
49
+ | 'RESULT_TOO_LARGE'
50
+ | 'SENSITIVE_TARGET_NOT_FOUND'
51
+ | 'CONTENT_SCRIPT_UNAVAILABLE'
52
+ | 'ARTIFACT_NOT_FOUND'
53
+ | 'ARTIFACT_QUOTA_EXCEEDED'
54
+ | 'ARTIFACT_TRANSFER_INVALID'
55
+ | 'DOM_BASELINE_NOT_FOUND'
56
+ | 'DOM_BASELINE_INVALIDATED'
57
+ | 'DOM_BASELINE_QUOTA_EXCEEDED'
49
58
  | 'INTERNAL_ERROR'
50
59
  | 'INVALID_REQUEST'
51
60
  | 'NATIVE_HOST_UNAVAILABLE'
@@ -54,6 +63,7 @@ export type ErrorCode =
54
63
 
55
64
  export type BridgeMethod =
56
65
  | 'access.request'
66
+ | 'protocol.describe'
57
67
  | 'tabs.list'
58
68
  | 'tabs.create'
59
69
  | 'tabs.close'
@@ -67,9 +77,11 @@ export type BridgeMethod =
67
77
  | 'page.handle_dialog'
68
78
  | 'page.wait_for_load_state'
69
79
  | 'page.get_storage'
80
+ | 'sensitive.read'
70
81
  | 'page.get_text'
71
82
  | 'page.extract_content'
72
83
  | 'page.get_network'
84
+ | 'network.export_har'
73
85
  | 'network.intercept.add'
74
86
  | 'network.intercept.remove'
75
87
  | 'network.intercept.list'
@@ -79,6 +91,10 @@ export type BridgeMethod =
79
91
  | 'navigation.go_back'
80
92
  | 'navigation.go_forward'
81
93
  | 'dom.query'
94
+ | 'dom.baseline.create'
95
+ | 'dom.baseline.compare'
96
+ | 'dom.baseline.describe'
97
+ | 'dom.baseline.release'
82
98
  | 'dom.describe'
83
99
  | 'dom.get_text'
84
100
  | 'dom.get_attributes'
@@ -106,6 +122,8 @@ export type BridgeMethod =
106
122
  | 'screenshot.capture_region'
107
123
  | 'screenshot.capture_element'
108
124
  | 'screenshot.capture_full_page'
125
+ | 'artifact.read'
126
+ | 'artifact.delete'
109
127
  | 'patch.apply_styles'
110
128
  | 'patch.apply_dom'
111
129
  | 'patch.list'
@@ -142,9 +160,44 @@ export interface BridgeMeta {
142
160
  budget_applied?: boolean;
143
161
  budget_truncated?: boolean;
144
162
  continuation_hint?: string | null;
163
+ automatic_retry?: { attempt: 2; reason: 'retryable_error' };
164
+ stale_recovery?: 'success' | 'failure';
145
165
  [key: string]: unknown;
146
166
  }
147
167
 
168
+ export type RecoveryScope = 'routedExtension' | 'daemon';
169
+
170
+ export type RecoveryEventKind =
171
+ | 'automatic_mcp_retry'
172
+ | 'stale_ref_recovery'
173
+ | 'debugger_reattach'
174
+ | 'content_script_reinjection'
175
+ | 'native_host_reconnect'
176
+ | 'request_outcome';
177
+
178
+ export interface RecoveryEventSummary {
179
+ attempts: number;
180
+ successes: number;
181
+ failures: number;
182
+ pending: number;
183
+ saturated: boolean;
184
+ successRate: number | null;
185
+ failureRate: number | null;
186
+ activeLoop: boolean;
187
+ lastEventAt: number | null;
188
+ }
189
+
190
+ export interface RecoveryTelemetrySummary {
191
+ scope: RecoveryScope;
192
+ windowMs: number;
193
+ bucketMs: number;
194
+ loopWindowMs: number;
195
+ loopThreshold: number;
196
+ asOf: number;
197
+ activeLoop: boolean;
198
+ events: Record<RecoveryEventKind, RecoveryEventSummary>;
199
+ }
200
+
148
201
  export interface BridgeParams {
149
202
  [key: string]: unknown;
150
203
  }
@@ -223,6 +276,147 @@ export interface NormalizedDomQuery extends BridgeParams {
223
276
  budget: Budget;
224
277
  }
225
278
 
279
+ export interface DomBaselineCreateParams {
280
+ selector?: string;
281
+ maxNodes?: number;
282
+ maxDepth?: number;
283
+ textBudget?: number;
284
+ attributeAllowlist?: string[];
285
+ }
286
+
287
+ export interface NormalizedDomBaselineCreateParams extends BridgeParams {
288
+ selector: string;
289
+ maxNodes: number;
290
+ maxDepth: number;
291
+ textBudget: number;
292
+ attributeAllowlist: string[];
293
+ }
294
+
295
+ export interface DomBaselineCompareParams {
296
+ baselineId?: string;
297
+ maxChanges?: number;
298
+ }
299
+
300
+ export interface NormalizedDomBaselineCompareParams extends BridgeParams {
301
+ baselineId: string;
302
+ maxChanges: number;
303
+ }
304
+
305
+ export interface DomBaselineHandleParams {
306
+ baselineId?: string;
307
+ }
308
+
309
+ export interface NormalizedDomBaselineHandleParams extends BridgeParams {
310
+ baselineId: string;
311
+ }
312
+
313
+ export interface DomBaselineOptions {
314
+ maxNodes: number;
315
+ maxDepth: number;
316
+ textBudget: number;
317
+ attributeAllowlist: string[];
318
+ }
319
+
320
+ export interface DomBaselineScope {
321
+ windowId: number;
322
+ tabId: number;
323
+ frameId: number;
324
+ documentToken: string;
325
+ selector: string;
326
+ representation: 'semantic-dom-v1';
327
+ }
328
+
329
+ export interface DomBaselineSnapshotStats {
330
+ nodeCount: number;
331
+ byteLength: number;
332
+ digest: string;
333
+ }
334
+
335
+ export interface DomBaselineDescriptor {
336
+ baselineId: string;
337
+ createdAt: string;
338
+ expiresAt: string;
339
+ scope: DomBaselineScope;
340
+ options: DomBaselineOptions;
341
+ snapshot: DomBaselineSnapshotStats;
342
+ evicted?: Array<{
343
+ baselineId: string;
344
+ reason: 'per_tab_quota' | 'global_quota';
345
+ }>;
346
+ }
347
+
348
+ export type DomBaselineCreateResult = DomBaselineDescriptor;
349
+ export type DomBaselineDescribeResult = DomBaselineDescriptor;
350
+
351
+ export interface DomBaselineSemanticNodeEvidence {
352
+ tag: string;
353
+ role: string | null;
354
+ name: string | null;
355
+ text: string;
356
+ attributes: Record<string, string>;
357
+ depth: number;
358
+ }
359
+
360
+ export type DomBaselineNodeEvidence = DomBaselineSemanticNodeEvidence;
361
+
362
+ export interface DomBaselineChangedNode {
363
+ fields: string[];
364
+ before: DomBaselineSemanticNodeEvidence;
365
+ after: DomBaselineSemanticNodeEvidence;
366
+ }
367
+
368
+ export interface DomBaselineNodeLocation {
369
+ ancestry: string[];
370
+ order: number;
371
+ }
372
+
373
+ export interface DomBaselineMovedNode {
374
+ node: DomBaselineSemanticNodeEvidence;
375
+ from: DomBaselineNodeLocation;
376
+ to: DomBaselineNodeLocation;
377
+ }
378
+
379
+ export interface DomBaselineChangeCounts {
380
+ added: number;
381
+ removed: number;
382
+ changed: number;
383
+ moved: number;
384
+ unchanged: number;
385
+ total: number;
386
+ }
387
+
388
+ export interface DomBaselineReturnedCounts {
389
+ added: number;
390
+ removed: number;
391
+ changed: number;
392
+ moved: number;
393
+ total: number;
394
+ }
395
+
396
+ export interface DomBaselineCompareResult {
397
+ baselineId: string;
398
+ equal: boolean;
399
+ comparedAt: string;
400
+ counts: DomBaselineChangeCounts;
401
+ returnedCounts: DomBaselineReturnedCounts;
402
+ added: DomBaselineSemanticNodeEvidence[];
403
+ removed: DomBaselineSemanticNodeEvidence[];
404
+ changed: DomBaselineChangedNode[];
405
+ moved: DomBaselineMovedNode[];
406
+ truncated: boolean;
407
+ omittedChanges: number;
408
+ ambiguity: {
409
+ count: number;
410
+ examples: DomBaselineSemanticNodeEvidence[];
411
+ };
412
+ guidance: string;
413
+ }
414
+
415
+ export interface DomBaselineReleaseResult {
416
+ baselineId: string;
417
+ released: boolean;
418
+ }
419
+
226
420
  export interface DomFindResult {
227
421
  found: boolean;
228
422
  nodes: Record<string, unknown>[];
@@ -312,6 +506,10 @@ export interface CdpNodeIdParams {
312
506
  nodeId?: number;
313
507
  }
314
508
 
509
+ export interface CdpDomSnapshotParams {
510
+ computedStyles?: string[];
511
+ }
512
+
315
513
  export interface NormalizedCdpDispatchKeyEventParams extends BridgeParams {
316
514
  key: string;
317
515
  code: string;
@@ -322,6 +520,10 @@ export interface NormalizedCdpNodeIdParams extends BridgeParams {
322
520
  nodeId: number;
323
521
  }
324
522
 
523
+ export interface NormalizedCdpDomSnapshotParams extends BridgeParams {
524
+ computedStyles: string[];
525
+ }
526
+
325
527
  export interface CheckedActionParams {
326
528
  target?: InputTarget;
327
529
  checked?: boolean;
@@ -594,10 +796,31 @@ export interface NormalizedStorageParams extends BridgeParams {
594
796
  keys: string[] | null;
595
797
  }
596
798
 
799
+ export type SensitiveStorageSource = 'local_storage' | 'session_storage';
800
+
801
+ export interface SensitiveReadParams {
802
+ source: SensitiveStorageSource;
803
+ key: string;
804
+ }
805
+
806
+ export interface NormalizedSensitiveReadParams extends BridgeParams {
807
+ source: SensitiveStorageSource;
808
+ key: string;
809
+ maxBytes: number;
810
+ }
811
+
812
+ export interface SensitiveReadResult {
813
+ source: SensitiveStorageSource;
814
+ value: string;
815
+ exact: true;
816
+ }
817
+
597
818
  export type ExtractContentFormat = 'text' | 'markdown';
598
819
  export type ExtractContentConsistency = 'best_effort' | 'settled';
599
820
  export type ExtractContentSource = 'readability' | 'semantic-root' | 'body';
600
821
  export type ScreenshotFormat = 'png' | 'jpeg' | 'webp';
822
+ export type ScreenshotDelivery = 'auto' | 'inline' | 'artifact';
823
+ export type ArtifactKind = 'screenshot' | 'har';
601
824
 
602
825
  export interface ExtractContentParams {
603
826
  format?: ExtractContentFormat;
@@ -620,22 +843,62 @@ export interface NormalizedExtractContentParams extends BridgeParams {
620
843
  export interface ScreenshotParams extends BridgeParams {
621
844
  format?: ScreenshotFormat;
622
845
  quality?: number;
846
+ delivery?: ScreenshotDelivery;
847
+ scale?: number;
623
848
  }
624
849
 
625
850
  export interface NormalizedScreenshotParams extends BridgeParams {
626
851
  format: ScreenshotFormat;
627
852
  quality: number | null;
853
+ delivery: ScreenshotDelivery;
854
+ scale: number;
628
855
  }
629
856
 
630
- export interface ScreenshotResult {
631
- image: string;
857
+ export interface ArtifactDescriptor<K extends ArtifactKind = ArtifactKind> {
858
+ artifactId: string;
859
+ kind: K;
860
+ mimeType: string;
861
+ byteLength: number;
862
+ sha256: string;
863
+ chunkSize: number;
864
+ chunkCount: number;
865
+ createdAt: string;
866
+ expiresAt: string;
867
+ }
868
+
869
+ export interface ScreenshotMetadata {
632
870
  mimeType: `image/${ScreenshotFormat}`;
633
871
  format: ScreenshotFormat;
872
+ byteLength: number;
873
+ dimensions: { width: number; height: number };
634
874
  rect: { x: number; y: number; width: number; height: number; scale: number };
635
875
  complete: boolean;
636
876
  clipped: boolean;
637
877
  }
638
878
 
879
+ export type ScreenshotResult =
880
+ | (ScreenshotMetadata & { delivery: 'inline'; image: string })
881
+ | (ScreenshotMetadata & {
882
+ delivery: 'artifact';
883
+ artifact: ArtifactDescriptor<'screenshot'>;
884
+ });
885
+
886
+ export interface ArtifactReadParams extends BridgeParams {
887
+ artifactId?: string;
888
+ offset?: number;
889
+ maxBytes?: number;
890
+ }
891
+
892
+ export interface NormalizedArtifactReadParams extends BridgeParams {
893
+ artifactId: string;
894
+ offset: number;
895
+ maxBytes: number;
896
+ }
897
+
898
+ export interface ArtifactDeleteParams extends BridgeParams {
899
+ artifactId?: string;
900
+ }
901
+
639
902
  export interface ExtractContentResult {
640
903
  format: ExtractContentFormat;
641
904
  content: string;
@@ -799,6 +1062,229 @@ export interface NetworkResult {
799
1062
  truncation: { reason: 'limit' | null; limit: number; omitted: number };
800
1063
  }
801
1064
 
1065
+ export interface CdpPerformanceMetric {
1066
+ name: string;
1067
+ value: number;
1068
+ }
1069
+
1070
+ export interface PerformanceMeasurement {
1071
+ source: 'cdp.Performance.getMetrics';
1072
+ kind: 'raw_cdp_counters';
1073
+ sampledAt: string;
1074
+ timeDomain: 'timeTicks';
1075
+ observation: 'browser_maintained_point_sample';
1076
+ webVitals: 'not_measured';
1077
+ }
1078
+
1079
+ export interface PerformanceMetricsResult {
1080
+ metrics: Record<string, number>;
1081
+ measurement: PerformanceMeasurement;
1082
+ }
1083
+
1084
+ export type HarDelivery = 'auto' | 'inline' | 'artifact';
1085
+ export type HarCaptureState = NetworkResult['captureState'];
1086
+
1087
+ export interface HarExportParams {
1088
+ limit?: number;
1089
+ urlPattern?: string;
1090
+ delivery?: HarDelivery;
1091
+ }
1092
+
1093
+ export interface NormalizedHarExportParams extends BridgeParams {
1094
+ limit: number;
1095
+ urlPattern: string | null;
1096
+ delivery: HarDelivery;
1097
+ }
1098
+
1099
+ export interface HarEvidenceEntry extends Record<string, unknown> {
1100
+ url: string;
1101
+ method: string;
1102
+ resourceType: string;
1103
+ status: number;
1104
+ mimeType: string;
1105
+ protocol: string;
1106
+ fromCache: boolean;
1107
+ fromDiskCache: boolean;
1108
+ fromServiceWorker: boolean;
1109
+ fromPrefetchCache: boolean;
1110
+ failureReason: string;
1111
+ redirectURL: string;
1112
+ duration: number;
1113
+ startedAt: number;
1114
+ }
1115
+
1116
+ export interface HarNameValue extends Record<string, unknown> {
1117
+ name: string;
1118
+ value: string;
1119
+ comment?: string;
1120
+ }
1121
+
1122
+ export interface HarCookie extends HarNameValue {
1123
+ path?: string;
1124
+ domain?: string;
1125
+ expires?: string;
1126
+ httpOnly?: boolean;
1127
+ secure?: boolean;
1128
+ }
1129
+
1130
+ export interface HarPostDataParam extends HarNameValue {
1131
+ fileName?: string;
1132
+ contentType?: string;
1133
+ }
1134
+
1135
+ export interface HarPostData extends Record<string, unknown> {
1136
+ mimeType: string;
1137
+ params?: HarPostDataParam[];
1138
+ text?: string;
1139
+ comment?: string;
1140
+ }
1141
+
1142
+ export interface HarRequest extends Record<string, unknown> {
1143
+ method: string;
1144
+ url: string;
1145
+ httpVersion: string;
1146
+ cookies: HarCookie[];
1147
+ headers: HarNameValue[];
1148
+ queryString: HarNameValue[];
1149
+ postData?: HarPostData;
1150
+ headersSize: number;
1151
+ bodySize: number;
1152
+ comment?: string;
1153
+ }
1154
+
1155
+ export interface HarContent extends Record<string, unknown> {
1156
+ size: number;
1157
+ compression?: number;
1158
+ mimeType: string;
1159
+ text?: string;
1160
+ encoding?: string;
1161
+ comment?: string;
1162
+ }
1163
+
1164
+ export interface HarResponse extends Record<string, unknown> {
1165
+ status: number;
1166
+ statusText: string;
1167
+ httpVersion: string;
1168
+ cookies: HarCookie[];
1169
+ headers: HarNameValue[];
1170
+ content: HarContent;
1171
+ redirectURL: string;
1172
+ headersSize: number;
1173
+ bodySize: number;
1174
+ comment?: string;
1175
+ }
1176
+
1177
+ export interface HarCacheInfo extends Record<string, unknown> {
1178
+ expires?: string;
1179
+ lastAccess: string;
1180
+ eTag: string;
1181
+ hitCount: number;
1182
+ comment?: string;
1183
+ }
1184
+
1185
+ export interface HarCache extends Record<string, unknown> {
1186
+ beforeRequest?: HarCacheInfo;
1187
+ afterRequest?: HarCacheInfo;
1188
+ comment?: string;
1189
+ }
1190
+
1191
+ export interface HarTimings extends Record<string, unknown> {
1192
+ blocked?: number;
1193
+ dns?: number;
1194
+ connect?: number;
1195
+ send: number;
1196
+ wait: number;
1197
+ receive: number;
1198
+ ssl?: number;
1199
+ comment?: string;
1200
+ }
1201
+
1202
+ export interface HarPageTimings extends Record<string, unknown> {
1203
+ onContentLoad?: number;
1204
+ onLoad?: number;
1205
+ comment?: string;
1206
+ }
1207
+
1208
+ export interface HarPage extends Record<string, unknown> {
1209
+ startedDateTime: string;
1210
+ id: string;
1211
+ title: string;
1212
+ pageTimings: HarPageTimings;
1213
+ comment?: string;
1214
+ }
1215
+
1216
+ export interface HarCreator extends Record<string, unknown> {
1217
+ name: string;
1218
+ version: string;
1219
+ comment?: string;
1220
+ }
1221
+
1222
+ export interface HarEntry extends Record<string, unknown> {
1223
+ pageref?: string;
1224
+ startedDateTime: string;
1225
+ time: number;
1226
+ request: HarRequest;
1227
+ response: HarResponse;
1228
+ cache: HarCache;
1229
+ timings: HarTimings;
1230
+ serverIPAddress?: string;
1231
+ connection?: string;
1232
+ comment?: string;
1233
+ }
1234
+
1235
+ export interface HarLog extends Record<string, unknown> {
1236
+ version: '1.2';
1237
+ creator: HarCreator;
1238
+ browser?: HarCreator;
1239
+ pages?: HarPage[];
1240
+ entries: HarEntry[];
1241
+ comment?: string;
1242
+ }
1243
+
1244
+ export interface HarDocument extends Record<string, unknown> {
1245
+ log: HarLog;
1246
+ }
1247
+
1248
+ export interface HarExportTruncation {
1249
+ reason: 'limit' | 'inline_bytes' | null;
1250
+ limit: number;
1251
+ omitted: number;
1252
+ omittedByLimit: number;
1253
+ omittedBySize: number;
1254
+ }
1255
+
1256
+ export interface HarExportMetadata {
1257
+ format: 'har';
1258
+ harVersion: '1.2';
1259
+ mimeType: 'application/json';
1260
+ byteLength: number;
1261
+ entryCount: number;
1262
+ totalEntries: number;
1263
+ dropped: number;
1264
+ abandoned: number;
1265
+ inflight: number;
1266
+ startedAt: number | null;
1267
+ captureState: HarCaptureState;
1268
+ truncated: boolean;
1269
+ truncation: HarExportTruncation;
1270
+ }
1271
+
1272
+ export type HarExportResult =
1273
+ | (HarExportMetadata & { delivery: 'inline'; har: HarDocument })
1274
+ | (HarExportMetadata & {
1275
+ delivery: 'artifact';
1276
+ artifact: ArtifactDescriptor<'har'>;
1277
+ });
1278
+
1279
+ export interface HarExportEvidence {
1280
+ delivery: HarExportResult['delivery'];
1281
+ entryCount: number;
1282
+ totalEntries: number;
1283
+ dropped: number;
1284
+ abandoned: number;
1285
+ inflight: number;
1286
+ }
1287
+
802
1288
  export type NetworkInterceptAction = 'fulfill' | 'continue' | 'block';
803
1289
 
804
1290
  export interface NetworkInterceptAddParams {