patchright-core 1.58.2 → 1.59.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 (285) hide show
  1. package/ThirdPartyNotices.txt +126 -650
  2. package/browsers.json +16 -14
  3. package/lib/bootstrap.js +77 -0
  4. package/lib/cli/browserActions.js +308 -0
  5. package/lib/cli/driver.js +3 -2
  6. package/lib/cli/installActions.js +171 -0
  7. package/lib/cli/program.js +47 -411
  8. package/lib/client/android.js +4 -4
  9. package/lib/client/api.js +3 -3
  10. package/lib/client/browser.js +8 -0
  11. package/lib/client/browserContext.js +22 -61
  12. package/lib/client/browserType.js +19 -51
  13. package/lib/client/cdpSession.js +6 -2
  14. package/lib/client/channelOwner.js +1 -1
  15. package/lib/client/clientHelper.js +2 -1
  16. package/lib/client/clock.js +0 -1
  17. package/lib/client/{webSocket.js → connect.js} +57 -7
  18. package/lib/client/connection.js +8 -4
  19. package/lib/client/consoleMessage.js +3 -0
  20. package/lib/client/debugger.js +57 -0
  21. package/lib/client/dialog.js +8 -1
  22. package/lib/client/disposable.js +76 -0
  23. package/lib/client/electron.js +1 -0
  24. package/lib/client/elementHandle.js +1 -4
  25. package/lib/client/events.js +3 -3
  26. package/lib/client/fetch.js +0 -1
  27. package/lib/client/frame.js +10 -23
  28. package/lib/client/harRouter.js +13 -1
  29. package/lib/client/jsHandle.js +4 -8
  30. package/lib/client/locator.js +13 -44
  31. package/lib/client/network.js +15 -16
  32. package/lib/client/page.js +41 -75
  33. package/lib/client/platform.js +0 -3
  34. package/lib/client/screencast.js +88 -0
  35. package/lib/client/selectors.js +3 -1
  36. package/lib/client/tracing.js +11 -5
  37. package/lib/client/video.js +13 -20
  38. package/lib/client/worker.js +6 -6
  39. package/lib/generated/bindingsControllerSource.js +1 -1
  40. package/lib/generated/clockSource.js +1 -1
  41. package/lib/generated/injectedScriptSource.js +1 -1
  42. package/lib/generated/pollingRecorderSource.js +1 -1
  43. package/lib/generated/storageScriptSource.js +1 -1
  44. package/lib/generated/utilityScriptSource.js +1 -1
  45. package/lib/mcpBundle.js +0 -6
  46. package/lib/mcpBundleImpl.js +91 -0
  47. package/lib/protocol/validator.js +224 -138
  48. package/lib/protocol/validatorPrimitives.js +1 -1
  49. package/lib/remote/playwrightConnection.js +10 -8
  50. package/lib/remote/playwrightPipeServer.js +100 -0
  51. package/lib/remote/playwrightServer.js +13 -8
  52. package/lib/remote/playwrightWebSocketServer.js +73 -0
  53. package/lib/remote/serverTransport.js +96 -0
  54. package/lib/server/android/android.js +2 -2
  55. package/lib/server/bidi/bidiBrowser.js +30 -8
  56. package/lib/server/bidi/bidiChromium.js +18 -5
  57. package/lib/server/bidi/bidiNetworkManager.js +39 -11
  58. package/lib/server/bidi/bidiPage.js +31 -15
  59. package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
  60. package/lib/server/browser.js +84 -21
  61. package/lib/server/browserContext.js +110 -58
  62. package/lib/server/browserType.js +14 -12
  63. package/lib/server/chromium/chromium.js +15 -12
  64. package/lib/server/chromium/chromiumSwitches.js +14 -2
  65. package/lib/server/chromium/crBrowser.js +20 -17
  66. package/lib/server/chromium/crCoverage.js +1 -13
  67. package/lib/server/chromium/crDevTools.js +1 -0
  68. package/lib/server/chromium/crNetworkManager.js +12 -267
  69. package/lib/server/chromium/crPage.js +67 -199
  70. package/lib/server/chromium/crServiceWorker.js +7 -14
  71. package/lib/server/clock.js +33 -41
  72. package/lib/server/console.js +5 -1
  73. package/lib/server/debugController.js +12 -6
  74. package/lib/server/debugger.js +40 -47
  75. package/lib/server/deviceDescriptorsSource.json +137 -137
  76. package/lib/server/dispatchers/browserContextDispatcher.js +29 -30
  77. package/lib/server/dispatchers/browserDispatcher.js +11 -5
  78. package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
  79. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
  80. package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
  81. package/lib/server/dispatchers/dispatcher.js +1 -1
  82. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  83. package/lib/server/dispatchers/electronDispatcher.js +2 -1
  84. package/lib/server/dispatchers/frameDispatcher.js +6 -6
  85. package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
  86. package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
  87. package/lib/server/dispatchers/networkDispatchers.js +6 -5
  88. package/lib/server/dispatchers/pageDispatcher.js +101 -38
  89. package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
  90. package/lib/server/disposable.js +41 -0
  91. package/lib/server/dom.js +44 -26
  92. package/lib/server/download.js +3 -2
  93. package/lib/server/electron/electron.js +12 -7
  94. package/lib/server/firefox/ffBrowser.js +9 -19
  95. package/lib/server/firefox/ffInput.js +21 -5
  96. package/lib/server/firefox/ffNetworkManager.js +2 -2
  97. package/lib/server/firefox/ffPage.js +24 -27
  98. package/lib/server/frameSelectors.js +5 -172
  99. package/lib/server/frames.js +234 -687
  100. package/lib/server/har/harRecorder.js +2 -2
  101. package/lib/server/har/harTracer.js +5 -4
  102. package/lib/server/input.js +49 -4
  103. package/lib/server/instrumentation.js +5 -0
  104. package/lib/server/javascript.js +6 -26
  105. package/lib/server/launchApp.js +1 -3
  106. package/lib/server/localUtils.js +6 -6
  107. package/lib/server/network.js +9 -8
  108. package/lib/server/overlay.js +138 -0
  109. package/lib/server/page.js +157 -105
  110. package/lib/server/progress.js +6 -0
  111. package/lib/server/recorder/recorderApp.js +9 -8
  112. package/lib/server/recorder.js +76 -40
  113. package/lib/server/registry/index.js +55 -82
  114. package/lib/server/registry/nativeDeps.js +1 -0
  115. package/lib/server/screencast.js +90 -143
  116. package/lib/server/screenshotter.js +0 -6
  117. package/lib/server/trace/recorder/snapshotter.js +8 -17
  118. package/lib/server/trace/recorder/snapshotterInjected.js +82 -20
  119. package/lib/server/trace/recorder/tracing.js +87 -44
  120. package/lib/server/trace/viewer/traceViewer.js +3 -4
  121. package/lib/server/usKeyboardLayout.js +7 -0
  122. package/lib/server/utils/comparators.js +1 -1
  123. package/lib/server/utils/disposable.js +32 -0
  124. package/lib/server/utils/eventsHelper.js +3 -1
  125. package/lib/server/utils/fileUtils.js +16 -2
  126. package/lib/server/utils/happyEyeballs.js +15 -12
  127. package/lib/server/utils/hostPlatform.js +0 -15
  128. package/lib/server/utils/httpServer.js +5 -3
  129. package/lib/server/utils/network.js +2 -1
  130. package/lib/server/utils/nodePlatform.js +0 -6
  131. package/lib/server/utils/processLauncher.js +6 -5
  132. package/lib/server/utils/zipFile.js +2 -2
  133. package/lib/server/videoRecorder.js +82 -12
  134. package/lib/server/webkit/wkBrowser.js +1 -6
  135. package/lib/server/webkit/wkPage.js +27 -25
  136. package/lib/server/webkit/wkWorkers.js +2 -1
  137. package/lib/serverRegistry.js +156 -0
  138. package/lib/tools/backend/browserBackend.js +79 -0
  139. package/lib/tools/backend/common.js +63 -0
  140. package/lib/tools/backend/config.js +41 -0
  141. package/lib/tools/backend/console.js +66 -0
  142. package/lib/tools/backend/context.js +296 -0
  143. package/lib/tools/backend/cookies.js +152 -0
  144. package/lib/tools/backend/devtools.js +69 -0
  145. package/lib/tools/backend/dialogs.js +59 -0
  146. package/lib/tools/backend/evaluate.js +64 -0
  147. package/lib/tools/backend/files.js +60 -0
  148. package/lib/tools/backend/form.js +64 -0
  149. package/lib/tools/backend/keyboard.js +155 -0
  150. package/lib/tools/backend/logFile.js +95 -0
  151. package/lib/tools/backend/mouse.js +168 -0
  152. package/lib/tools/backend/navigate.js +106 -0
  153. package/lib/tools/backend/network.js +135 -0
  154. package/lib/tools/backend/pdf.js +48 -0
  155. package/lib/tools/backend/response.js +305 -0
  156. package/lib/tools/backend/route.js +140 -0
  157. package/lib/tools/backend/runCode.js +77 -0
  158. package/lib/tools/backend/screenshot.js +88 -0
  159. package/lib/tools/backend/sessionLog.js +74 -0
  160. package/lib/tools/backend/snapshot.js +208 -0
  161. package/lib/tools/backend/storage.js +68 -0
  162. package/lib/tools/backend/tab.js +445 -0
  163. package/lib/tools/backend/tabs.js +67 -0
  164. package/lib/tools/backend/tool.js +47 -0
  165. package/lib/tools/backend/tools.js +102 -0
  166. package/lib/tools/backend/tracing.js +78 -0
  167. package/lib/tools/backend/utils.js +83 -0
  168. package/lib/tools/backend/verify.js +151 -0
  169. package/lib/tools/backend/video.js +98 -0
  170. package/lib/tools/backend/wait.js +63 -0
  171. package/lib/tools/backend/webstorage.js +223 -0
  172. package/lib/tools/cli-client/cli.js +6 -0
  173. package/lib/tools/cli-client/help.json +399 -0
  174. package/lib/tools/cli-client/minimist.js +128 -0
  175. package/lib/tools/cli-client/program.js +350 -0
  176. package/lib/tools/cli-client/registry.js +176 -0
  177. package/lib/tools/cli-client/session.js +289 -0
  178. package/lib/tools/cli-client/skill/SKILL.md +328 -0
  179. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  180. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  181. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  182. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  183. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  184. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  185. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  186. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  187. package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
  188. package/lib/tools/cli-daemon/command.js +73 -0
  189. package/lib/tools/cli-daemon/commands.js +956 -0
  190. package/lib/tools/cli-daemon/daemon.js +157 -0
  191. package/lib/tools/cli-daemon/helpGenerator.js +177 -0
  192. package/lib/tools/cli-daemon/program.js +129 -0
  193. package/lib/tools/dashboard/appIcon.png +0 -0
  194. package/lib/tools/dashboard/dashboardApp.js +284 -0
  195. package/lib/tools/dashboard/dashboardController.js +296 -0
  196. package/lib/tools/exports.js +60 -0
  197. package/lib/tools/mcp/browserFactory.js +233 -0
  198. package/lib/tools/mcp/cdpRelay.js +352 -0
  199. package/lib/tools/mcp/cli-stub.js +7 -0
  200. package/lib/tools/mcp/config.d.js +16 -0
  201. package/lib/tools/mcp/config.js +446 -0
  202. package/lib/tools/mcp/configIni.js +189 -0
  203. package/lib/tools/mcp/extensionContextFactory.js +55 -0
  204. package/lib/tools/mcp/index.js +62 -0
  205. package/lib/tools/mcp/log.js +35 -0
  206. package/lib/tools/mcp/program.js +107 -0
  207. package/lib/tools/mcp/protocol.js +28 -0
  208. package/lib/tools/mcp/watchdog.js +44 -0
  209. package/lib/tools/trace/SKILL.md +171 -0
  210. package/lib/{server/trace/viewer/traceParser.js → tools/trace/installSkill.js} +15 -39
  211. package/lib/tools/trace/traceActions.js +142 -0
  212. package/lib/tools/trace/traceAttachments.js +69 -0
  213. package/lib/tools/trace/traceCli.js +87 -0
  214. package/lib/tools/trace/traceConsole.js +97 -0
  215. package/lib/tools/trace/traceErrors.js +55 -0
  216. package/lib/tools/trace/traceOpen.js +69 -0
  217. package/lib/tools/trace/traceParser.js +96 -0
  218. package/lib/tools/trace/traceRequests.js +182 -0
  219. package/lib/tools/trace/traceScreenshot.js +68 -0
  220. package/lib/tools/trace/traceSnapshot.js +149 -0
  221. package/lib/tools/trace/traceUtils.js +153 -0
  222. package/lib/tools/utils/connect.js +32 -0
  223. package/lib/tools/utils/mcp/http.js +152 -0
  224. package/lib/tools/utils/mcp/server.js +230 -0
  225. package/lib/tools/utils/mcp/tool.js +47 -0
  226. package/lib/tools/utils/socketConnection.js +108 -0
  227. package/lib/utils/isomorphic/formatUtils.js +64 -0
  228. package/lib/utils/isomorphic/jsonSchema.js +89 -0
  229. package/lib/utils/isomorphic/mimeType.js +7 -2
  230. package/lib/utils/isomorphic/protocolFormatter.js +2 -2
  231. package/lib/utils/isomorphic/protocolMetainfo.js +127 -106
  232. package/lib/utils/isomorphic/stringUtils.js +3 -3
  233. package/lib/utils/isomorphic/timeoutRunner.js +3 -3
  234. package/lib/utils/isomorphic/trace/snapshotRenderer.js +35 -42
  235. package/lib/utils/isomorphic/trace/traceLoader.js +15 -14
  236. package/lib/utils/isomorphic/trace/traceModel.js +3 -2
  237. package/lib/utils/isomorphic/trace/traceModernizer.js +1 -0
  238. package/lib/utils/isomorphic/urlMatch.js +54 -1
  239. package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
  240. package/lib/utils.js +6 -2
  241. package/lib/utilsBundle.js +3 -21
  242. package/lib/utilsBundleImpl/index.js +132 -133
  243. package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
  244. package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
  245. package/lib/vite/dashboard/index.html +28 -0
  246. package/lib/vite/htmlReport/index.html +2 -70
  247. package/lib/vite/htmlReport/report.css +1 -0
  248. package/lib/vite/htmlReport/report.js +72 -0
  249. package/lib/vite/recorder/assets/{codeMirrorModule-CFUTFUO7.js → codeMirrorModule-C8KMvO9L.js} +20 -20
  250. package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
  251. package/lib/vite/recorder/index.html +1 -1
  252. package/lib/vite/traceViewer/assets/{codeMirrorModule-BVA4h_ZY.js → codeMirrorModule-DS0FLvoc.js} +20 -20
  253. package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
  254. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  255. package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.C5466mMT.js} +1 -1
  256. package/lib/vite/traceViewer/{index.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
  257. package/lib/vite/traceViewer/index.html +4 -4
  258. package/lib/vite/traceViewer/sw.bundle.js +4 -4
  259. package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
  260. package/lib/vite/traceViewer/uiMode.html +3 -3
  261. package/lib/zipBundleImpl.js +2 -2
  262. package/lib/zodBundle.js +39 -0
  263. package/lib/zodBundleImpl.js +40 -0
  264. package/package.json +6 -1
  265. package/types/protocol.d.ts +947 -51
  266. package/types/types.d.ts +854 -74
  267. package/lib/client/pageAgent.js +0 -64
  268. package/lib/mcpBundleImpl/index.js +0 -147
  269. package/lib/server/agent/actionRunner.js +0 -335
  270. package/lib/server/agent/actions.js +0 -128
  271. package/lib/server/agent/codegen.js +0 -111
  272. package/lib/server/agent/context.js +0 -150
  273. package/lib/server/agent/expectTools.js +0 -156
  274. package/lib/server/agent/pageAgent.js +0 -204
  275. package/lib/server/agent/performTools.js +0 -262
  276. package/lib/server/agent/tool.js +0 -109
  277. package/lib/server/dispatchers/pageAgentDispatcher.js +0 -96
  278. package/lib/server/pageBinding.js +0 -87
  279. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
  280. package/lib/vite/recorder/assets/index-CVkBxsGf.js +0 -193
  281. package/lib/vite/traceViewer/assets/defaultSettingsView-CjfmcdOz.js +0 -266
  282. package/lib/vite/traceViewer/defaultSettingsView.7ch9cixO.css +0 -1
  283. package/lib/vite/traceViewer/uiMode.fyrXARf2.js +0 -5
  284. /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
  285. /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
@@ -39,7 +39,9 @@ var import_channelOwner = require("./channelOwner");
39
39
  var import_clientHelper = require("./clientHelper");
40
40
  var import_clock = require("./clock");
41
41
  var import_consoleMessage = require("./consoleMessage");
42
+ var import_debugger = require("./debugger");
42
43
  var import_dialog = require("./dialog");
44
+ var import_disposable = require("./disposable");
43
45
  var import_errors = require("./errors");
44
46
  var import_events = require("./events");
45
47
  var import_fetch = require("./fetch");
@@ -71,13 +73,12 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
71
73
  this._harRecorders = /* @__PURE__ */ new Map();
72
74
  this._closingStatus = "none";
73
75
  this._harRouters = [];
74
- this.routeInjecting = false;
75
76
  this._options = initializer.options;
76
77
  this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
78
+ this.debugger = import_debugger.Debugger.from(initializer.debugger);
77
79
  this.tracing = import_tracing.Tracing.from(initializer.tracing);
78
80
  this.request = import_fetch.APIRequestContext.from(initializer.requestContext);
79
81
  this.request._timeoutSettings = this._timeoutSettings;
80
- this.request._checkUrlAllowed = (url) => this._checkUrlAllowed(url);
81
82
  this.clock = new import_clock.Clock(this);
82
83
  this._channel.on("bindingCall", ({ binding }) => this._onBinding(import_page.BindingCall.from(binding)));
83
84
  this._channel.on("close", () => this._onClose());
@@ -120,11 +121,11 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
120
121
  hasListeners = page.emit(import_events.Events.Page.Dialog, dialogObject) || hasListeners;
121
122
  if (!hasListeners) {
122
123
  if (dialogObject.type() === "beforeunload")
123
- dialogObject._wrapApiCall(() => dialog.accept({}).catch(() => {
124
- }), { internal: true });
124
+ dialog.accept({}).catch(() => {
125
+ });
125
126
  else
126
- dialogObject._wrapApiCall(() => dialog.dismiss().catch(() => {
127
- }), { internal: true });
127
+ dialog.dismiss().catch(() => {
128
+ });
128
129
  }
129
130
  });
