@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.
- package/PRIVACY.md +29 -3
- package/README.md +10 -3
- package/SECURITY.md +12 -0
- package/package.json +7 -1
- package/packages/agent-client/src/cli-args.js +70 -6
- package/packages/agent-client/src/cli-batch.js +127 -59
- package/packages/agent-client/src/cli-helpers.js +8 -0
- package/packages/agent-client/src/cli-output.js +8 -1
- package/packages/agent-client/src/cli-setup-commands.js +3 -1
- package/packages/agent-client/src/cli.js +254 -26
- package/packages/agent-client/src/client.js +156 -3
- package/packages/agent-client/src/command-registry.js +14 -4
- package/packages/agent-client/src/config.js +195 -0
- package/packages/agent-client/src/mcp-config.js +8 -8
- package/packages/agent-client/src/npm-self-update.js +305 -0
- package/packages/agent-client/src/remotes.js +4 -2
- package/packages/agent-client/src/runtime.js +99 -7
- package/packages/agent-client/src/types.ts +38 -0
- package/packages/mcp-server/src/guidance.js +37 -6
- package/packages/mcp-server/src/handlers-capture.js +29 -2
- package/packages/mcp-server/src/handlers-dom.js +54 -3
- package/packages/mcp-server/src/handlers-page.js +333 -60
- package/packages/mcp-server/src/handlers-utils.js +141 -151
- package/packages/mcp-server/src/handlers.js +17 -4
- package/packages/mcp-server/src/server.js +269 -51
- package/packages/mcp-server/src/toolset.js +48 -0
- package/packages/native-host/src/artifact-store.js +353 -0
- package/packages/native-host/src/config.js +9 -1
- package/packages/native-host/src/daemon-logger.js +3 -1
- package/packages/native-host/src/daemon.js +457 -27
- package/packages/native-host/src/dom-baseline-owners.js +210 -0
- package/packages/native-host/src/native-host.js +38 -29
- package/packages/protocol/src/budget-presets.js +182 -0
- package/packages/protocol/src/capability-values.js +2 -0
- package/packages/protocol/src/defaults.js +28 -0
- package/packages/protocol/src/errors.js +48 -5
- package/packages/protocol/src/har.js +34 -0
- package/packages/protocol/src/incidental-sanitizer.js +197 -0
- package/packages/protocol/src/index.js +4 -0
- package/packages/protocol/src/json-lines.js +3 -2
- package/packages/protocol/src/protocol.js +316 -6
- package/packages/protocol/src/recovery-telemetry.js +302 -0
- package/packages/protocol/src/registry.js +226 -6
- package/packages/protocol/src/summary.js +116 -25
- package/packages/protocol/src/types.ts +490 -4
- package/skills/browser-bridge/SKILL.md +26 -8
- package/skills/browser-bridge/references/protocol.md +125 -15
- 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
|
-
| '
|
|
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
|
|
631
|
-
|
|
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 {
|