patchright-core 1.58.2 → 1.59.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 (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 +8 -6
  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.BVu7tZDe.css → index.CzXZzn5A.css} +1 -1
  256. package/lib/vite/traceViewer/{index.BtyWtaE-.js → index.Dtstcb7U.js} +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
@@ -36,6 +36,7 @@ var import_path = __toESM(require("path"));
36
36
  var import_browserContext = require("../browserContext");
37
37
  var import_artifactDispatcher = require("./artifactDispatcher");
38
38
  var import_cdpSessionDispatcher = require("./cdpSessionDispatcher");
39
+ var import_debuggerDispatcher = require("./debuggerDispatcher");
39
40
  var import_dialogDispatcher = require("./dialogDispatcher");
40
41
  var import_dispatcher = require("./dispatcher");
41
42
  var import_frameDispatcher = require("./frameDispatcher");
@@ -43,6 +44,7 @@ var import_networkDispatchers = require("./networkDispatchers");
43
44
  var import_pageDispatcher = require("./pageDispatcher");
44
45
  var import_crBrowser = require("../chromium/crBrowser");
45
46
  var import_errors = require("../errors");
47
+ var import_disposableDispatcher = require("./disposableDispatcher");
46
48
  var import_tracingDispatcher = require("./tracingDispatcher");
47
49
  var import_webSocketRouteDispatcher = require("./webSocketRouteDispatcher");
48
50
  var import_writableStreamDispatcher = require("./writableStreamDispatcher");
@@ -52,12 +54,14 @@ var import_recorder = require("../recorder");
52
54
  var import_recorderApp = require("../recorder/recorderApp");
53
55
  var import_elementHandlerDispatcher = require("./elementHandlerDispatcher");
54
56
  var import_jsHandleDispatcher = require("./jsHandleDispatcher");
57
+ var import_disposable = require("../disposable");
55
58
  class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
56
59
  constructor(parentScope, context) {
60
+ const debugger_ = import_debuggerDispatcher.DebuggerDispatcher.from(parentScope, context.debugger());
57
61
  const requestContext = import_networkDispatchers.APIRequestContextDispatcher.from(parentScope, context.fetchRequest);
58
62
  const tracing = import_tracingDispatcher.TracingDispatcher.from(parentScope, context.tracing);
59
63
  super(parentScope, context, "BrowserContext", {
60
- isChromium: context._browser.options.isChromium,
64
+ debugger: debugger_,
61
65
  requestContext,
62
66
  tracing,
63
67
  options: context._options
@@ -66,10 +70,10 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
66
70
  this._type_BrowserContext = true;
67
71
  this._subscriptions = /* @__PURE__ */ new Set();
68
72
  this._webSocketInterceptionPatterns = [];
69
- this._bindings = [];
70
- this._initScripts = [];
73
+ this._disposables = [];
71
74
  this._clockPaused = false;
72
75
  this._interceptionUrlMatchers = [];
76
+ this.adopt(debugger_);
73
77
  this.adopt(requestContext);
74
78
  this.adopt(tracing);
75
79
  this._requestInterceptor = (route, request) => {
@@ -83,15 +87,6 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
83
87
  this._dispatchEvent("route", { route: new import_networkDispatchers.RouteDispatcher(import_networkDispatchers.RequestDispatcher.from(this, request), route) });
84
88
  };
85
89
  this._context = context;
86
- const onVideo = (artifact) => {
87
- const artifactDispatcher = import_artifactDispatcher.ArtifactDispatcher.from(parentScope, artifact);
88
- this._dispatchEvent("video", { artifact: artifactDispatcher });
89
- };
90
- this.addObjectListener(import_browserContext.BrowserContext.Events.VideoStarted, onVideo);
91
- for (const video of context._browser._idToVideo.values()) {
92
- if (video.context === context)
93
- onVideo(video.artifact);
94
- }
95
90
  for (const page of context.pages())
96
91
  this._dispatchEvent("page", { page: import_pageDispatcher.PageDispatcher.from(this, page) });
97
92
  this.addObjectListener(import_browserContext.BrowserContext.Events.Page, (page) => {
@@ -116,6 +111,8 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
116
111
  }
117
112
  });
118
113
  this._dialogHandler = (dialog) => {
114
+ if (!this._shouldDispatchEvent(dialog.page(), "dialog"))
115
+ return false;
119
116
  this._dispatchEvent("dialog", { dialog: new import_dialogDispatcher.DialogDispatcher(this, dialog) });
120
117
  return true;
121
118
  };
@@ -195,7 +192,8 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
195
192
  return import_elementHandlerDispatcher.ElementHandleDispatcher.from(import_frameDispatcher.FrameDispatcher.from(this, elementHandle._frame), elementHandle);
196
193
  return import_jsHandleDispatcher.JSHandleDispatcher.fromJSHandle(jsScope, a);
197
194
  }),