130
131
  this._channel.on("request", ({ request, page }) => this._onRequest(network.Request.from(request), import_page.Page.fromNullable(page)));
@@ -205,7 +206,7 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
205
206
  const page = route.request()._safePage();
206
207
  const routeHandlers = this._routes.slice();
207
208
  for (const routeHandler of routeHandlers) {
208
- if (page?._closeWasCalled || this._closingStatus !== "none")
209
+ if (page?._closeWasCalled || this.isClosed())
209
210
  return;
210
211
  if (!routeHandler.matches(route.request().url()))
211
212
  continue;
@@ -262,6 +263,9 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
262
263
  pages() {
263
264
  return [...this._pages];
264
265
  }
266
+ isClosed() {
267
+ return this._closingStatus !== "none";
268
+ }
265
269
  async newPage() {
266
270
  if (this._ownerPage)
267
271
  throw new Error("Please use browser.newContext()");
@@ -310,24 +314,24 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
310
314
  await this._channel.setHTTPCredentials({ httpCredentials: httpCredentials || void 0 });
311
315
  }
312
316
  async addInitScript(script, arg) {
313
- await this.installInjectRoute();
314
317
  const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
315
- await this._channel.addInitScript({ source });
318
+ return import_disposable.DisposableObject.from((await this._channel.addInitScript({ source })).disposable);
316
319
  }
317
320
  async exposeBinding(name, callback, options = {}) {
318
- await this.installInjectRoute();
319
- await this._channel.exposeBinding({ name, needsHandle: options.handle });
321
+ const result = await this._channel.exposeBinding({ name, needsHandle: options.handle });
320
322
  this._bindings.set(name, callback);
323
+ return import_disposable.DisposableObject.from(result.disposable);
321
324
  }
322
325
  async exposeFunction(name, callback) {
323
- await this.installInjectRoute();
324
- await this._channel.exposeBinding({ name });
326
+ const result = await this._channel.exposeBinding({ name });
325
327
  const binding = (source, ...args) => callback(...args);
326
328
  this._bindings.set(name, binding);
329
+ return import_disposable.DisposableObject.from(result.disposable);
327
330
  }
328
331
  async route(url, handler, options = {}) {
329
332
  this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));
