playwright-codegen-pro-core 1.0.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 (468) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +3552 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/install_webkit_wsl.ps1 +33 -0
  7. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  8. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  9. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  10. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  11. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  12. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  13. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  14. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  15. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  16. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  17. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  18. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  19. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  20. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  21. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  22. package/browsers.json +81 -0
  23. package/bundles/mcp/package-lock.json +1135 -0
  24. package/bundles/mcp/package.json +10 -0
  25. package/bundles/mcp/raw-body.ts +43 -0
  26. package/bundles/utils/package-lock.json +466 -0
  27. package/bundles/utils/package.json +40 -0
  28. package/bundles/zip/package-lock.json +257 -0
  29. package/bundles/zip/package.json +16 -0
  30. package/cli.js +18 -0
  31. package/index.d.ts +17 -0
  32. package/index.js +32 -0
  33. package/index.mjs +28 -0
  34. package/lib/androidServerImpl.js +65 -0
  35. package/lib/browserServerImpl.js +120 -0
  36. package/lib/cli/driver.js +98 -0
  37. package/lib/cli/program.js +599 -0
  38. package/lib/cli/programWithTestStub.js +74 -0
  39. package/lib/client/android.js +361 -0
  40. package/lib/client/api.js +137 -0
  41. package/lib/client/artifact.js +79 -0
  42. package/lib/client/browser.js +169 -0
  43. package/lib/client/browserContext.js +563 -0
  44. package/lib/client/browserType.js +153 -0
  45. package/lib/client/cdpSession.js +55 -0
  46. package/lib/client/channelOwner.js +194 -0
  47. package/lib/client/clientHelper.js +64 -0
  48. package/lib/client/clientInstrumentation.js +55 -0
  49. package/lib/client/clientStackTrace.js +69 -0
  50. package/lib/client/clock.js +68 -0
  51. package/lib/client/connect.js +143 -0
  52. package/lib/client/connection.js +322 -0
  53. package/lib/client/consoleMessage.js +61 -0
  54. package/lib/client/coverage.js +44 -0
  55. package/lib/client/debugger.js +57 -0
  56. package/lib/client/dialog.js +56 -0
  57. package/lib/client/disposable.js +76 -0
  58. package/lib/client/download.js +62 -0
  59. package/lib/client/electron.js +138 -0
  60. package/lib/client/elementHandle.js +281 -0
  61. package/lib/client/errors.js +77 -0
  62. package/lib/client/eventEmitter.js +314 -0
  63. package/lib/client/events.js +103 -0
  64. package/lib/client/fetch.js +367 -0
  65. package/lib/client/fileChooser.js +46 -0
  66. package/lib/client/fileUtils.js +34 -0
  67. package/lib/client/frame.js +404 -0
  68. package/lib/client/harRouter.js +99 -0
  69. package/lib/client/input.js +84 -0
  70. package/lib/client/jsHandle.js +105 -0
  71. package/lib/client/jsonPipe.js +39 -0
  72. package/lib/client/localUtils.js +60 -0
  73. package/lib/client/locator.js +367 -0
  74. package/lib/client/network.js +750 -0
  75. package/lib/client/page.js +729 -0
  76. package/lib/client/platform.js +77 -0
  77. package/lib/client/playwright.js +71 -0
  78. package/lib/client/screencast.js +48 -0
  79. package/lib/client/selectors.js +57 -0
  80. package/lib/client/stream.js +39 -0
  81. package/lib/client/timeoutSettings.js +79 -0
  82. package/lib/client/tracing.js +126 -0
  83. package/lib/client/types.js +28 -0
  84. package/lib/client/video.js +68 -0
  85. package/lib/client/waiter.js +142 -0
  86. package/lib/client/webError.js +39 -0
  87. package/lib/client/worker.js +85 -0
  88. package/lib/client/writableStream.js +39 -0
  89. package/lib/generated/bindingsControllerSource.js +28 -0
  90. package/lib/generated/clockSource.js +28 -0
  91. package/lib/generated/injectedScriptSource.js +28 -0
  92. package/lib/generated/pollingRecorderSource.js +28 -0
  93. package/lib/generated/storageScriptSource.js +28 -0
  94. package/lib/generated/utilityScriptSource.js +28 -0
  95. package/lib/generated/webSocketMockSource.js +336 -0
  96. package/lib/inProcessFactory.js +60 -0
  97. package/lib/inprocess.js +3 -0
  98. package/lib/mcpBundle.js +81 -0
  99. package/lib/mcpBundleImpl/index.js +91 -0
  100. package/lib/outofprocess.js +76 -0
  101. package/lib/protocol/serializers.js +197 -0
  102. package/lib/protocol/validator.js +3035 -0
  103. package/lib/protocol/validatorPrimitives.js +193 -0
  104. package/lib/remote/playwrightConnection.js +131 -0
  105. package/lib/remote/playwrightPipeServer.js +100 -0
  106. package/lib/remote/playwrightServer.js +339 -0
  107. package/lib/remote/playwrightWebSocketServer.js +73 -0
  108. package/lib/remote/serverTransport.js +96 -0
  109. package/lib/server/android/android.js +465 -0
  110. package/lib/server/android/backendAdb.js +177 -0
  111. package/lib/server/artifact.js +127 -0
  112. package/lib/server/bidi/bidiBrowser.js +571 -0
  113. package/lib/server/bidi/bidiChromium.js +162 -0
  114. package/lib/server/bidi/bidiConnection.js +213 -0
  115. package/lib/server/bidi/bidiDeserializer.js +116 -0
  116. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  117. package/lib/server/bidi/bidiFirefox.js +128 -0
  118. package/lib/server/bidi/bidiInput.js +146 -0
  119. package/lib/server/bidi/bidiNetworkManager.js +411 -0
  120. package/lib/server/bidi/bidiOverCdp.js +102 -0
  121. package/lib/server/bidi/bidiPage.js +599 -0
  122. package/lib/server/bidi/bidiPdf.js +106 -0
  123. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  124. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  125. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  126. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  127. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  128. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  129. package/lib/server/bidi/third_party/firefoxPrefs.js +261 -0
  130. package/lib/server/browser.js +223 -0
  131. package/lib/server/browserContext.js +703 -0
  132. package/lib/server/browserType.js +338 -0
  133. package/lib/server/callLog.js +82 -0
  134. package/lib/server/chromium/appIcon.png +0 -0
  135. package/lib/server/chromium/chromium.js +399 -0
  136. package/lib/server/chromium/chromiumSwitches.js +104 -0
  137. package/lib/server/chromium/crBrowser.js +532 -0
  138. package/lib/server/chromium/crConnection.js +197 -0
  139. package/lib/server/chromium/crCoverage.js +235 -0
  140. package/lib/server/chromium/crDevTools.js +111 -0
  141. package/lib/server/chromium/crDragDrop.js +131 -0
  142. package/lib/server/chromium/crExecutionContext.js +146 -0
  143. package/lib/server/chromium/crInput.js +187 -0
  144. package/lib/server/chromium/crNetworkManager.js +711 -0
  145. package/lib/server/chromium/crPage.js +1004 -0
  146. package/lib/server/chromium/crPdf.js +121 -0
  147. package/lib/server/chromium/crProtocolHelper.js +145 -0
  148. package/lib/server/chromium/crServiceWorker.js +137 -0
  149. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  150. package/lib/server/chromium/protocol.d.js +16 -0
  151. package/lib/server/clock.js +149 -0
  152. package/lib/server/codegen/csharp.js +327 -0
  153. package/lib/server/codegen/java.js +274 -0
  154. package/lib/server/codegen/javascript.js +247 -0
  155. package/lib/server/codegen/jsonl.js +52 -0
  156. package/lib/server/codegen/language.js +132 -0
  157. package/lib/server/codegen/languages.js +68 -0
  158. package/lib/server/codegen/python.js +279 -0
  159. package/lib/server/codegen/types.js +16 -0
  160. package/lib/server/console.js +61 -0
  161. package/lib/server/cookieStore.js +206 -0
  162. package/lib/server/debugController.js +197 -0
  163. package/lib/server/debugger.js +117 -0
  164. package/lib/server/deviceDescriptors.js +39 -0
  165. package/lib/server/deviceDescriptorsSource.json +1779 -0
  166. package/lib/server/dialog.js +116 -0
  167. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  168. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  169. package/lib/server/dispatchers/browserContextDispatcher.js +381 -0
  170. package/lib/server/dispatchers/browserDispatcher.js +124 -0
  171. package/lib/server/dispatchers/browserTypeDispatcher.js +71 -0
  172. package/lib/server/dispatchers/cdpSessionDispatcher.js +47 -0
  173. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  174. package/lib/server/dispatchers/debuggerDispatcher.js +80 -0
  175. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  176. package/lib/server/dispatchers/dispatcher.js +364 -0
  177. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  178. package/lib/server/dispatchers/electronDispatcher.js +90 -0
  179. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  180. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  181. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  182. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  183. package/lib/server/dispatchers/localUtilsDispatcher.js +185 -0
  184. package/lib/server/dispatchers/networkDispatchers.js +214 -0
  185. package/lib/server/dispatchers/pageDispatcher.js +430 -0
  186. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  187. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  188. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  189. package/lib/server/dispatchers/webSocketRouteDispatcher.js +164 -0
  190. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  191. package/lib/server/disposable.js +41 -0
  192. package/lib/server/dom.js +833 -0
  193. package/lib/server/download.js +71 -0
  194. package/lib/server/electron/electron.js +272 -0
  195. package/lib/server/electron/loader.js +29 -0
  196. package/lib/server/errors.js +69 -0
  197. package/lib/server/fetch.js +621 -0
  198. package/lib/server/fileChooser.js +43 -0
  199. package/lib/server/fileUploadUtils.js +84 -0
  200. package/lib/server/firefox/ffBrowser.js +415 -0
  201. package/lib/server/firefox/ffConnection.js +142 -0
  202. package/lib/server/firefox/ffExecutionContext.js +150 -0
  203. package/lib/server/firefox/ffInput.js +175 -0
  204. package/lib/server/firefox/ffNetworkManager.js +256 -0
  205. package/lib/server/firefox/ffPage.js +495 -0
  206. package/lib/server/firefox/firefox.js +114 -0
  207. package/lib/server/firefox/protocol.d.js +16 -0
  208. package/lib/server/formData.js +147 -0
  209. package/lib/server/frameSelectors.js +160 -0
  210. package/lib/server/frames.js +1495 -0
  211. package/lib/server/har/harRecorder.js +147 -0
  212. package/lib/server/har/harTracer.js +608 -0
  213. package/lib/server/harBackend.js +157 -0
  214. package/lib/server/helper.js +96 -0
  215. package/lib/server/index.js +58 -0
  216. package/lib/server/input.js +322 -0
  217. package/lib/server/instrumentation.js +72 -0
  218. package/lib/server/javascript.js +291 -0
  219. package/lib/server/launchApp.js +127 -0
  220. package/lib/server/localUtils.js +214 -0
  221. package/lib/server/macEditingCommands.js +143 -0
  222. package/lib/server/network.js +668 -0
  223. package/lib/server/page.js +884 -0
  224. package/lib/server/pipeTransport.js +89 -0
  225. package/lib/server/playwright.js +69 -0
  226. package/lib/server/progress.js +136 -0
  227. package/lib/server/protocolError.js +52 -0
  228. package/lib/server/recorder/chat.js +161 -0
  229. package/lib/server/recorder/networkCapture.js +282 -0
  230. package/lib/server/recorder/recorderApp.js +581 -0
  231. package/lib/server/recorder/recorderRunner.js +138 -0
  232. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  233. package/lib/server/recorder/recorderUtils.js +157 -0
  234. package/lib/server/recorder/sessionExporter.js +40 -0
  235. package/lib/server/recorder/sessionPromptBuilder.js +128 -0
  236. package/lib/server/recorder/sessionRedactor.js +74 -0
  237. package/lib/server/recorder/throttledFile.js +57 -0
  238. package/lib/server/recorder.js +538 -0
  239. package/lib/server/registry/browserFetcher.js +177 -0
  240. package/lib/server/registry/dependencies.js +371 -0
  241. package/lib/server/registry/index.js +1395 -0
  242. package/lib/server/registry/nativeDeps.js +1281 -0
  243. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  244. package/lib/server/screencast.js +238 -0
  245. package/lib/server/screenshotter.js +333 -0
  246. package/lib/server/selectors.js +112 -0
  247. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  248. package/lib/server/socksInterceptor.js +95 -0
  249. package/lib/server/trace/recorder/snapshotter.js +147 -0
  250. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  251. package/lib/server/trace/recorder/tracing.js +615 -0
  252. package/lib/server/trace/viewer/traceViewer.js +244 -0
  253. package/lib/server/transport.js +181 -0
  254. package/lib/server/types.js +28 -0
  255. package/lib/server/usKeyboardLayout.js +152 -0
  256. package/lib/server/utils/ascii.js +44 -0
  257. package/lib/server/utils/comparators.js +139 -0
  258. package/lib/server/utils/crypto.js +216 -0
  259. package/lib/server/utils/debug.js +42 -0
  260. package/lib/server/utils/debugLogger.js +122 -0
  261. package/lib/server/utils/disposable.js +32 -0
  262. package/lib/server/utils/env.js +73 -0
  263. package/lib/server/utils/eventsHelper.js +41 -0
  264. package/lib/server/utils/expectUtils.js +123 -0
  265. package/lib/server/utils/fileUtils.js +191 -0
  266. package/lib/server/utils/happyEyeballs.js +207 -0
  267. package/lib/server/utils/hostPlatform.js +123 -0
  268. package/lib/server/utils/httpServer.js +205 -0
  269. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  270. package/lib/server/utils/image_tools/compare.js +109 -0
  271. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  272. package/lib/server/utils/image_tools/stats.js +102 -0
  273. package/lib/server/utils/linuxUtils.js +71 -0
  274. package/lib/server/utils/network.js +243 -0
  275. package/lib/server/utils/nodePlatform.js +154 -0
  276. package/lib/server/utils/pipeTransport.js +84 -0
  277. package/lib/server/utils/processLauncher.js +243 -0
  278. package/lib/server/utils/profiler.js +65 -0
  279. package/lib/server/utils/socksProxy.js +511 -0
  280. package/lib/server/utils/spawnAsync.js +41 -0
  281. package/lib/server/utils/task.js +51 -0
  282. package/lib/server/utils/userAgent.js +98 -0
  283. package/lib/server/utils/wsServer.js +121 -0
  284. package/lib/server/utils/zipFile.js +74 -0
  285. package/lib/server/utils/zones.js +57 -0
  286. package/lib/server/videoRecorder.js +133 -0
  287. package/lib/server/webkit/protocol.d.js +16 -0
  288. package/lib/server/webkit/webkit.js +108 -0
  289. package/lib/server/webkit/wkBrowser.js +331 -0
  290. package/lib/server/webkit/wkConnection.js +144 -0
  291. package/lib/server/webkit/wkExecutionContext.js +154 -0
  292. package/lib/server/webkit/wkInput.js +181 -0
  293. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  294. package/lib/server/webkit/wkPage.js +1164 -0
  295. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  296. package/lib/server/webkit/wkWorkers.js +106 -0
  297. package/lib/serverRegistry.js +147 -0
  298. package/lib/third_party/pixelmatch.js +255 -0
  299. package/lib/tools/backend/browserBackend.js +79 -0
  300. package/lib/tools/backend/common.js +63 -0
  301. package/lib/tools/backend/config.js +41 -0
  302. package/lib/tools/backend/console.js +66 -0
  303. package/lib/tools/backend/context.js +290 -0
  304. package/lib/tools/backend/cookies.js +152 -0
  305. package/lib/tools/backend/devtools.js +69 -0
  306. package/lib/tools/backend/dialogs.js +59 -0
  307. package/lib/tools/backend/evaluate.js +64 -0
  308. package/lib/tools/backend/files.js +60 -0
  309. package/lib/tools/backend/form.js +64 -0
  310. package/lib/tools/backend/keyboard.js +155 -0
  311. package/lib/tools/backend/logFile.js +95 -0
  312. package/lib/tools/backend/mouse.js +168 -0
  313. package/lib/tools/backend/navigate.js +106 -0
  314. package/lib/tools/backend/network.js +135 -0
  315. package/lib/tools/backend/pdf.js +48 -0
  316. package/lib/tools/backend/recorder.js +74 -0
  317. package/lib/tools/backend/response.js +302 -0
  318. package/lib/tools/backend/route.js +140 -0
  319. package/lib/tools/backend/runCode.js +76 -0
  320. package/lib/tools/backend/screenshot.js +88 -0
  321. package/lib/tools/backend/sessionLog.js +74 -0
  322. package/lib/tools/backend/snapshot.js +208 -0
  323. package/lib/tools/backend/storage.js +67 -0
  324. package/lib/tools/backend/tab.js +445 -0
  325. package/lib/tools/backend/tabs.js +67 -0
  326. package/lib/tools/backend/tool.js +47 -0
  327. package/lib/tools/backend/tools.js +104 -0
  328. package/lib/tools/backend/tracing.js +75 -0
  329. package/lib/tools/backend/utils.js +83 -0
  330. package/lib/tools/backend/verify.js +151 -0
  331. package/lib/tools/backend/video.js +89 -0
  332. package/lib/tools/backend/wait.js +63 -0
  333. package/lib/tools/backend/webstorage.js +223 -0
  334. package/lib/tools/cli-client/cli.js +6 -0
  335. package/lib/tools/cli-client/help.json +101 -0
  336. package/lib/tools/cli-client/minimist.js +128 -0
  337. package/lib/tools/cli-client/program.js +382 -0
  338. package/lib/tools/cli-client/registry.js +176 -0
  339. package/lib/tools/cli-client/session.js +289 -0
  340. package/lib/tools/cli-client/skill/SKILL.md +326 -0
  341. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  342. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  343. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  344. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  345. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  346. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  347. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  348. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  349. package/lib/tools/cli-client/skill/references/video-recording.md +46 -0
  350. package/lib/tools/cli-daemon/command.js +73 -0
  351. package/lib/tools/cli-daemon/commands.js +933 -0
  352. package/lib/tools/cli-daemon/daemon.js +178 -0
  353. package/lib/tools/cli-daemon/helpGenerator.js +173 -0
  354. package/lib/tools/cli-daemon/program.js +118 -0
  355. package/lib/tools/dashboard/appIcon.png +0 -0
  356. package/lib/tools/dashboard/dashboardApp.js +286 -0
  357. package/lib/tools/dashboard/dashboardController.js +296 -0
  358. package/lib/tools/exports.js +60 -0
  359. package/lib/tools/mcp/browserFactory.js +233 -0
  360. package/lib/tools/mcp/cdpRelay.js +353 -0
  361. package/lib/tools/mcp/cli-stub.js +7 -0
  362. package/lib/tools/mcp/config.d.js +16 -0
  363. package/lib/tools/mcp/config.js +401 -0
  364. package/lib/tools/mcp/configIni.js +189 -0
  365. package/lib/tools/mcp/extensionContextFactory.js +59 -0
  366. package/lib/tools/mcp/index.js +62 -0
  367. package/lib/tools/mcp/log.js +35 -0
  368. package/lib/tools/mcp/program.js +107 -0
  369. package/lib/tools/mcp/protocol.js +28 -0
  370. package/lib/tools/mcp/watchdog.js +44 -0
  371. package/lib/tools/trace/SKILL.md +163 -0
  372. package/lib/tools/trace/installSkill.js +48 -0
  373. package/lib/tools/trace/traceActions.js +142 -0
  374. package/lib/tools/trace/traceAttachments.js +69 -0
  375. package/lib/tools/trace/traceCli.js +80 -0
  376. package/lib/tools/trace/traceConsole.js +97 -0
  377. package/lib/tools/trace/traceErrors.js +55 -0
  378. package/lib/tools/trace/traceOpen.js +69 -0
  379. package/lib/tools/trace/traceParser.js +96 -0
  380. package/lib/tools/trace/traceRequests.js +158 -0
  381. package/lib/tools/trace/traceScreenshot.js +68 -0
  382. package/lib/tools/trace/traceSnapshot.js +149 -0
  383. package/lib/tools/trace/traceUtils.js +135 -0
  384. package/lib/tools/utils/connect.js +32 -0
  385. package/lib/tools/utils/mcp/http.js +152 -0
  386. package/lib/tools/utils/mcp/server.js +230 -0
  387. package/lib/tools/utils/mcp/tool.js +47 -0
  388. package/lib/tools/utils/socketConnection.js +108 -0
  389. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  390. package/lib/utils/isomorphic/assert.js +31 -0
  391. package/lib/utils/isomorphic/colors.js +72 -0
  392. package/lib/utils/isomorphic/cssParser.js +245 -0
  393. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  394. package/lib/utils/isomorphic/formatUtils.js +64 -0
  395. package/lib/utils/isomorphic/headers.js +53 -0
  396. package/lib/utils/isomorphic/imageUtils.js +141 -0
  397. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  398. package/lib/utils/isomorphic/locatorParser.js +176 -0
  399. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  400. package/lib/utils/isomorphic/lruCache.js +51 -0
  401. package/lib/utils/isomorphic/manualPromise.js +114 -0
  402. package/lib/utils/isomorphic/mimeType.js +464 -0
  403. package/lib/utils/isomorphic/multimap.js +80 -0
  404. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  405. package/lib/utils/isomorphic/protocolMetainfo.js +347 -0
  406. package/lib/utils/isomorphic/rtti.js +43 -0
  407. package/lib/utils/isomorphic/selectorParser.js +386 -0
  408. package/lib/utils/isomorphic/semaphore.js +54 -0
  409. package/lib/utils/isomorphic/stackTrace.js +158 -0
  410. package/lib/utils/isomorphic/stringUtils.js +204 -0
  411. package/lib/utils/isomorphic/time.js +49 -0
  412. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  413. package/lib/utils/isomorphic/trace/entries.js +16 -0
  414. package/lib/utils/isomorphic/trace/snapshotRenderer.js +492 -0
  415. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  416. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  417. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  418. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  419. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  420. package/lib/utils/isomorphic/trace/traceUtils.js +58 -0
  421. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  422. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  423. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  424. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  425. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  426. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  427. package/lib/utils/isomorphic/types.js +16 -0
  428. package/lib/utils/isomorphic/urlMatch.js +243 -0
  429. package/lib/utils/isomorphic/utilityScriptSerializers.js +262 -0
  430. package/lib/utils/isomorphic/yaml.js +84 -0
  431. package/lib/utils.js +113 -0
  432. package/lib/utilsBundle.js +91 -0
  433. package/lib/utilsBundleImpl/index.js +218 -0
  434. package/lib/utilsBundleImpl/xdg-open +1066 -0
  435. package/lib/vite/dashboard/assets/index-Bn2lDGZX.js +50 -0
  436. package/lib/vite/dashboard/assets/index-DDWrEWMc.css +1 -0
  437. package/lib/vite/dashboard/index.html +28 -0
  438. package/lib/vite/htmlReport/index.html +89 -0
  439. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  440. package/lib/vite/recorder/assets/codeMirrorModule-RoSmqW0t.js +32 -0
  441. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  442. package/lib/vite/recorder/assets/index-CLrDthbi.js +193 -0
  443. package/lib/vite/recorder/assets/index-OFPIkgDs.css +1 -0
  444. package/lib/vite/recorder/index.html +29 -0
  445. package/lib/vite/recorder/playwright-logo.svg +9 -0
  446. package/lib/vite/traceViewer/assets/codeMirrorModule-Cigrr2OM.js +32 -0
  447. package/lib/vite/traceViewer/assets/defaultSettingsView-ConrJv9G.js +262 -0
  448. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  449. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  450. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  451. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  452. package/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
  453. package/lib/vite/traceViewer/index.EVGp-u_4.js +2 -0
  454. package/lib/vite/traceViewer/index.html +43 -0
  455. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  456. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  457. package/lib/vite/traceViewer/snapshot.html +21 -0
  458. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  459. package/lib/vite/traceViewer/uiMode.Bewj7-uD.js +6 -0
  460. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  461. package/lib/vite/traceViewer/uiMode.html +17 -0
  462. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  463. package/lib/zipBundle.js +34 -0
  464. package/lib/zipBundleImpl.js +5 -0
  465. package/package.json +46 -0
  466. package/types/protocol.d.ts +24365 -0
  467. package/types/structs.d.ts +45 -0
  468. package/types/types.d.ts +23498 -0