198
- location: message.location()
195
+ location: message.location(),
196
+ timestamp: message.timestamp()
199
197
  };
200
198
  }
201
199
  async createTempFiles(params, progress) {
@@ -222,7 +220,8 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
222
220
  this._dispatchEvent("bindingCall", { binding: binding2 });
223
221
  return binding2.promise();
224
222
  });
225
- this._bindings.push(binding);
223
+ this._disposables.push(binding);
224
+ return { disposable: new import_disposableDispatcher.DisposableDispatcher(this, binding) };
226
225
  }
227
226
  async newPage(params, progress) {
228
227
  return { page: import_pageDispatcher.PageDispatcher.from(this, await this._context.newPage(progress)) };
@@ -262,7 +261,9 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
262
261
  await progress.race(this._context.setHTTPCredentials(params.httpCredentials));
263
262
  }
264
263
  async addInitScript(params, progress) {
265
- this._initScripts.push(await this._context.addInitScript(progress, params.source));
264
+ const initScript = await this._context.addInitScript(params.source);
265
+ this._disposables.push(initScript);
266
+ return { disposable: new import_disposableDispatcher.DisposableDispatcher(this, initScript) };
266
267
  }
267
268
  async setNetworkInterceptionPatterns(params, progress) {
268
269
  const hadMatchers = this._interceptionUrlMatchers.length > 0;
@@ -271,7 +272,7 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
271
272
  await this._context.removeRequestInterceptor(this._requestInterceptor);
272
273
  this._interceptionUrlMatchers = [];
273
274
  } else {
274
- this._interceptionUrlMatchers = params.patterns.map((pattern) => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob);
275
+ this._interceptionUrlMatchers = params.patterns.map(import_urlMatch.deserializeURLMatch);
275
276
  if (!hadMatchers)
276
277
  await this._context.addRequestInterceptor(progress, this._requestInterceptor);
277
278
  }
@@ -284,6 +285,9 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
284
285
  async storageState(params, progress) {
285
286
  return await progress.race(this._context.storageState(progress, params.indexedDB));
286
287
  }
288
+ async setStorageState(params, progress) {
289
+ await this._context.setStorageState(progress, params.storageState, "api");
290
+ }
287
291
  async close(params, progress) {
288
292
  progress.metadata.potentiallyClosesScope = true;
289
293
  await this._context.close(params);
@@ -293,8 +297,7 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
293
297
  }
294
298
  async disableRecorder(params, progress) {
295
299
  const recorder = await import_recorder.Recorder.existingForContext(this._context);
296
- if (recorder)
297
- recorder.setMode("none");
300
+ await recorder?.setMode("none");
298
301
  }