330
333
  await this._updateInterceptionPatterns({ title: "Route requests" });
334
+ return new import_disposable.DisposableStub(() => this.unroute(url, handler));
331
335
  }
332
336
  async routeWebSocket(url, handler) {
333
337
  this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));
@@ -418,6 +422,10 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
418
422
  }
419
423
  return state;
420
424
  }
425
+ async setStorageState(storageState) {
426
+ const state = await prepareStorageState(this._platform, storageState);
427
+ await this._channel.setStorageState({ storageState: state });
428
+ }
421
429
  backgroundPages() {
422
430
  return [];
423
431
  }
@@ -443,7 +451,7 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
443
451
  await this.close();
444
452
  }
445
453
  async close(options = {}) {
446
- if (this._closingStatus !== "none")
454
+ if (this.isClosed())
447
455
  return;
448
456
  this._closeReason = options.reason;
449
457
  this._closingStatus = "closing";
@@ -482,53 +490,6 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
482
490
  async _exposeConsoleApi() {
483
491
  await this._channel.exposeConsoleApi();
484
492
  }
485
- _setAllowedProtocols(protocols) {
486
- this._allowedProtocols = protocols;
487
- }
488
- _checkUrlAllowed(url) {
489
- if (!this._allowedProtocols)
490
- return;
491
- let parsedURL;
492
- try {
493
- parsedURL = new URL(url);
494
- } catch (e) {
495
- throw new Error(`Access to ${url} is blocked. Invalid URL: ${e.message}`);
496
- }
497
- if (!this._allowedProtocols.includes(parsedURL.protocol))
498
- throw new Error(`Access to "${parsedURL.protocol}" URL is blocked. Allowed protocols: ${this._allowedProtocols.join(", ")}. Attempted URL: ${url}`);
499
- }
500
- _setAllowedDirectories(rootDirectories) {
501
- this._allowedDirectories = rootDirectories;
502
- }
503
- _checkFileAccess(filePath) {
504
- if (!this._allowedDirectories)
505
- return;
506
- const path = this._platform.path().resolve(filePath);
507
- const isInsideDir = (container, child) => {
508
- const path2 = this._platform.path();
509
- const rel = path2.relative(container, child);
510
- return !!rel && !rel.startsWith("..") && !path2.isAbsolute(rel);
511
- };
512
- if (this._allowedDirectories.some((root) => isInsideDir(root, path)))
513
- return;
514
- throw new Error(`File access denied: ${filePath} is outside allowed roots. Allowed roots: ${this._allowedDirectories.length ? this._allowedDirectories.join(", ") : "none"}`);
515
- }
516
- async installInjectRoute() {
517
- if (this.routeInjecting) return;
518
- await this.route("**/*", async (route) => {
519
- try {
520
- if (route.request().resourceType() === "document" && route.request().url().startsWith("http")) {
521
- const protocol = route.request().url().split(":")[0];
522
- await route.fallback({ url: protocol + "://patchright-init-script-inject.internal/" });
523
- } else {
524
- await route.fallback();
525
- }
526
- } catch (error) {
527
- await route.fallback();
528
- }
529
- });
530
- this.routeInjecting = true;
531
- }
532
493
  }