@@ -0,0 +1,68 @@
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 traceScreenshot_exports = {};
20
+ __export(traceScreenshot_exports, {
21
+ traceScreenshot: () => traceScreenshot
22
+ });
23
+ module.exports = __toCommonJS(traceScreenshot_exports);
24
+ var import_traceUtils = require("./traceUtils");
25
+ async function traceScreenshot(actionId, options) {
26
+ const trace = await (0, import_traceUtils.loadTrace)();
27
+ const action = trace.resolveActionId(actionId);
28
+ if (!action) {
29
+ console.error(`Action '${actionId}' not found.`);
30
+ process.exitCode = 1;
31
+ return;
32
+ }
33
+ const pageId = action.pageId;
34
+ if (!pageId) {
35
+ console.error(`Action '${actionId}' has no associated page.`);
36
+ process.exitCode = 1;
37
+ return;
38
+ }
39
+ const callId = action.callId;
40
+ const storage = trace.loader.storage();
41
+ const snapshotNames = ["input", "before", "after"];
42
+ let sha1;
43
+ for (const name of snapshotNames) {
44
+ const renderer = storage.snapshotByName(pageId, `${name}@${callId}`);
45
+ sha1 = renderer?.closestScreenshot();
46
+ if (sha1)
47
+ break;
48
+ }
49
+ if (!sha1) {
50
+ console.error(`No screenshot found for action '${actionId}'.`);
51
+ process.exitCode = 1;
52
+ return;
53
+ }
54
+ const blob = await trace.loader.resourceForSha1(sha1);
55
+ if (!blob) {
56
+ console.error(`Screenshot resource not found.`);
57
+ process.exitCode = 1;
58
+ return;
59
+ }
60
+ const defaultName = `screenshot-${actionId}.png`;
61
+ const buffer = Buffer.from(await blob.arrayBuffer());
62
+ const outFile = await (0, import_traceUtils.saveOutputFile)(defaultName, buffer, options.output);
63
+ console.log(` Screenshot saved to ${outFile}`);
64
+ }
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ traceScreenshot
68
+ });
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var traceSnapshot_exports = {};
30
+ __export(traceSnapshot_exports, {
31
+ traceSnapshot: () => traceSnapshot
32
+ });
33
+ module.exports = __toCommonJS(traceSnapshot_exports);
34
+ var import_browserBackend = require("../backend/browserBackend");
35
+ var import_tools = require("../backend/tools");
36
+ var playwright = __toESM(require("../../.."));
37
+ var import_utils = require("../../utils");
38
+ var import_command = require("../cli-daemon/command");
39
+ var import_minimist = require("../cli-client/minimist");
40
+ var import_commands = require("../cli-daemon/commands");
41
+ var import_traceUtils = require("./traceUtils");
42
+ async function traceSnapshot(actionId, options) {
43
+ const trace = await (0, import_traceUtils.loadTrace)();
44
+ const action = trace.resolveActionId(actionId);
45
+ if (!action) {
46
+ console.error(`Action '${actionId}' not found.`);
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ const pageId = action.pageId;
51
+ if (!pageId) {
52
+ console.error(`Action '${actionId}' has no associated page.`);
53
+ process.exitCode = 1;
54
+ return;
55
+ }
56
+ const callId = action.callId;
57
+ const storage = trace.loader.storage();
58
+ let snapshotName;
59
+ let renderer;
60
+ if (options.name) {
61
+ snapshotName = options.name;
62
+ renderer = storage.snapshotByName(pageId, `${snapshotName}@${callId}`);
63
+ } else {
64
+ for (const candidate of ["input", "before", "after"]) {
65
+ renderer = storage.snapshotByName(pageId, `${candidate}@${callId}`);
66
+ if (renderer) {
67
+ snapshotName = candidate;
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ if (!renderer || !snapshotName) {
73
+ console.error(`No snapshot found for action '${actionId}'.`);
74
+ process.exitCode = 1;
75
+ return;
76
+ }
77
+ const snapshotKey = `${snapshotName}@${callId}`;
78
+ const server = await serveTraceSnapshot(storage, trace.loader, pageId, snapshotKey);
79
+ if (options.serve) {
80
+ console.log(`Serving snapshot at ${server.url}`);
81
+ await new Promise(() => {
82
+ });
83
+ return;
84
+ }
85
+ await runCommandOnSnapshot(server, options.browserArgs || []);
86
+ }
87
+ async function serveTraceSnapshot(storage, loader, pageId, snapshotKey) {
88
+ const { SnapshotServer } = require("../../utils/isomorphic/trace/snapshotServer");
89
+ const { HttpServer } = require("../../server/utils/httpServer");
90
+ const snapshotServer = new SnapshotServer(storage, (sha1) => loader.resourceForSha1(sha1));
91
+ const httpServer = new HttpServer();
92
+ httpServer.routePrefix("/snapshot", (request, response) => {
93
+ const url = new URL("http://localhost" + request.url);
94
+ const searchParams = url.searchParams;
95
+ searchParams.set("name", snapshotKey);
96
+ const snapshotResponse = snapshotServer.serveSnapshot(pageId, searchParams, "/snapshot");
97
+ response.statusCode = snapshotResponse.status;
98
+ snapshotResponse.headers.forEach((value, key) => response.setHeader(key, value));
99
+ snapshotResponse.text().then((text) => response.end(text));
100
+ return true;
101
+ });
102
+ httpServer.routePrefix("/", (_request, response) => {
103
+ response.statusCode = 302;
104
+ response.setHeader("Location", "/snapshot");
105
+ response.end();
106
+ return true;
107
+ });
108
+ await httpServer.start({ preferredPort: 0 });
109
+ return { url: httpServer.urlPrefix("human-readable"), stop: () => httpServer.stop() };
110
+ }
111
+ async function runCommandOnSnapshot(server, browserArgs) {
112
+ const browser = await playwright.chromium.launch({ headless: true });
113
+ const context = await browser.newContext();
114
+ const page = await context.newPage();
115
+ await page.goto(server.url);
116
+ const backend = new import_browserBackend.BrowserBackend({
117
+ snapshot: { mode: "full" },
118
+ outputMode: "file",
119
+ skillMode: true
120
+ }, context, import_tools.browserTools);
121
+ await backend.initialize({ cwd: process.cwd() });
122
+ try {
123
+ if (!browserArgs.length)
124
+ browserArgs = ["snapshot"];
125
+ const args = (0, import_minimist.minimist)(browserArgs, { string: ["_"] });
126
+ const command = import_commands.commands[args._[0]];
127
+ if (!command)
128
+ throw new Error(`Unknown command: ${args._[0]}`);
129
+ const { toolName, toolParams } = (0, import_command.parseCommand)(command, args);
130
+ const result = await backend.callTool(toolName, toolParams);
131
+ const text = result.content[0]?.type === "text" ? result.content[0].text : void 0;
132
+ if (text)
133
+ console.log(text);
134
+ if (result.isError) {
135
+ console.error("Command failed.");
136
+ process.exitCode = 1;
137
+ }
138
+ } catch (e) {
139
+ console.error(e.message);
140
+ process.exitCode = 1;
141
+ } finally {
142
+ await server.stop().catch((e) => console.error(e));
143
+ await (0, import_utils.gracefullyCloseAll)();
144
+ }
145
+ }
146
+ // Annotate the CommonJS export names for ESM import in node:
147
+ 0 && (module.exports = {
148
+ traceSnapshot
149
+ });
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var traceUtils_exports = {};
30
+ __export(traceUtils_exports, {
31
+ LoadedTrace: () => LoadedTrace,
32
+ actionTitle: () => actionTitle,
33
+ formatTimestamp: () => formatTimestamp,
34
+ loadTrace: () => loadTrace,
35
+ openTrace: () => openTrace,
36
+ saveOutputFile: () => saveOutputFile
37
+ });
38
+ module.exports = __toCommonJS(traceUtils_exports);
39
+ var import_fs = __toESM(require("fs"));
40
+ var import_path = __toESM(require("path"));
41
+ var import_traceModel = require("../../utils/isomorphic/trace/traceModel");
42
+ var import_traceLoader = require("../../utils/isomorphic/trace/traceLoader");
43
+ var import_protocolFormatter = require("../../utils/isomorphic/protocolFormatter");
44
+ var import_traceParser = require("./traceParser");
45
+ const traceDir = import_path.default.join(".playwright-cli", "trace");
46
+ const cliOutputDir = ".playwright-cli";
47
+ class LoadedTrace {
48
+ constructor(model, loader, ordinals) {
49
+ this.model = model;
50
+ this.loader = loader;
51
+ this.ordinalToCallId = ordinals.ordinalToCallId;
52
+ this.callIdToOrdinal = ordinals.callIdToOrdinal;
53
+ }
54
+ resolveActionId(actionId) {
55
+ const ordinal = parseInt(actionId, 10);
56
+ if (!isNaN(ordinal)) {
57
+ const callId = this.ordinalToCallId.get(ordinal);
58
+ if (callId)
59
+ return this.model.actions.find((a) => a.callId === callId);
60
+ }
61
+ return this.model.actions.find((a) => a.callId === actionId);
62
+ }
63
+ }
64
+ function ensureTraceOpen() {
65
+ if (!import_fs.default.existsSync(traceDir))
66
+ throw new Error(`No trace opened. Run 'npx playwright trace open <file>' first.`);
67
+ return traceDir;
68
+ }
69
+ async function openTrace(traceFile) {
70
+ const filePath = import_path.default.resolve(traceFile);
71
+ if (!import_fs.default.existsSync(filePath))
72
+ throw new Error(`Trace file not found: ${filePath}`);
73
+ if (import_fs.default.existsSync(traceDir))
74
+ await import_fs.default.promises.rm(traceDir, { recursive: true });
75
+ await import_fs.default.promises.mkdir(traceDir, { recursive: true });
76
+ await (0, import_traceParser.extractTrace)(filePath, traceDir);
77
+ }
78
+ async function loadTrace() {
79
+ const dir = ensureTraceOpen();
80
+ const backend = new import_traceParser.DirTraceLoaderBackend(dir);
81
+ const loader = new import_traceLoader.TraceLoader();
82
+ await loader.load(backend, () => void 0);
83
+ const model = new import_traceModel.TraceModel(dir, loader.contextEntries);
84
+ return new LoadedTrace(model, loader, buildOrdinalMap(model));
85
+ }
86
+ function formatTimestamp(ms, base) {
87
+ const relative = ms - base;
88
+ if (relative < 0)
89
+ return "0:00.000";
90
+ const totalMs = Math.floor(relative);
91
+ const minutes = Math.floor(totalMs / 6e4);
92
+ const seconds = Math.floor(totalMs % 6e4 / 1e3);
93
+ const millis = totalMs % 1e3;
94
+ return `${minutes}:${seconds.toString().padStart(2, "0")}.${millis.toString().padStart(3, "0")}`;
95
+ }
96
+ function actionTitle(action) {
97
+ return (0, import_protocolFormatter.renderTitleForCall)({ ...action, type: action.class }) || `${action.class}.${action.method}`;
98
+ }
99
+ async function saveOutputFile(fileName, content, explicitOutput) {
100
+ let outFile;
101
+ if (explicitOutput) {
102
+ outFile = explicitOutput;
103
+ } else {
104
+ await import_fs.default.promises.mkdir(cliOutputDir, { recursive: true });
105
+ outFile = import_path.default.join(cliOutputDir, fileName);
106
+ }
107
+ await import_fs.default.promises.writeFile(outFile, content);
108
+ return outFile;
109
+ }
110
+ function buildOrdinalMap(model) {
111
+ const actions = model.actions.filter((a) => a.group !== "configuration");
112
+ const { rootItem } = (0, import_traceModel.buildActionTree)(actions);
113
+ const ordinalToCallId = /* @__PURE__ */ new Map();
114
+ const callIdToOrdinal = /* @__PURE__ */ new Map();
115
+ let ordinal = 1;
116
+ const visit = (item) => {
117
+ ordinalToCallId.set(ordinal, item.action.callId);
118
+ callIdToOrdinal.set(item.action.callId, ordinal);
119
+ ordinal++;
120
+ for (const child of item.children)
121
+ visit(child);
122
+ };
123
+ for (const child of rootItem.children)
124
+ visit(child);
125
+ return { ordinalToCallId, callIdToOrdinal };
126
+ }
127
+ // Annotate the CommonJS export names for ESM import in node:
128
+ 0 && (module.exports = {
129
+ LoadedTrace,
130
+ actionTitle,
131
+ formatTimestamp,
132
+ loadTrace,
133
+ openTrace,
134
+ saveOutputFile
135
+ });
@@ -0,0 +1,32 @@
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 connect_exports = {};
20
+ __export(connect_exports, {
21
+ connectToBrowserAcrossVersions: () => connectToBrowserAcrossVersions
22
+ });
23
+ module.exports = __toCommonJS(connect_exports);
24
+ async function connectToBrowserAcrossVersions(descriptor) {
25
+ const pw = require(descriptor.playwrightLib);
26
+ const browserType = pw[descriptor.browser.browserName];
27
+ return await browserType.connect(descriptor.pipeName);
28
+ }
29
+ // Annotate the CommonJS export names for ESM import in node:
30
+ 0 && (module.exports = {
31
+ connectToBrowserAcrossVersions
32
+ });
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var http_exports = {};
30
+ __export(http_exports, {
31
+ addressToString: () => addressToString,
32
+ startMcpHttpServer: () => startMcpHttpServer
33
+ });
34
+ module.exports = __toCommonJS(http_exports);
35
+ var import_assert = __toESM(require("assert"));
36
+ var import_crypto = __toESM(require("crypto"));
37
+ var import_utilsBundle = require("../../../utilsBundle");
38
+ var mcpBundle = __toESM(require("../../../mcpBundle"));
39
+ var import_network = require("../../../server/utils/network");
40
+ var mcpServer = __toESM(require("./server"));
41
+ const testDebug = (0, import_utilsBundle.debug)("pw:mcp:test");
42
+ async function startMcpHttpServer(config, serverBackendFactory, allowedHosts) {
43
+ const httpServer = (0, import_network.createHttpServer)();
44
+ await (0, import_network.startHttpServer)(httpServer, config);
45
+ return await installHttpTransport(httpServer, serverBackendFactory, allowedHosts);
46
+ }
47
+ function addressToString(address, options) {
48
+ (0, import_assert.default)(address, "Could not bind server socket");
49
+ if (typeof address === "string")
50
+ throw new Error("Unexpected address type: " + address);
51
+ let host = address.family === "IPv4" ? address.address : `[${address.address}]`;
52
+ if (options.normalizeLoopback && (host === "0.0.0.0" || host === "[::]" || host === "[::1]" || host === "127.0.0.1"))
53
+ host = "localhost";
54
+ return `${options.protocol}://${host}:${address.port}`;
55
+ }
56
+ async function installHttpTransport(httpServer, serverBackendFactory, allowedHosts) {
57
+ const url = addressToString(httpServer.address(), { protocol: "http", normalizeLoopback: true });
58
+ const host = new URL(url).host;
59
+ allowedHosts = (allowedHosts || [host]).map((h) => h.toLowerCase());
60
+ const allowAnyHost = allowedHosts.includes("*");
61
+ const sseSessions = /* @__PURE__ */ new Map();
62
+ const streamableSessions = /* @__PURE__ */ new Map();
63
+ httpServer.on("request", async (req, res) => {
64
+ if (!allowAnyHost) {
65
+ const host2 = req.headers.host?.toLowerCase();
66
+ if (!host2) {
67
+ res.statusCode = 400;
68
+ return res.end("Missing host");
69
+ }
70
+ if (!allowedHosts.includes(host2)) {
71
+ res.statusCode = 403;
72
+ return res.end("Access is only allowed at " + allowedHosts.join(", "));
73
+ }
74
+ }
75
+ const url2 = new URL(`http://localhost${req.url}`);
76
+ if (url2.pathname === "/killkillkill" && req.method === "GET") {
77
+ res.statusCode = 200;
78
+ res.end("Killing process");
79
+ process.emit("SIGINT");
80
+ return;
81
+ }
82
+ if (url2.pathname.startsWith("/sse"))
83
+ await handleSSE(serverBackendFactory, req, res, url2, sseSessions);
84
+ else
85
+ await handleStreamable(serverBackendFactory, req, res, streamableSessions);
86
+ });
87
+ return url;
88
+ }
89
+ async function handleSSE(serverBackendFactory, req, res, url, sessions) {
90
+ if (req.method === "POST") {
91
+ const sessionId = url.searchParams.get("sessionId");
92
+ if (!sessionId) {
93
+ res.statusCode = 400;
94
+ return res.end("Missing sessionId");
95
+ }
96
+ const transport = sessions.get(sessionId);
97
+ if (!transport) {
98
+ res.statusCode = 404;
99
+ return res.end("Session not found");
100
+ }
101
+ return await transport.handlePostMessage(req, res);
102
+ } else if (req.method === "GET") {
103
+ const transport = new mcpBundle.SSEServerTransport("/sse", res);
104
+ sessions.set(transport.sessionId, transport);
105
+ testDebug(`create SSE session`);
106
+ await mcpServer.connect(serverBackendFactory, transport, false);
107
+ res.on("close", () => {
108
+ testDebug(`delete SSE session`);
109
+ sessions.delete(transport.sessionId);
110
+ });
111
+ return;
112
+ }
113
+ res.statusCode = 405;
114
+ res.end("Method not allowed");
115
+ }
116
+ async function handleStreamable(serverBackendFactory, req, res, sessions) {
117
+ const sessionId = req.headers["mcp-session-id"];
118
+ if (sessionId) {
119
+ const transport = sessions.get(sessionId);
120
+ if (!transport) {
121
+ res.statusCode = 404;
122
+ res.end("Session not found");
123
+ return;
124
+ }
125
+ return await transport.handleRequest(req, res);
126
+ }
127
+ if (req.method === "POST") {
128
+ const transport = new mcpBundle.StreamableHTTPServerTransport({
129
+ sessionIdGenerator: () => import_crypto.default.randomUUID(),
130
+ onsessioninitialized: async (sessionId2) => {
131
+ testDebug(`create http session`);
132
+ await mcpServer.connect(serverBackendFactory, transport, true);
133
+ sessions.set(sessionId2, transport);
134
+ }
135
+ });
136
+ transport.onclose = () => {
137
+ if (!transport.sessionId)
138
+ return;
139
+ sessions.delete(transport.sessionId);
140
+ testDebug(`delete http session`);
141
+ };
142
+ await transport.handleRequest(req, res);
143
+ return;
144
+ }
145
+ res.statusCode = 400;
146
+ res.end("Invalid request");
147
+ }
148
+ // Annotate the CommonJS export names for ESM import in node:
149
+ 0 && (module.exports = {
150
+ addressToString,
151
+ startMcpHttpServer
152
+ });