whopper 0.5.9 → 0.7.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/dist/browser/index.d.ts.map +1 -1
  2. package/dist/browser/index.js +56 -3
  3. package/dist/browser/index.js.map +1 -1
  4. package/dist/browser/index.test.js +133 -0
  5. package/dist/browser/index.test.js.map +1 -1
  6. package/dist/browser/types.d.ts +1 -0
  7. package/dist/browser/types.d.ts.map +1 -1
  8. package/dist/commands/detect.d.ts.map +1 -1
  9. package/dist/commands/detect.js +2 -0
  10. package/dist/commands/detect.js.map +1 -1
  11. package/dist/commands/detect.test.js +5 -0
  12. package/dist/commands/detect.test.js.map +1 -1
  13. package/dist/commands/detect_utils.d.ts.map +1 -1
  14. package/dist/commands/detect_utils.js +23 -5
  15. package/dist/commands/detect_utils.js.map +1 -1
  16. package/dist/commands/detect_utils.test.js +86 -9
  17. package/dist/commands/detect_utils.test.js.map +1 -1
  18. package/dist/signatures/_types.d.ts +1 -0
  19. package/dist/signatures/_types.d.ts.map +1 -1
  20. package/dist/signatures/index.d.ts.map +1 -1
  21. package/dist/signatures/index.js +4 -0
  22. package/dist/signatures/index.js.map +1 -1
  23. package/dist/signatures/signatures.test.js +16 -0
  24. package/dist/signatures/signatures.test.js.map +1 -1
  25. package/dist/signatures/technologies/drupal.d.ts.map +1 -1
  26. package/dist/signatures/technologies/drupal.js +17 -0
  27. package/dist/signatures/technologies/drupal.js.map +1 -1
  28. package/dist/signatures/technologies/drupal.test.d.ts +2 -0
  29. package/dist/signatures/technologies/drupal.test.d.ts.map +1 -0
  30. package/dist/signatures/technologies/drupal.test.js +76 -0
  31. package/dist/signatures/technologies/drupal.test.js.map +1 -0
  32. package/dist/signatures/technologies/power_cms.d.ts +3 -0
  33. package/dist/signatures/technologies/power_cms.d.ts.map +1 -0
  34. package/dist/signatures/technologies/power_cms.js +51 -0
  35. package/dist/signatures/technologies/power_cms.js.map +1 -0
  36. package/dist/signatures/technologies/power_cms.test.d.ts +2 -0
  37. package/dist/signatures/technologies/power_cms.test.d.ts.map +1 -0
  38. package/dist/signatures/technologies/power_cms.test.js +83 -0
  39. package/dist/signatures/technologies/power_cms.test.js.map +1 -0
  40. package/dist/signatures/technologies/thinkphp.d.ts +3 -0
  41. package/dist/signatures/technologies/thinkphp.d.ts.map +1 -0
  42. package/dist/signatures/technologies/thinkphp.js +41 -0
  43. package/dist/signatures/technologies/thinkphp.js.map +1 -0
  44. package/dist/signatures/technologies/thinkphp.test.d.ts +2 -0
  45. package/dist/signatures/technologies/thinkphp.test.d.ts.map +1 -0
  46. package/dist/signatures/technologies/thinkphp.test.js +132 -0
  47. package/dist/signatures/technologies/thinkphp.test.js.map +1 -0
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAiD/E,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,MAAM,EAAE,EACjC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CA6alB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAiD/E,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,MAAM,EAAE,EACjC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAqelB"}
@@ -39,7 +39,7 @@ function colorizeStatusCode(statusCode) {
39
39
  return chalk.gray(code);
40
40
  }