299
302
  async exposeConsoleApi(params, progress) {
300
303
  await this._context.exposeConsoleApi();
@@ -302,7 +305,7 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
302
305
  async pause(params, progress) {
303
306
  }
304
307
  async newCDPSession(params, progress) {
305
- if (!this._object._browser.options.isChromium)
308
+ if (this._object._browser.options.browserType !== "chromium")
306
309
  throw new Error(`CDP session is only available in Chromium`);
307
310
  if (!params.page && !params.frame || params.page && params.frame)
308
311
  throw new Error(`CDP session must be initiated with either Page or Frame, not none or both`);
@@ -320,13 +323,13 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
320
323
  return { artifact: import_artifactDispatcher.ArtifactDispatcher.from(this, artifact) };
321
324
  }
322
325
  async clockFastForward(params, progress) {
323
- await this._context.clock.fastForward(progress, params.ticksString ?? params.ticksNumber ?? 0);
326
+ await this._context.clock.fastForward(params.ticksString ?? params.ticksNumber ?? 0);
324
327
  }
325
328
  async clockInstall(params, progress) {
326
- await this._context.clock.install(progress, params.timeString ?? params.timeNumber ?? void 0);
329
+ await this._context.clock.install(params.timeString ?? params.timeNumber ?? void 0);
327
330
  }
328
331
  async clockPauseAt(params, progress) {
329
- await this._context.clock.pauseAt(progress, params.timeString ?? params.timeNumber ?? 0);
332
+ await this._context.clock.pauseAt(params.timeString ?? params.timeNumber ?? 0);
330
333
  this._clockPaused = true;
331
334
  }
332
335
  async clockResume(params, progress) {
@@ -334,13 +337,13 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
334
337
  this._clockPaused = false;
335
338
  }
336
339
  async clockRunFor(params, progress) {
337
- await this._context.clock.runFor(progress, params.ticksString ?? params.ticksNumber ?? 0);
340
+ await this._context.clock.runFor(params.ticksString ?? params.ticksNumber ?? 0);
338
341
  }
339
342
  async clockSetFixedTime(params, progress) {
340
- await this._context.clock.setFixedTime(progress, params.timeString ?? params.timeNumber ?? 0);
343
+ await this._context.clock.setFixedTime(params.timeString ?? params.timeNumber ?? 0);
341
344
  }
342
345
  async clockSetSystemTime(params, progress) {
343
- await this._context.clock.setSystemTime(progress, params.timeString ?? params.timeNumber ?? 0);
346
+ await this._context.clock.setSystemTime(params.timeString ?? params.timeNumber ?? 0);
344
347
  }
345
348
  async updateSubscription(params, progress) {
346
349
  if (params.enabled)
@@ -361,12 +364,8 @@ class BrowserContextDispatcher extends import_dispatcher.Dispatcher {
361
364
  this._interceptionUrlMatchers = [];
362
365
  this._context.removeRequestInterceptor(this._requestInterceptor).catch(() => {
363
366
  });
364
- this._context.removeExposedBindings(this._bindings).catch(() => {
365
- });
366
- this._bindings = [];
367
- this._context.removeInitScripts(this._initScripts).catch(() => {
367
+ (0, import_disposable.disposeAll)(this._disposables).catch(() => {
368
368
  });
369
- this._initScripts = [];
370
369
  if (this._routeWebSocketInitScript)
371
370
  import_webSocketRouteDispatcher.WebSocketRouteDispatcher.uninstall(this.connection, this._context, this._routeWebSocketInitScript).catch(() => {
372
371
  });
@@ -29,7 +29,7 @@ var import_browserContext = require("../browserContext");
29
29
  var import_artifactDispatcher = require("./artifactDispatcher");
30
30
  class BrowserDispatcher extends import_dispatcher.Dispatcher {
31
31
  constructor(scope, browser, options = {}) {
32
- super(scope, browser, "Browser", { version: browser.version(), name: browser.options.name });
32
+ super(scope, browser, "Browser", { version: browser.version(), name: browser.options.name, browserName: browser.options.browserType });
33
33
  this._type_Browser = true;
34
34
  this._isolatedContexts = /* @__PURE__ */ new Set();
35
35
  this._options = options;
@@ -48,7 +48,7 @@ class BrowserDispatcher extends import_dispatcher.Dispatcher {
48
48
  }
49
49
  async newContext(params, progress) {
50
50
  if (params.recordVideo && this._object.attribution.playwright.options.isServer)
51
- params.recordVideo.dir = this._object.options.artifactsDir;
51
+ params.recordVideo.dir = void 0;
52
52
  if (!this._options.isolateContexts) {
53
53
  const context2 = await this._object.newContext(progress, params);
54
54
  const contextDispatcher2 = import_browserContextDispatcher.BrowserContextDispatcher.from(this, context2);
@@ -91,23 +91,29 @@ class BrowserDispatcher extends import_dispatcher.Dispatcher {
91
91
  return { userAgent: this._object.userAgent() };
92
92
  }
93
93
  async newBrowserCDPSession(params, progress) {
94
- if (!this._object.options.isChromium)
94
+ if (this._object.options.browserType !== "chromium")
95
95
  throw new Error(`CDP session is only available in Chromium`);
96
96
  const crBrowser = this._object;
97
97
  return { session: new import_cdpSessionDispatcher.CDPSessionDispatcher(this, await crBrowser.newBrowserCDPSession()) };
98
98
  }
99
99
  async startTracing(params, progress) {
100
- if (!this._object.options.isChromium)
100
+ if (this._object.options.browserType !== "chromium")
101
101
  throw new Error(`Tracing is only available in Chromium`);
102
102
  const crBrowser = this._object;
103
103
  await crBrowser.startTracing(params.page ? params.page._object : void 0, params);
104
104
  }
105
105
  async stopTracing(params, progress) {
106
- if (!this._object.options.isChromium)
106
+ if (this._object.options.browserType !== "chromium")
107
107
  throw new Error(`Tracing is only available in Chromium`);
108
108
  const crBrowser = this._object;
109
109
  return { artifact: import_artifactDispatcher.ArtifactDispatcher.from(this, await crBrowser.stopTracing()) };
110
110
  }
111
+ async startServer(params, progress) {
112
+ return await this._object.startServer(params.title, params);
113
+ }
114
+ async stopServer(params, progress) {
115
+ await this._object.stopServer();
116
+ }
111
117
  async cleanupContexts() {
112
118
  await Promise.all(Array.from(this._isolatedContexts).map((context) => context.close({ reason: "Global context cleanup (connection terminated)" })));
113
119
  }
@@ -57,6 +57,13 @@ class BrowserTypeDispatcher extends import_dispatcher.Dispatcher {
57
57
  defaultContext: browser._defaultContext ? import_browserContextDispatcher.BrowserContextDispatcher.from(browserDispatcher, browser._defaultContext) : void 0
58
58
  };
59
59
  }
60
+ async connectOverCDPTransport(params, progress) {
61
+ if (this._denyLaunch)
62
+ throw new Error(`Launching more browsers is not allowed.`);
63
+ const browser = await this._object.connectOverCDPTransport(progress, params.transport);
64
+ const browserDispatcher = new import_browserDispatcher.BrowserDispatcher(this, browser);
65
+ return { browser: browserDispatcher, defaultContext: browser._defaultContext ? import_browserContextDispatcher.BrowserContextDispatcher.from(browserDispatcher, browser._defaultContext) : void 0 };
66
+ }
60
67
  }
61
68
  // Annotate the CommonJS export names for ESM import in node:
62
69
  0 && (module.exports = {
@@ -28,7 +28,10 @@ class CDPSessionDispatcher extends import_dispatcher.Dispatcher {
28
28
  super(scope, cdpSession, "CDPSession", {});
29
29
  this._type_CDPSession = true;
30
30
  this.addObjectListener(import_crConnection.CDPSession.Events.Event, ({ method, params }) => this._dispatchEvent("event", { method, params }));
31
- this.addObjectListener(import_crConnection.CDPSession.Events.Closed, () => this._dispose());
31
+ this.addObjectListener(import_crConnection.CDPSession.Events.Closed, () => {
32
+ this._dispatchEvent("close");
33
+ this._dispose();
34
+ });
32
35
  }
33
36
  async send(params, progress) {
34
37
  return { result: await progress.race(this._object.send(params.method, params.params)) };
@@ -0,0 +1,84 @@
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 debuggerDispatcher_exports = {};
20
+ __export(debuggerDispatcher_exports, {
21
+ DebuggerDispatcher: () => DebuggerDispatcher
22
+ });
23
+ module.exports = __toCommonJS(debuggerDispatcher_exports);
24
+ var import_dispatcher = require("./dispatcher");
25
+ var import_debugger = require("../debugger");
26
+ var import_protocolFormatter = require("../../utils/isomorphic/protocolFormatter");
27
+ class DebuggerDispatcher extends import_dispatcher.Dispatcher {
28
+ constructor(scope, debugger_) {
29
+ super(scope, debugger_, "Debugger", {});
30
+ this._type_EventTarget = true;
31
+ this._type_Debugger = true;
32
+ this.addObjectListener(import_debugger.Debugger.Events.PausedStateChanged, () => {
33
+ this._dispatchEvent("pausedStateChanged", { pausedDetails: this._serializePausedDetails() });
34
+ });
35
+ this._dispatchEvent("pausedStateChanged", { pausedDetails: this._serializePausedDetails() });
36
+ }
37
+ static from(scope, debugger_) {
38
+ const result = scope.connection.existingDispatcher(debugger_);
39
+ return result || new DebuggerDispatcher(scope, debugger_);
40
+ }
41
+ _serializePausedDetails() {
42
+ const details = this._object.pausedDetails();
43
+ if (!details)
44
+ return void 0;
45
+ const { metadata } = details;
46
+ return {
47
+ location: {
48
+ file: metadata.location?.file ?? "<unknown>",
49
+ line: metadata.location?.line,
50
+ column: metadata.location?.column
51
+ },
52
+ title: (0, import_protocolFormatter.renderTitleForCall)(metadata)
53
+ };
54
+ }
55
+ async requestPause(params, progress) {
56
+ if (this._object.isPaused())
57
+ throw new Error("Debugger is already paused");
58
+ this._object.setPauseBeforeWaitingActions();
59
+ this._object.setPauseAt({ next: true });
60
+ }
61
+ async resume(params, progress) {
62
+ if (!this._object.isPaused())
63
+ throw new Error("Debugger is not paused");
64
+ this._object.resume();
65
+ }
66
+ async next(params, progress) {
67
+ if (!this._object.isPaused())
68
+ throw new Error("Debugger is not paused");
69
+ this._object.setPauseBeforeWaitingActions();
70
+ this._object.setPauseAt({ next: true });
71
+ this._object.resume();
72
+ }
73
+ async runTo(params, progress) {
74
+ if (!this._object.isPaused())
75
+ throw new Error("Debugger is not paused");
76
+ this._object.setPauseBeforeWaitingActions();
77
+ this._object.setPauseAt({ location: params.location });
78
+ this._object.resume();
79
+ }
80
+ }
81
+ // Annotate the CommonJS export names for ESM import in node:
82
+ 0 && (module.exports = {
83
+ DebuggerDispatcher
84
+ });
@@ -269,7 +269,7 @@ class DispatcherConnection {
269
269
  this.onmessage({ id, error: (0, import_errors.serializeError)(e) });
270
270
  return;
271
271
  }
272
- const metainfo = import_protocolMetainfo.methodMetainfo.get(dispatcher._type + "." + method);
272
+ const metainfo = (0, import_protocolMetainfo.getMetainfo)({ type: dispatcher._type, method });
273
273
  if (metainfo?.internal) {
274
274
  validMetadata.internal = true;
275
275
  }
@@ -0,0 +1,39 @@
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 disposableDispatcher_exports = {};
20
+ __export(disposableDispatcher_exports, {
21
+ DisposableDispatcher: () => DisposableDispatcher
22
+ });
23
+ module.exports = __toCommonJS(disposableDispatcher_exports);
24
+ var import_dispatcher = require("./dispatcher");
25
+ class DisposableDispatcher extends import_dispatcher.Dispatcher {
26
+ constructor(scope, disposable) {
27
+ super(scope, disposable, "Disposable", {});
28
+ this._type_Disposable = true;
29
+ }
30
+ async dispose(_, progress) {
31
+ progress.metadata.potentiallyClosesScope = true;
32
+ await this._object.dispose();
33
+ this._dispose();
34
+ }
35
+ }
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ DisposableDispatcher
39
+ });
@@ -58,7 +58,8 @@ class ElectronApplicationDispatcher extends import_dispatcher.Dispatcher {
58
58
  type: message.type(),
59
59
  text: message.text(),
60
60
  args: message.args().map((a) => import_jsHandleDispatcher.JSHandleDispatcher.fromJSHandle(this, a)),
61
- location: message.location()
61
+ location: message.location(),
62
+ timestamp: message.timestamp()
62
63
  });
63
64
  });
64
65
  }
@@ -73,10 +73,10 @@ class FrameDispatcher extends import_dispatcher.Dispatcher {
73
73
  return { element: import_elementHandlerDispatcher.ElementHandleDispatcher.from(this, await progress.race(this._frame.frameElement())) };
74
74
  }
75
75
  async evaluateExpression(params, progress) {
76
- return { value: (0, import_jsHandleDispatcher.serializeResult)(await progress.race(this._frame.evaluateExpression(params.expression, { isFunction: params.isFunction, world: params.isolatedContext ? "utility" : "main" }, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
76
+ return { value: (0, import_jsHandleDispatcher.serializeResult)(await progress.race(this._frame.evaluateExpression(params.expression, { isFunction: params.isFunction }, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
77
77
  }
78
78
  async evaluateExpressionHandle(params, progress) {
79
- return { handle: import_elementHandlerDispatcher.ElementHandleDispatcher.fromJSOrElementHandle(this, await progress.race(this._frame.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction, world: params.isolatedContext ? "utility" : "main" }, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
79
+ return { handle: import_elementHandlerDispatcher.ElementHandleDispatcher.fromJSOrElementHandle(this, await progress.race(this._frame.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
80
80
  }
81
81
  async waitForSelector(params, progress) {
82
82
  return { element: import_elementHandlerDispatcher.ElementHandleDispatcher.fromNullable(this, await this._frame.waitForSelector(progress, params.selector, true, params)) };
@@ -88,7 +88,7 @@ class FrameDispatcher extends import_dispatcher.Dispatcher {
88
88
  return { value: (0, import_jsHandleDispatcher.serializeResult)(await progress.race(this._frame.evalOnSelector(params.selector, !!params.strict, params.expression, params.isFunction, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
89
89
  }
90
90
  async evalOnSelectorAll(params, progress) {
91
- return { value: (0, import_jsHandleDispatcher.serializeResult)(await this._frame.evalOnSelectorAll(params.selector, params.expression, params.isFunction, (0, import_jsHandleDispatcher.parseArgument)(params.arg), null, params.isolatedContext)) };
91
+ return { value: (0, import_jsHandleDispatcher.serializeResult)(await progress.race(this._frame.evalOnSelectorAll(params.selector, params.expression, params.isFunction, (0, import_jsHandleDispatcher.parseArgument)(params.arg)))) };
92
92
  }
93
93
  async querySelector(params, progress) {
94
94
  return { element: import_elementHandlerDispatcher.ElementHandleDispatcher.fromNullable(this, await progress.race(this._frame.querySelector(params.selector, params))) };
@@ -112,6 +112,9 @@ class FrameDispatcher extends import_dispatcher.Dispatcher {
112
112
  async addStyleTag(params, progress) {
113
113
  return { element: import_elementHandlerDispatcher.ElementHandleDispatcher.from(this, await progress.race(this._frame.addStyleTag(params))) };
114
114
  }
115
+ async ariaSnapshot(params, progress) {
116
+ return await this._frame.ariaSnapshot(progress, params);
117
+ }
115
118
  async click(params, progress) {
116
119
  progress.metadata.potentiallyClosesScope = true;
117
120
  return await this._frame.click(progress, params.selector, params);
@@ -217,9 +220,6 @@ class FrameDispatcher extends import_dispatcher.Dispatcher {
217
220
  result.received = (0, import_jsHandleDispatcher.serializeResult)(result.received);
218
221
  return result;
219
222
  }
220
- async ariaSnapshot(params, progress) {
221
- return { snapshot: await this._frame.ariaSnapshot(progress, params.selector) };
222
- }
223
223
  }
224
224
  // Annotate the CommonJS export names for ESM import in node:
225
225
  0 && (module.exports = {
@@ -39,11 +39,11 @@ class JSHandleDispatcher extends import_dispatcher.Dispatcher {
39
39
  return scope.connection.existingDispatcher(handle) || new JSHandleDispatcher(scope, handle);
40
40
  }
41
41
  async evaluateExpression(params, progress) {
42
- const jsHandle = await progress.race(this._object.evaluateExpression(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg), params.isolatedContext));
42
+ const jsHandle = await progress.race(this._object.evaluateExpression(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg)));
43
43
  return { value: serializeResult(jsHandle) };
44
44
  }
45
45
  async evaluateExpressionHandle(params, progress) {
46
- const jsHandle = await progress.race(this._object.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg), params.isolatedContext));
46
+ const jsHandle = await progress.race(this._object.evaluateExpressionHandle(params.expression, { isFunction: params.isFunction }, parseArgument(params.arg)));
47
47
  return { handle: import_elementHandlerDispatcher.ElementHandleDispatcher.fromJSOrElementHandle(this.parentScope(), jsHandle) };
48
48
  }
49
49
  async getProperty(params, progress) {
@@ -31,12 +31,14 @@ __export(localUtilsDispatcher_exports, {
31
31
  LocalUtilsDispatcher: () => LocalUtilsDispatcher
32
32
  });
33
33
  module.exports = __toCommonJS(localUtilsDispatcher_exports);
34
+ var import_net = __toESM(require("net"));
34
35
  var import_dispatcher = require("./dispatcher");
35
36
  var import_instrumentation = require("../../server/instrumentation");
36
37
  var localUtils = __toESM(require("../localUtils"));
37
38
  var import_userAgent = require("../utils/userAgent");
38
39
  var import_deviceDescriptors = require("../deviceDescriptors");
39
40
  var import_jsonPipeDispatcher = require("../dispatchers/jsonPipeDispatcher");
41
+ var import_pipeTransport = require("../pipeTransport");
40
42
  var import_socksInterceptor = require("../socksInterceptor");
41
43
  var import_transport = require("../transport");
42
44
  var import_network = require("../utils/network");
@@ -78,12 +80,17 @@ class LocalUtilsDispatcher extends import_dispatcher.Dispatcher {
78
80
  localUtils.addStackToTracingNoReply(this._stackSessions, params);
79
81
  }
80
82
  async connect(params, progress) {
83
+ if (URL.canParse(params.endpoint))
84
+ return await this._connectOverWebSocket(params, progress);
85
+ return await this._connectOverPipe(params, progress);
86
+ }
87
+ async _connectOverWebSocket(params, progress) {
81
88
  const wsHeaders = {
82
89
  "User-Agent": (0, import_userAgent.getUserAgent)(),
83
90
  "x-playwright-proxy": params.exposeNetwork ?? "",
84
91
  ...params.headers
85
92
  };
86
- const wsEndpoint = await urlToWSEndpoint(progress, params.wsEndpoint);
93
+ const wsEndpoint = await urlToWSEndpoint(progress, params.endpoint);
87
94
  const transport = await import_transport.WebSocketTransport.connect(progress, wsEndpoint, { headers: wsHeaders, followRedirects: true, debugLogHeader: "x-playwright-debug-log" });
88
95
  const socksInterceptor = new import_socksInterceptor.SocksInterceptor(transport, params.exposeNetwork, params.socksProxyRedirectPortForTest);
89
96
  const pipe = new import_jsonPipeDispatcher.JsonPipeDispatcher(this);
@@ -112,6 +119,35 @@ class LocalUtilsDispatcher extends import_dispatcher.Dispatcher {
112
119
  pipe.on("close", () => transport.close());
113
120
  return { pipe, headers: transport.headers };
114
121
  }
122
+ async _connectOverPipe(params, progress) {
123
+ const socket = await new Promise((resolve, reject) => {
124
+ const conn = import_net.default.connect(params.endpoint, () => resolve(conn));
125
+ conn.on("error", reject);
126
+ });
127
+ const transport = new import_pipeTransport.PipeTransport(socket, socket);
128
+ const pipe = new import_jsonPipeDispatcher.JsonPipeDispatcher(this);
129
+ transport.onmessage = (json) => {
130
+ const cb = () => {
131
+ try {
132
+ pipe.dispatch(json);
133
+ } catch (e) {
134
+ transport.close();
135
+ }
136
+ };
137
+ if (params.slowMo)
138
+ setTimeout(cb, params.slowMo);
139
+ else
140
+ cb();
141
+ };
142
+ pipe.on("message", (message) => {
143
+ transport.send(message);
144
+ });
145
+ transport.onclose = (reason) => {
146
+ pipe.wasClosed(reason);
147
+ };
148
+ pipe.on("close", () => socket.end());
149
+ return { pipe, headers: [] };
150
+ }
115
151
  async globToRegex(params, progress) {
116
152
  const regex = (0, import_urlMatch.resolveGlobToRegexPattern)(params.baseURL, params.glob, params.webSocketUrl);
117
153
  return { regex };
@@ -30,7 +30,6 @@ var import_dispatcher = require("./dispatcher");
30
30
  var import_frameDispatcher = require("./frameDispatcher");
31
31
  var import_pageDispatcher = require("./pageDispatcher");
32
32
  var import_tracingDispatcher = require("./tracingDispatcher");
33
- var import_network2 = require("../network");
34
33
  class RequestDispatcher extends import_dispatcher.Dispatcher {
35
34
  static from(scope, request) {
36
35
  const result = scope.connection.existingDispatcher(request);
@@ -54,12 +53,11 @@ class RequestDispatcher extends import_dispatcher.Dispatcher {
54
53
  postData: postData === null ? void 0 : postData,
55
54
  headers: request.headers(),
56
55
  isNavigationRequest: request.isNavigationRequest(),
57
- redirectedFrom: RequestDispatcher.fromNullable(scope, request.redirectedFrom()),
58
- hasResponse: !!request._existingResponse()
56
+ redirectedFrom: RequestDispatcher.fromNullable(scope, request.redirectedFrom())
59
57
  });
60
58
  this._type_Request = true;
61
59
  this._browserContextDispatcher = scope;
62
- this.addObjectListener(import_network2.Request.Events.Response, () => this._dispatchEvent("response", {}));
60
+ ResponseDispatcher.fromNullable(scope, request._existingResponse());
63
61
  }
64
62
  async rawRequestHeaders(params, progress) {
65
63
  return { headers: await progress.race(this._object.rawRequestHeaders()) };
@@ -83,8 +81,8 @@ class ResponseDispatcher extends import_dispatcher.Dispatcher {
83
81
  this._type_Response = true;
84
82
  }
85
83
  static from(scope, response) {
86
- const result = scope.connection.existingDispatcher(response);
87
84
  const requestDispatcher = RequestDispatcher.from(scope, response.request());
85
+ const result = scope.connection.existingDispatcher(response);
88
86
  return result || new ResponseDispatcher(requestDispatcher, response);
89
87
  }
90
88
  static fromNullable(scope, response) {
@@ -102,6 +100,9 @@ class ResponseDispatcher extends import_dispatcher.Dispatcher {
102
100
  async rawResponseHeaders(params, progress) {
103
101
  return { headers: await progress.race(this._object.rawResponseHeaders()) };
104
102
  }
103
+ async httpVersion(params, progress) {
104
+ return { value: await progress.race(this._object.httpVersion()) };
105
+ }
105
106
  async sizes(params, progress) {
106
107
  return { sizes: await progress.race(this._object.sizes()) };
107
108
  }