533
494
  async function prepareStorageState(platform, storageState) {
534
495
  if (typeof storageState !== "string")
@@ -25,12 +25,9 @@ var import_browser = require("./browser");
25
25
  var import_browserContext = require("./browserContext");
26
26
  var import_channelOwner = require("./channelOwner");
27
27
  var import_clientHelper = require("./clientHelper");
28
- var import_events = require("./events");
29
28
  var import_assert = require("../utils/isomorphic/assert");
30
29
  var import_headers = require("../utils/isomorphic/headers");
31
- var import_time = require("../utils/isomorphic/time");
32
- var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
33
- var import_webSocket = require("./webSocket");
30
+ var import_connect = require("./connect");
34
31
  var import_timeoutSettings = require("./timeoutSettings");
35
32
  class BrowserType extends import_channelOwner.ChannelOwner {
36
33
  constructor() {
@@ -101,57 +98,18 @@ class BrowserType extends import_channelOwner.ChannelOwner {
101
98
  await this._instrumentation.runAfterCreateBrowserContext(context);
102
99
  return context;
103
100
  }
104
- async connect(optionsOrWsEndpoint, options) {
105
- if (typeof optionsOrWsEndpoint === "string")
106
- return await this._connect({ ...options, wsEndpoint: optionsOrWsEndpoint });
107
- (0, import_assert.assert)(optionsOrWsEndpoint.wsEndpoint, "options.wsEndpoint is required");
108
- return await this._connect(optionsOrWsEndpoint);
101
+ async connect(optionsOrEndpoint, options) {
102
+ if (typeof optionsOrEndpoint === "string")
103
+ return await this._connect({ ...options, endpoint: optionsOrEndpoint });
104
+ (0, import_assert.assert)(optionsOrEndpoint.wsEndpoint, "options.wsEndpoint is required");
105
+ return await this._connect({ ...options, endpoint: optionsOrEndpoint.wsEndpoint });
109
106
  }
110
107
  async _connect(params) {
111
108
  const logger = params.logger;
112
109
  return await this._wrapApiCall(async () => {
113
- const deadline = params.timeout ? (0, import_time.monotonicTime)() + params.timeout : 0;
114
- const headers = { "x-playwright-browser": this.name(), ...params.headers };
115
- const connectParams = {
116
- wsEndpoint: params.wsEndpoint,
117
- headers,
118
- exposeNetwork: params.exposeNetwork ?? params._exposeNetwork,
119
- slowMo: params.slowMo,
120
- timeout: params.timeout || 0
121
- };
122
- if (params.__testHookRedirectPortForwarding)
123
- connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
124
- const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
125
- let browser;
126
- connection.on("close", () => {
127
- for (const context of browser?.contexts() || []) {
128
- for (const page of context.pages())
129
- page._onClose();
130
- context._onClose();
131
- }
132
- setTimeout(() => browser?._didClose(), 0);
133
- });
134
- const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
135
- if (params.__testHookBeforeCreateBrowser)
136
- await params.__testHookBeforeCreateBrowser();
137
- const playwright = await connection.initializePlaywright();
138
- if (!playwright._initializer.preLaunchedBrowser) {
139
- connection.close();
140
- throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
141
- }
142
- playwright.selectors = this._playwright.selectors;
143
- browser = import_browser.Browser.from(playwright._initializer.preLaunchedBrowser);
144
- browser._connectToBrowserType(this, {}, logger);
145
- browser._shouldCloseConnectionOnClose = true;
146
- browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
147
- return browser;
148
- }, deadline);
149
- if (!result.timedOut) {
150
- return result.result;
151
- } else {
152
- connection.close();
153
- throw new Error(`Timeout ${params.timeout}ms exceeded`);
154
- }
110
+ const browser = await (0, import_connect.connectToBrowser)(this._playwright, { browserName: this.name(), ...params });
111
+ browser._connectToBrowserType(this, {}, logger);
112
+ return browser;
155
113
  });
156
114
  }
157
115
  async connectOverCDP(endpointURLOrOptions, options) {
@@ -178,6 +136,16 @@ class BrowserType extends import_channelOwner.ChannelOwner {
178
136
  await this._instrumentation.runAfterCreateBrowserContext(import_browserContext.BrowserContext.from(result.defaultContext));
179
137
  return browser;
180
138
  }
139
+ async _connectOverCDPTransport(transport) {
140
+ if (this.name() !== "chromium")
141
+ throw new Error("Connecting over CDP is only supported in Chromium.");
142
+ const result = await this._channel.connectOverCDPTransport({ transport });
143
+ const browser = import_browser.Browser.from(result.browser);
144
+ browser._connectToBrowserType(this, {}, void 0);
145
+ if (result.defaultContext)
146
+ await this._instrumentation.runAfterCreateBrowserContext(import_browserContext.BrowserContext.from(result.defaultContext));
147
+ return browser;
148
+ }
181
149
  }
182
150
  // Annotate the CommonJS export names for ESM import in node:
183
151
  0 && (module.exports = {
@@ -28,8 +28,12 @@ class CDPSession extends import_channelOwner.ChannelOwner {
28
28
  }
29
29
  constructor(parent, type, guid, initializer) {
30
30
  super(parent, type, guid, initializer);
31
- this._channel.on("event", ({ method, params }) => {
32
- this.emit(method, params);
31
+ this._channel.on("event", (event) => {
32
+ this.emit(event.method, event.params);
33
+ this.emit("event", event);
34
+ });
35
+ this._channel.on("close", () => {
36
+ this.emit("close", this);
33
37
  });
34
38
  this.on = super.on;
35
39
  this.addListener = super.addListener;
@@ -118,7 +118,7 @@ class ChannelOwner extends import_eventEmitter.EventEmitter {
118
118
  get: (obj, prop) => {
119
119
  if (typeof prop === "string") {
120
120
  const validator = (0, import_validator.maybeFindValidator)(this._type, prop, "Params");
121
- const { internal } = import_protocolMetainfo.methodMetainfo.get(this._type + "." + prop) || {};
121
+ const { internal } = (0, import_protocolMetainfo.getMetainfo)({ type: this._type, method: prop }) || {};
122
122
  if (validator) {
123
123
  return async (params) => {
124
124
  return await this._wrapApiCall(async (apiZone) => {
@@ -53,7 +53,8 @@ async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
53
53
  throw new Error("Either path or content property must be present");
54
54
  }
55
55
  function addSourceUrlToScript(source, path) {
56
- return source;
56
+ return `${source}
57
+ //# sourceURL=${path.replace(/\n/g, "")}`;
57
58
  }
58
59
  // Annotate the CommonJS export names for ESM import in node:
59
60
  0 && (module.exports = {
@@ -26,7 +26,6 @@ class Clock {
26
26
  this._browserContext = browserContext;
27
27
  }
28
28
  async install(options = {}) {
29
- await this._browserContext.installInjectRoute();
30
29
  await this._browserContext._channel.clockInstall(options.time !== void 0 ? parseTime(options.time) : {});
31
30
  }
32
31
  async fastForward(ticks) {
@@ -16,13 +16,62 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var webSocket_exports = {};
20
- __export(webSocket_exports, {
21
- connectOverWebSocket: () => connectOverWebSocket
19
+ var connect_exports = {};
20
+ __export(connect_exports, {
21
+ connectToBrowser: () => connectToBrowser,
22
+ connectToEndpoint: () => connectToEndpoint
22
23
  });
23
- module.exports = __toCommonJS(webSocket_exports);
24
+ module.exports = __toCommonJS(connect_exports);
25
+ var import_time = require("../utils/isomorphic/time");
26
+ var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
27
+ var import_browser = require("./browser");
24
28
  var import_connection = require("./connection");
25
- async function connectOverWebSocket(parentConnection, params) {
29
+ var import_events = require("./events");
30
+ async function connectToBrowser(playwright, params) {
31
+ const deadline = params.timeout ? (0, import_time.monotonicTime)() + params.timeout : 0;
32
+ const nameParam = params.browserName ? { "x-playwright-browser": params.browserName } : {};
33
+ const headers = { ...nameParam, ...params.headers };
34
+ const connectParams = {
35
+ endpoint: params.endpoint,
36
+ headers,
37
+ exposeNetwork: params.exposeNetwork,
38
+ slowMo: params.slowMo,
39
+ timeout: params.timeout || 0
40
+ };
41
+ if (params.__testHookRedirectPortForwarding)
42
+ connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
43
+ const connection = await connectToEndpoint(playwright._connection, connectParams);
44
+ let browser;
45
+ connection.on("close", () => {
46
+ for (const context of browser?.contexts() || []) {
47
+ for (const page of context.pages())
48
+ page._onClose();
49
+ context._onClose();
50
+ }
51
+ setTimeout(() => browser?._didClose(), 0);
52
+ });
53
+ const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
54
+ if (params.__testHookBeforeCreateBrowser)
55
+ await params.__testHookBeforeCreateBrowser();
56
+ const playwright2 = await connection.initializePlaywright();
57
+ if (!playwright2._initializer.preLaunchedBrowser) {
58
+ connection.close();
59
+ throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
60
+ }
61
+ playwright2.selectors = playwright2.selectors;
62
+ browser = import_browser.Browser.from(playwright2._initializer.preLaunchedBrowser);
63
+ browser._shouldCloseConnectionOnClose = true;
64
+ browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
65
+ return browser;
66
+ }, deadline);
67
+ if (!result.timedOut) {
68
+ return result.result;
69
+ } else {
70
+ connection.close();
71
+ throw new Error(`Timeout ${params.timeout}ms exceeded`);
72
+ }
73
+ }
74
+ async function connectToEndpoint(parentConnection, params) {
26
75
  const localUtils = parentConnection.localUtils();
27
76
  const transport = localUtils ? new JsonPipeTransport(localUtils) : new WebSocketTransport();
28
77
  const connectHeaders = await transport.connect(params);
@@ -71,7 +120,7 @@ class JsonPipeTransport {
71
120
  }
72
121
  class WebSocketTransport {
73
122
  async connect(params) {
74
- this._ws = new window.WebSocket(params.wsEndpoint);
123
+ this._ws = new window.WebSocket(params.endpoint);
75
124
  return [];
76
125
  }
77
126
  async send(message) {
@@ -89,5 +138,6 @@ class WebSocketTransport {
89
138
  }
90
139
  // Annotate the CommonJS export names for ESM import in node:
91
140
  0 && (module.exports = {
92
- connectOverWebSocket
141
+ connectToBrowser,
142
+ connectToEndpoint
93
143
  });
@@ -30,7 +30,9 @@ var import_browserType = require("./browserType");
30
30
  var import_cdpSession = require("./cdpSession");
31
31
  var import_channelOwner = require("./channelOwner");
32
32
  var import_clientInstrumentation = require("./clientInstrumentation");
33
+ var import_debugger = require("./debugger");
33
34
  var import_dialog = require("./dialog");
35
+ var import_disposable = require("./disposable");
34
36
  var import_electron = require("./electron");
35
37
  var import_elementHandle = require("./elementHandle");
36
38
  var import_errors = require("./errors");
@@ -48,7 +50,6 @@ var import_worker = require("./worker");
48
50
  var import_writableStream = require("./writableStream");
49
51
  var import_validator = require("../protocol/validator");
50
52
  var import_stackTrace = require("../utils/isomorphic/stackTrace");
51
- var import_pageAgent = require("./pageAgent");
52
53
  class Root extends import_channelOwner.ChannelOwner {
53
54
  constructor(connection) {
54
55
  super(connection, "Root", "", {});
@@ -233,9 +234,15 @@ class Connection extends import_eventEmitter.EventEmitter {
233
234
  case "CDPSession":
234
235
  result = new import_cdpSession.CDPSession(parent, type, guid, initializer);
235
236
  break;
237
+ case "Debugger":
238
+ result = new import_debugger.Debugger(parent, type, guid, initializer);
239
+ break;
236
240
  case "Dialog":
237
241
  result = new import_dialog.Dialog(parent, type, guid, initializer);
238
242
  break;
243
+ case "Disposable":
244
+ result = new import_disposable.DisposableObject(parent, type, guid, initializer);
245
+ break;
239
246
  case "Electron":
240
247
  result = new import_electron.Electron(parent, type, guid, initializer);
241
248
  break;
@@ -262,9 +269,6 @@ class Connection extends import_eventEmitter.EventEmitter {
262
269
  case "Page":
263
270
  result = new import_page.Page(parent, type, guid, initializer);
264
271
  break;
265
- case "PageAgent":
266
- result = new import_pageAgent.PageAgent(parent, type, guid, initializer);
267
- break;
268
272
  case "Playwright":
269
273
  result = new import_playwright.Playwright(parent, type, guid, initializer);
270
274
  break;
@@ -48,6 +48,9 @@ class ConsoleMessage {
48
48
  location() {
49
49
  return this._event.location;
50
50
  }
51
+ timestamp() {
52
+ return this._event.timestamp;
53
+ }
51
54
  _inspect() {
52
55
  return this.text();
53
56
  }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var debugger_exports = {};
20
+ __export(debugger_exports, {
21
+ Debugger: () => Debugger
22
+ });
23
+ module.exports = __toCommonJS(debugger_exports);
24
+ var import_channelOwner = require("./channelOwner");
25
+ var import_events = require("./events");
26
+ class Debugger extends import_channelOwner.ChannelOwner {
27
+ constructor(parent, type, guid, initializer) {
28
+ super(parent, type, guid, initializer);
29
+ this._pausedDetails = null;
30
+ this._channel.on("pausedStateChanged", ({ pausedDetails }) => {
31
+ this._pausedDetails = pausedDetails ?? null;
32
+ this.emit(import_events.Events.Debugger.PausedStateChanged);
33
+ });
34
+ }
35
+ static from(channel) {
36
+ return channel._object;
37
+ }
38
+ async requestPause() {
39
+ await this._channel.requestPause();
40
+ }
41
+ async resume() {
42
+ await this._channel.resume();
43
+ }
44
+ async next() {
45
+ await this._channel.next();
46
+ }
47
+ async runTo(location) {
48
+ await this._channel.runTo({ location });
49
+ }
50
+ pausedDetails() {
51
+ return this._pausedDetails;
52
+ }
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ Debugger
57
+ });
@@ -23,6 +23,7 @@ __export(dialog_exports, {
23
23
  module.exports = __toCommonJS(dialog_exports);
24
24
  var import_channelOwner = require("./channelOwner");
25
25
  var import_page = require("./page");
26
+ var import_errors = require("./errors");
26
27
  class Dialog extends import_channelOwner.ChannelOwner {
27
28
  static from(dialog) {
28
29
  return dialog._object;
@@ -47,7 +48,13 @@ class Dialog extends import_channelOwner.ChannelOwner {
47
48
  await this._channel.accept({ promptText });
48
49
  }
49
50
  async dismiss() {
50
- await this._channel.dismiss();
51
+ try {
52
+ await this._channel.dismiss();
53
+ } catch (e) {
54
+ if ((0, import_errors.isTargetClosedError)(e))
55
+ return;
56
+ throw e;
57
+ }
51
58
  }
52
59
  }
53
60
  // Annotate the CommonJS export names for ESM import in node:
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var disposable_exports = {};
20
+ __export(disposable_exports, {
21
+ DisposableObject: () => DisposableObject,
22
+ DisposableStub: () => DisposableStub,
23
+ disposeAll: () => disposeAll
24
+ });
25
+ module.exports = __toCommonJS(disposable_exports);
26
+ var import_channelOwner = require("./channelOwner");
27
+ var import_errors = require("./errors");
28
+ class DisposableObject extends import_channelOwner.ChannelOwner {
29
+ static from(channel) {
30
+ return channel._object;
31
+ }
32
+ async [Symbol.asyncDispose]() {
33
+ await this.dispose();
34
+ }
35
+ async dispose() {
36
+ try {
37
+ await this._channel.dispose();
38
+ } catch (e) {
39
+ if ((0, import_errors.isTargetClosedError)(e))
40
+ return;
41
+ throw e;
42
+ }
43
+ }
44
+ }
45
+ class DisposableStub {
46
+ constructor(dispose) {
47
+ this._dispose = dispose;
48
+ }
49
+ async [Symbol.asyncDispose]() {
50
+ await this.dispose();
51
+ }
52
+ async dispose() {
53
+ if (!this._dispose)
54
+ return;
55
+ try {
56
+ const dispose = this._dispose;
57
+ this._dispose = void 0;
58
+ await dispose();
59
+ } catch (e) {
60
+ if ((0, import_errors.isTargetClosedError)(e))
61
+ return;
62
+ throw e;
63
+ }
64
+ }
65
+ }
66
+ async function disposeAll(disposables) {
67
+ const copy = [...disposables];
68
+ disposables.length = 0;
69
+ await Promise.all(copy.map((d) => d.dispose()));
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ DisposableObject,
74
+ DisposableStub,
75
+ disposeAll
76
+ });
@@ -44,6 +44,7 @@ class Electron extends import_channelOwner.ChannelOwner {
44
44
  ...await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options),
45
45
  env: (0, import_clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
46
46
  tracesDir: options.tracesDir,
47
+ artifactsDir: options.artifactsDir,
47
48
  timeout: new import_timeoutSettings.TimeoutSettings(this._platform).launchTimeout(options)
48
49
  };
49
50
  const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
@@ -230,11 +230,8 @@ async function convertInputFiles(platform, files, context) {
230
230
  if (!items.every((item) => typeof item === "string"))
231
231
  throw new Error("File paths cannot be mixed with buffers");
232
232
  const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);
233
- localPaths?.forEach((path) => context._checkFileAccess(path));
234
- if (localDirectory)
235
- context._checkFileAccess(localDirectory);
236
233
  if (context._connection.isRemote()) {
237
- const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.path, f.name)) : localPaths;
234
+ const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.parentPath, f.name)) : localPaths;
238
235
  const { writableStreams, rootDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({
239
236
  rootDirName: localDirectory ? platform.path().basename(localDirectory) : void 0,
240
237
  items: await Promise.all(files2.map(async (file) => {
@@ -36,6 +36,9 @@ const Events = {
36
36
  Browser: {
37
37
  Disconnected: "disconnected"
38
38
  },
39
+ Debugger: {
40
+ PausedStateChanged: "pausedstatechanged"
41
+ },
39
42
  BrowserContext: {
40
43
  Console: "console",
41
44
  Close: "close",
@@ -78,9 +81,6 @@ const Events = {
78
81
  WebSocket: "websocket",
79
82
  Worker: "worker"
80
83
  },
81
- PageAgent: {
82
- Turn: "turn"
83
- },
84
84
  WebSocket: {
85
85
  Close: "close",
86
86
  Error: "socketerror",
@@ -133,7 +133,6 @@ class APIRequestContext extends import_channelOwner.ChannelOwner {
133
133
  (0, import_assert.assert)(options.maxRedirects === void 0 || options.maxRedirects >= 0, `'maxRedirects' must be greater than or equal to '0'`);
134
134
  (0, import_assert.assert)(options.maxRetries === void 0 || options.maxRetries >= 0, `'maxRetries' must be greater than or equal to '0'`);
135
135
  const url = options.url !== void 0 ? options.url : options.request.url();
136
- this._checkUrlAllowed?.(url);
137
136
  const method = options.method || options.request?.method();
138
137
  let encodedParams = void 0;
139
138
  if (typeof options.params === "string")