41
41
  export async function openPage(url, timeoutMs, javascriptVariableNames, options = {}) {
42
- const { userAgent, locale, extraHTTPHeaders, blockCrossDomainRedirect = false, networkIdleThresholdMs = NETWORK_IDLE_THRESHOLD_MS, extractionTimeoutMs = DEFAULT_EXTRACTION_TIMEOUT_MS, } = options;
42
+ const { userAgent, locale, extraHTTPHeaders, blockCrossDomainRedirect = false, networkIdleThresholdMs = NETWORK_IDLE_THRESHOLD_MS, extractionTimeoutMs = DEFAULT_EXTRACTION_TIMEOUT_MS, blockMedia = true, } = options;
43
43
  const pageHost = getHostFromUrl(url);
44
44
  if (!pageHost) {
45
45
  throw new Error(`Invalid URL: ${url}`);
@@ -53,12 +53,59 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
53
53
  });
54
54
  const page = await context.newPage();
55
55
  let blockedByRedirectPolicy = false;
56
+ // Once the capture phase ends we keep the route handler installed (so media
57
+ // is still aborted for the rest of the scan) but stop appending to the
58
+ // frozen urls/responses snapshot. Guards the media branch's pushes below.
59
+ let captureFrozen = false;
56
60
  let lastNavigationUrl = url;
57
61
  let inspectedUrls = new Set();
58
62
  let reentryCount = 0;
59
63
  const preInspectedUrls = new Set();
64
+ // Declared before the route handler so its media-block branch can push to
65
+ // them (the handler is a closure over these; the network-idle listeners
66
+ // below also share them).
67
+ const urls = [];
68
+ const responses = [];
60
69
  await page.route("**/*", async (route) => {
61
70
  const request = route.request();
71
+ // Drop media (video / audio) requests up front when enabled. These
72
+ // rarely contribute to technology detection (signatures match on URLs,
73
+ // bodies, headers, cookies, or JS variables) but can dominate the
74
+ // page's main-thread / network budget — autoplaying videos in
75
+ // particular keep the scan running long after the meaningful
76
+ // resources have loaded. Recording the URL in `urls` preserves the
77
+ // audit trail of what would have been fetched.
78
+ if (blockMedia && request.resourceType() === "media") {
79
+ const blockedUrl = request.url();
80
+ // Always abort media, even after the capture phase is frozen: autoplay
81
+ // or lazy media that starts during the post-load cookie / JS extraction
82
+ // phase would otherwise reintroduce the main-thread / network cost this
83
+ // blocking is meant to avoid. We only *record* the block while capture
84
+ // is live — once frozen, pushing would mutate the returned snapshot
85
+ // (see the capture-freeze point below) non-deterministically.
86
+ if (!captureFrozen) {
87
+ logger.debug(`Blocked media resource: ${blockedUrl}`);
88
+ urls.push({ url: blockedUrl, error: "blocked: media" });
89
+ // URL signatures are matched only against `context.responses[].url`
90
+ // (see analyzer/apply.ts), not the `urls` audit log. Aborting the
91
+ // request would otherwise drop it from `responses` and turn any
92
+ // media-URL-based detection into a false negative. Record a body-less
93
+ // response so URL matching is preserved while we still skip the
94
+ // (irrelevant and costly) media body.
95
+ const blockedHost = getHostFromUrl(blockedUrl) ?? "";
96
+ responses.push({
97
+ url: blockedUrl,
98
+ host: blockedHost,
99
+ isFirstParty: blockedHost
100
+ ? isFirstPartyHost(pageHost, blockedHost)
101
+ : false,
102
+ status: 0,
103
+ headers: {},
104
+ });
105
+ }
106
+ await route.abort("blockedbyclient");
107
+ return;
108
+ }
62
109
  if (!request.isNavigationRequest() ||
63
110
  request.frame() !== page.mainFrame()) {
64
111
  await route.continue();
@@ -176,8 +223,6 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
176
223
  }
177
224
  await route.fulfill({ response: firstResponse });
178
225
  });
179
- const urls = [];
180
- const responses = [];
181
226
  // Timestamp of the most recent network activity (request sent or
182
227
  // response received). Used by the custom idle-decision loop below.
183
228
  let lastNetworkActivityAt = Date.now();
@@ -314,6 +359,14 @@ export async function openPage(url, timeoutMs, javascriptVariableNames, options
314
359
  page.off("requestfinished", onRequestFinished);
315
360
  page.off("requestfailed", onRequestFailed);
316
361
  page.off("response", onResponse);
362
+ // Freeze the capture. We intentionally keep the route handler installed so
363
+ // media requests are still aborted for the remainder of the scan (cookie / JS
364
+ // extraction can trigger autoplay / lazy media, whose main-thread / network
365
+ // cost is exactly what this blocking avoids). The `captureFrozen` guard stops
366
+ // the media branch from appending to the now-frozen `urls`/`responses`
367
+ // snapshot, so late/lazy requests can neither bloat memory nor make the
368
+ // returned capture non-deterministic.
369
+ captureFrozen = true;
317
370
  logger.info(`${responses.length} responses captured`);
318
371
  if (result === "loaded") {
319
372
  if (idleWaitTimedOut) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,7 @@ describe("openPage", () => {
162
162
  const fulfillMock = vi.fn(() => Promise.resolve());
163
163
  await routeHandler({
164
164
  request: () => ({
165
+ resourceType: () => "document",
165
166
  isNavigationRequest: () => true,
166
167
  frame: () => mockMainFrame,
167
168
  url: () => "https://www.example.com",
@@ -191,6 +192,7 @@ describe("openPage", () => {
191
192
  const fulfillMock = vi.fn(() => Promise.resolve());
192
193
  await routeHandler({
193
194
  request: () => ({
195
+ resourceType: () => "document",
194
196
  isNavigationRequest: () => true,
195
197
  frame: () => mockMainFrame,
196
198
  url: () => "https://example.net",
@@ -216,6 +218,7 @@ describe("openPage", () => {
216
218
  const abortMock = vi.fn(() => Promise.resolve());
217
219
  await routeHandler({
218
220
  request: () => ({
221
+ resourceType: () => "document",
219
222
  isNavigationRequest: () => false,
220
223
  frame: () => mockMainFrame,
221
224
  url: () => "https://example.net/script.js",
@@ -226,6 +229,102 @@ describe("openPage", () => {
226
229
  expect(continueMock).toHaveBeenCalledTimes(1);
227
230
  expect(abortMock).not.toHaveBeenCalled();
228
231
  });
232
+ it("should abort media requests by default and record them in urls", async () => {
233
+ const continueMock = vi.fn(() => Promise.resolve());
234
+ const abortMock = vi.fn(() => Promise.resolve());
235
+ // Invoke the handler during route registration, i.e. while the capture
236
+ // phase is still live (before the snapshot is frozen), matching the
237
+ // timing of a real media request.
238
+ mockPage.route.mockImplementation(async (_pattern, handler) => {
239
+ await handler({
240
+ request: () => ({
241
+ resourceType: () => "media",
242
+ isNavigationRequest: () => false,
243
+ frame: () => mockMainFrame,
244
+ url: () => "https://example.com/intro.mov",
245
+ }),
246
+ continue: continueMock,
247
+ abort: abortMock,
248
+ });
249
+ });
250
+ const result = await openPage("https://example.com", 10000, []);
251
+ expect(abortMock).toHaveBeenCalledWith("blockedbyclient");
252
+ expect(continueMock).not.toHaveBeenCalled();
253
+ expect(result.urls).toContainEqual({
254
+ url: "https://example.com/intro.mov",
255
+ error: "blocked: media",
256
+ });
257
+ });
258
+ it("should record blocked media as a body-less response to preserve URL detection", async () => {
259
+ mockPage.route.mockImplementation(async (_pattern, handler) => {
260
+ await handler({
261
+ request: () => ({
262
+ resourceType: () => "media",
263
+ isNavigationRequest: () => false,
264
+ frame: () => mockMainFrame,
265
+ url: () => "https://example.com/intro.mov",
266
+ }),
267
+ continue: vi.fn(() => Promise.resolve()),
268
+ abort: vi.fn(() => Promise.resolve()),
269
+ });
270
+ });
271
+ const result = await openPage("https://example.com", 10000, []);
272
+ // URL signatures match against responses[].url (analyzer/apply.ts), so the
273
+ // blocked media URL must still appear in responses (body-less) so that
274
+ // URL-based detection on a media URL is not silently lost.
275
+ const blocked = result.responses.find((response) => response.url === "https://example.com/intro.mov");
276
+ expect(blocked).toBeDefined();
277
+ expect(blocked?.body).toBeUndefined();
278
+ expect(blocked?.isFirstParty).toBe(true);
279
+ });
280
+ it("should keep aborting media after capture but stop recording it", async () => {
281
+ // After the capture snapshot is frozen the route handler stays installed
282
+ // so media is still aborted (autoplay / lazy media during cookie / JS
283
+ // extraction would otherwise reintroduce the cost this blocking avoids),
284
+ // but it must no longer append to the now-frozen urls/responses set.
285
+ let routeHandler = async () => { };
286
+ mockPage.route.mockImplementation(async (_pattern, handler) => {
287
+ routeHandler = handler;
288
+ });
289
+ const result = await openPage("https://example.com", 10000, []);
290
+ const urlsBefore = result.urls.length;
291
+ const responsesBefore = result.responses.length;
292
+ const abortMock = vi.fn(() => Promise.resolve());
293
+ await routeHandler({
294
+ request: () => ({
295
+ resourceType: () => "media",
296
+ isNavigationRequest: () => false,
297
+ frame: () => mockMainFrame,
298
+ url: () => "https://example.com/late.mov",
299
+ }),
300
+ continue: vi.fn(() => Promise.resolve()),
301
+ abort: abortMock,
302
+ });
303
+ expect(abortMock).toHaveBeenCalledWith("blockedbyclient");
304
+ expect(result.urls.length).toBe(urlsBefore);
305
+ expect(result.responses.length).toBe(responsesBefore);
306
+ });
307
+ it("should not abort media requests when blockMedia is false", async () => {
308
+ let routeHandler = async () => { };
309
+ mockPage.route.mockImplementation(async (_pattern, handler) => {
310
+ routeHandler = handler;
311
+ });
312
+ await openPage("https://example.com", 10000, [], { blockMedia: false });
313
+ const continueMock = vi.fn(() => Promise.resolve());
314
+ const abortMock = vi.fn(() => Promise.resolve());
315
+ await routeHandler({
316
+ request: () => ({
317
+ resourceType: () => "media",
318
+ isNavigationRequest: () => false,
319
+ frame: () => mockMainFrame,
320
+ url: () => "https://example.com/intro.mov",
321
+ }),
322
+ continue: continueMock,
323
+ abort: abortMock,
324
+ });
325
+ expect(continueMock).toHaveBeenCalledTimes(1);
326
+ expect(abortMock).not.toHaveBeenCalled();
327
+ });
229
328
  it("should continue for non-main-frame navigation requests", async () => {
230
329
  let routeHandler = async () => { };
231
330
  mockPage.route.mockImplementation(async (_pattern, handler) => {
@@ -238,6 +337,7 @@ describe("openPage", () => {
238
337
  const abortMock = vi.fn(() => Promise.resolve());
239
338
  await routeHandler({
240
339
  request: () => ({
340
+ resourceType: () => "document",
241
341
  isNavigationRequest: () => true,
242
342
  frame: () => ({ id: "iframe-1" }),
243
343
  url: () => "https://example.net/embedded",
@@ -264,6 +364,7 @@ describe("openPage", () => {
264
364
  // first top-level navigation
265
365
  await routeHandler({
266
366
  request: () => ({
367
+ resourceType: () => "document",
267
368
  isNavigationRequest: () => true,
268
369
  frame: () => mockMainFrame,
269
370
  url: () => "https://example.com",
@@ -276,6 +377,7 @@ describe("openPage", () => {
276
377
  // second top-level navigation with invalid URL should still continue
277
378
  await routeHandler({
278
379
  request: () => ({
380
+ resourceType: () => "document",
279
381
  isNavigationRequest: () => true,
280
382
  frame: () => mockMainFrame,
281
383
  url: () => "not-a-url",
@@ -306,6 +408,7 @@ describe("openPage", () => {
306
408
  const fulfillMock = vi.fn(() => Promise.resolve());
307
409
  await routeHandler({
308
410
  request: () => ({
411
+ resourceType: () => "document",
309
412
  isNavigationRequest: () => true,
310
413
  frame: () => mockMainFrame,
311
414
  url: () => "https://app.example.com",
@@ -317,6 +420,7 @@ describe("openPage", () => {
317
420
  });
318
421
  await routeHandler({
319
422
  request: () => ({
423
+ resourceType: () => "document",
320
424
  isNavigationRequest: () => true,
321
425
  frame: () => mockMainFrame,
322
426
  url: () => "https://cdn.example.com",
@@ -349,6 +453,7 @@ describe("openPage", () => {
349
453
  const fulfillMock = vi.fn(() => Promise.resolve());
350
454
  await routeHandler({
351
455
  request: () => ({
456
+ resourceType: () => "document",
352
457
  isNavigationRequest: () => true,
353
458
  frame: () => mockMainFrame,
354
459
  url: () => "https://www.example.com",
@@ -383,6 +488,7 @@ describe("openPage", () => {
383
488
  const fulfillMock = vi.fn(() => Promise.resolve());
384
489
  await routeHandler({
385
490
  request: () => ({
491
+ resourceType: () => "document",
386
492
  isNavigationRequest: () => true,
387
493
  frame: () => mockMainFrame,
388
494
  url: () => "https://example.com",
@@ -416,6 +522,7 @@ describe("openPage", () => {
416
522
  const fulfillMock = vi.fn(() => Promise.resolve());
417
523
  await routeHandler({
418
524
  request: () => ({
525
+ resourceType: () => "document",
419
526
  isNavigationRequest: () => true,
420
527
  frame: () => mockMainFrame,
421
528
  url: () => "https://example.com",
@@ -449,6 +556,7 @@ describe("openPage", () => {
449
556
  const fulfillMock = vi.fn(() => Promise.resolve());
450
557
  await routeHandler({
451
558
  request: () => ({
559
+ resourceType: () => "document",
452
560
  isNavigationRequest: () => true,
453
561
  frame: () => mockMainFrame,
454
562
  url: () => "https://example.com",
@@ -478,6 +586,7 @@ describe("openPage", () => {
478
586
  const fulfillMock = vi.fn(() => Promise.resolve());
479
587
  await routeHandler({
480
588
  request: () => ({
589
+ resourceType: () => "document",
481
590
  isNavigationRequest: () => true,
482
591
  frame: () => mockMainFrame,
483
592
  url: () => "https://example.com",
@@ -502,6 +611,7 @@ describe("openPage", () => {
502
611
  const fetchMock = vi.fn(() => Promise.reject("string error"));
503
612
  await routeHandler({
504
613
  request: () => ({
614
+ resourceType: () => "document",
505
615
  isNavigationRequest: () => true,
506
616
  frame: () => mockMainFrame,
507
617
  url: () => "https://example.com",
@@ -542,6 +652,7 @@ describe("openPage", () => {
542
652
  const abortMock = vi.fn(() => Promise.resolve());
543
653
  await routeHandler({
544
654
  request: () => ({
655
+ resourceType: () => "document",
545
656
  isNavigationRequest: () => true,
546
657
  frame: () => mockMainFrame,
547
658
  url: () => "https://example.com",
@@ -555,6 +666,7 @@ describe("openPage", () => {
555
666
  const continueMock = vi.fn(() => Promise.resolve());
556
667
  await routeHandler({
557
668
  request: () => ({
669
+ resourceType: () => "document",
558
670
  isNavigationRequest: () => true,
559
671
  frame: () => mockMainFrame,
560
672
  url: () => "https://example.com/page",
@@ -591,6 +703,7 @@ describe("openPage", () => {
591
703
  .mockResolvedValueOnce(mock200Response);
592
704
  await routeHandler({
593
705
  request: () => ({
706
+ resourceType: () => "document",
594
707
  isNavigationRequest: () => true,
595
708
  frame: () => mockMainFrame,
596
709
  url: () => "https://example.com",
@@ -604,6 +717,7 @@ describe("openPage", () => {
604
717
  for (let i = 0; i < 20; i++) {
605
718
  await routeHandler({
606
719
  request: () => ({
720
+ resourceType: () => "document",
607
721
  isNavigationRequest: () => true,
608
722
  frame: () => mockMainFrame,
609
723
  url: () => "https://example.com/page",
@@ -618,6 +732,7 @@ describe("openPage", () => {
618
732
  const abortMock = vi.fn(() => Promise.resolve());
619
733
  await routeHandler({
620
734
  request: () => ({
735
+ resourceType: () => "document",
621
736
  isNavigationRequest: () => true,
622
737
  frame: () => mockMainFrame,
623
738
  url: () => "https://example.com/page",
@@ -652,6 +767,7 @@ describe("openPage", () => {
652
767
  const fulfillMock = vi.fn(() => Promise.resolve());
653
768
  await routeHandler({
654
769
  request: () => ({
770
+ resourceType: () => "document",
655
771
  isNavigationRequest: () => true,
656
772
  frame: () => mockMainFrame,
657
773
  url: () => "https://example.com",
@@ -684,6 +800,7 @@ describe("openPage", () => {
684
800
  .mockRejectedValueOnce("string error");
685
801
  await routeHandler({
686
802
  request: () => ({
803
+ resourceType: () => "document",
687
804
  isNavigationRequest: () => true,
688
805
  frame: () => mockMainFrame,
689
806
  url: () => "https://example.com",
@@ -719,6 +836,7 @@ describe("openPage", () => {
719
836
  const fulfillMock = vi.fn(() => Promise.resolve());
720
837
  await routeHandler({
721
838
  request: () => ({
839
+ resourceType: () => "document",
722
840
  isNavigationRequest: () => true,
723
841
  frame: () => mockMainFrame,
724
842
  url: () => "https://example.com",
@@ -758,6 +876,7 @@ describe("openPage", () => {
758
876
  const fulfillMock = vi.fn(() => Promise.resolve());
759
877
  await routeHandler({
760
878
  request: () => ({
879
+ resourceType: () => "document",
761
880
  isNavigationRequest: () => true,
762
881
  frame: () => mockMainFrame,
763
882
  url: () => "https://example.com",
@@ -812,6 +931,7 @@ describe("openPage", () => {
812
931
  const fulfillMock = vi.fn(() => Promise.resolve());
813
932
  await routeHandler({
814
933
  request: () => ({
934
+ resourceType: () => "document",
815
935
  isNavigationRequest: () => true,
816
936
  frame: () => mockMainFrame,
817
937
  url: () => "https://example.com",
@@ -865,6 +985,7 @@ describe("openPage", () => {
865
985
  .mockResolvedValueOnce(mock200Response);
866
986
  await routeHandler({
867
987
  request: () => ({
988
+ resourceType: () => "document",
868
989
  isNavigationRequest: () => true,
869
990
  frame: () => mockMainFrame,
870
991
  url: () => "https://example.com",
@@ -910,6 +1031,7 @@ describe("openPage", () => {
910
1031
  .mockResolvedValueOnce(mock200Response);
911
1032
  await routeHandler({
912
1033
  request: () => ({
1034
+ resourceType: () => "document",
913
1035
  isNavigationRequest: () => true,
914
1036
  frame: () => mockMainFrame,
915
1037
  url: () => "https://example.com",
@@ -940,6 +1062,7 @@ describe("openPage", () => {
940
1062
  const fulfillMock = vi.fn(() => Promise.resolve());
941
1063
  await routeHandler({
942
1064
  request: () => ({
1065
+ resourceType: () => "document",
943
1066
  isNavigationRequest: () => true,
944
1067
  frame: () => mockMainFrame,
945
1068
  url: () => "https://example.com",
@@ -983,6 +1106,7 @@ describe("openPage", () => {
983
1106
  // Use a data: URL that getHostFromUrl returns null for
984
1107
  await routeHandler({
985
1108
  request: () => ({
1109
+ resourceType: () => "document",
986
1110
  isNavigationRequest: () => true,
987
1111
  frame: () => mockMainFrame,
988
1112
  url: () => "https://example.com",
@@ -1094,6 +1218,7 @@ describe("openPage", () => {
1094
1218
  headers: () => ({}),
1095
1219
  text: () => textPromise,
1096
1220
  request: () => ({
1221
+ resourceType: () => "document",
1097
1222
  isNavigationRequest: () => false,
1098
1223
  frame: () => null,
1099
1224
  }),
@@ -1124,6 +1249,7 @@ describe("openPage", () => {
1124
1249
  headers: () => ({}),
1125
1250
  text: () => neverResolves,
1126
1251
  request: () => ({
1252
+ resourceType: () => "document",
1127
1253
  isNavigationRequest: () => false,
1128
1254
  frame: () => null,
1129
1255
  }),
@@ -1159,6 +1285,7 @@ describe("openPage", () => {
1159
1285
  // Route handler records a fetch error
1160
1286
  await routeHandler({
1161
1287
  request: () => ({
1288
+ resourceType: () => "document",
1162
1289
  isNavigationRequest: () => true,
1163
1290
  frame: () => mockMainFrame,
1164
1291
  url: () => "https://example.com",
@@ -1185,6 +1312,7 @@ describe("openPage", () => {
1185
1312
  // Simulate the route handler blocking a cross-host redirect
1186
1313
  await routeHandler({
1187
1314
  request: () => ({
1315
+ resourceType: () => "document",
1188
1316
  isNavigationRequest: () => true,
1189
1317
  frame: () => mockMainFrame,
1190
1318
  url: () => "https://other.example",
@@ -1297,6 +1425,7 @@ describe("openPage", () => {
1297
1425
  headers: () => ({ "content-type": "application/json" }),
1298
1426
  text: () => Promise.resolve('{"data": "test"}'),
1299
1427
  request: () => ({
1428
+ resourceType: () => "document",
1300
1429
  isNavigationRequest: () => false,
1301
1430
  frame: () => null,
1302
1431
  }),
@@ -1329,6 +1458,7 @@ describe("openPage", () => {
1329
1458
  headers: () => ({ "content-type": "application/octet-stream" }),
1330
1459
  text: () => Promise.reject(new Error("Cannot read binary")),
1331
1460
  request: () => ({
1461
+ resourceType: () => "document",
1332
1462
  isNavigationRequest: () => false,
1333
1463
  frame: () => null,
1334
1464
  }),
@@ -1360,6 +1490,7 @@ describe("openPage", () => {
1360
1490
  headers: () => ({ "content-type": "text/javascript" }),
1361
1491
  text: () => Promise.resolve("console.log('ok')"),
1362
1492
  request: () => ({
1493
+ resourceType: () => "document",
1363
1494
  isNavigationRequest: () => false,
1364
1495
  frame: () => null,
1365
1496
  }),
@@ -1388,6 +1519,7 @@ describe("openPage", () => {
1388
1519
  headers: () => ({ "content-type": "text/html" }),
1389
1520
  text: () => Promise.resolve("<html></html>"),
1390
1521
  request: () => ({
1522
+ resourceType: () => "document",
1391
1523
  isNavigationRequest: () => true,
1392
1524
  frame: () => mockMainFrame,
1393
1525
  }),
@@ -1413,6 +1545,7 @@ describe("openPage", () => {
1413
1545
  headers: () => ({ "content-type": "text/css" }),
1414
1546
  text: () => Promise.resolve("body {}"),
1415
1547
  request: () => ({
1548
+ resourceType: () => "document",
1416
1549
  isNavigationRequest: () => false,
1417
1550
  frame: () => null,
1418
1551
  }),