@checkly/playwright-core 1.42.17 → 1.47.20-alpha

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 (234) hide show
  1. package/ThirdPartyNotices.txt +144 -109
  2. package/browsers.json +15 -25
  3. package/lib/androidServerImpl.js +1 -1
  4. package/lib/browserServerImpl.js +1 -1
  5. package/lib/cli/driver.js +1 -3
  6. package/lib/cli/program.js +5 -10
  7. package/lib/client/android.js +1 -1
  8. package/lib/client/api.js +7 -0
  9. package/lib/client/browserContext.js +37 -5
  10. package/lib/client/browserType.js +19 -11
  11. package/lib/client/channelOwner.js +19 -16
  12. package/lib/client/clientInstrumentation.js +17 -7
  13. package/lib/client/clock.js +68 -0
  14. package/lib/client/connection.js +9 -6
  15. package/lib/client/electron.js +7 -5
  16. package/lib/client/elementHandle.js +44 -14
  17. package/lib/client/eventEmitter.js +314 -0
  18. package/lib/client/fetch.js +81 -28
  19. package/lib/client/frame.js +2 -4
  20. package/lib/client/jsHandle.js +7 -1
  21. package/lib/client/locator.js +9 -0
  22. package/lib/client/network.js +12 -9
  23. package/lib/client/page.js +45 -23
  24. package/lib/client/playwright.js +3 -0
  25. package/lib/client/tracing.js +7 -4
  26. package/lib/common/socksProxy.js +2 -2
  27. package/lib/generated/clockSource.js +7 -0
  28. package/lib/generated/injectedScriptSource.js +1 -1
  29. package/lib/generated/recorderSource.js +1 -1
  30. package/lib/generated/utilityScriptSource.js +1 -1
  31. package/lib/protocol/serializers.js +12 -11
  32. package/lib/protocol/validator.js +137 -55
  33. package/lib/server/bidi/bidiBrowser.js +296 -0
  34. package/lib/server/bidi/bidiConnection.js +206 -0
  35. package/lib/server/bidi/bidiExecutionContext.js +162 -0
  36. package/lib/server/bidi/bidiFirefox.js +110 -0
  37. package/lib/server/bidi/bidiInput.js +174 -0
  38. package/lib/server/bidi/bidiNetworkManager.js +304 -0
  39. package/lib/server/bidi/bidiPage.js +456 -0
  40. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  41. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  42. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  43. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  44. package/lib/server/browser.js +9 -1
  45. package/lib/server/browserContext.js +97 -22
  46. package/lib/server/browserType.js +27 -20
  47. package/lib/server/chromium/chromium.js +30 -15
  48. package/lib/server/chromium/chromiumSwitches.js +6 -3
  49. package/lib/server/chromium/crBrowser.js +11 -17
  50. package/lib/server/chromium/crConnection.js +2 -2
  51. package/lib/server/chromium/crDragDrop.js +28 -29
  52. package/lib/server/chromium/crNetworkManager.js +130 -84
  53. package/lib/server/chromium/crPage.js +34 -79
  54. package/lib/server/chromium/crProtocolHelper.js +3 -1
  55. package/lib/server/chromium/crServiceWorker.js +20 -23
  56. package/lib/server/chromium/videoRecorder.js +1 -1
  57. package/lib/server/clock.js +125 -0
  58. package/lib/server/codegen/csharp.js +299 -0
  59. package/lib/server/codegen/java.js +235 -0
  60. package/lib/server/codegen/javascript.js +223 -0
  61. package/lib/server/codegen/jsonl.js +47 -0
  62. package/lib/server/codegen/language.js +76 -0
  63. package/lib/server/codegen/languages.js +30 -0
  64. package/lib/server/codegen/python.js +265 -0
  65. package/lib/server/codegen/types.js +5 -0
  66. package/lib/server/debugController.js +3 -5
  67. package/lib/server/deviceDescriptors.js +9 -4
  68. package/lib/server/deviceDescriptorsSource.json +239 -119
  69. package/lib/server/dispatchers/androidDispatcher.js +1 -1
  70. package/lib/server/dispatchers/browserContextDispatcher.js +51 -7
  71. package/lib/server/dispatchers/dispatcher.js +36 -40
  72. package/lib/server/dispatchers/frameDispatcher.js +1 -2
  73. package/lib/server/dispatchers/jsHandleDispatcher.js +1 -1
  74. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -6
  75. package/lib/server/dispatchers/localUtilsDispatcher.js +19 -5
  76. package/lib/server/dispatchers/networkDispatchers.js +2 -2
  77. package/lib/server/dispatchers/pageDispatcher.js +5 -2
  78. package/lib/server/dispatchers/playwrightDispatcher.js +1 -0
  79. package/lib/server/dispatchers/writableStreamDispatcher.js +8 -5
  80. package/lib/server/dom.js +90 -53
  81. package/lib/server/electron/electron.js +21 -4
  82. package/lib/server/fetch.js +74 -25
  83. package/lib/server/fileUploadUtils.js +7 -3
  84. package/lib/server/firefox/ffBrowser.js +36 -25
  85. package/lib/server/firefox/ffConnection.js +2 -2
  86. package/lib/server/firefox/ffNetworkManager.js +6 -4
  87. package/lib/server/firefox/ffPage.js +22 -24
  88. package/lib/server/firefox/firefox.js +25 -6
  89. package/lib/server/frameSelectors.js +2 -2
  90. package/lib/server/frames.js +205 -159
  91. package/lib/server/har/harTracer.js +4 -12
  92. package/lib/server/helper.js +3 -3
  93. package/lib/server/index.js +18 -0
  94. package/lib/server/input.js +18 -8
  95. package/lib/server/instrumentation.js +0 -4
  96. package/lib/server/isomorphic/utilityScriptSerializers.js +19 -5
  97. package/lib/server/javascript.js +3 -2
  98. package/lib/server/launchApp.js +3 -2
  99. package/lib/server/network.js +14 -4
  100. package/lib/server/page.js +75 -46
  101. package/lib/server/playwright.js +5 -2
  102. package/lib/server/recorder/codeGenerator.js +2 -1
  103. package/lib/server/recorder/contextRecorder.js +316 -0
  104. package/lib/server/recorder/csharp.js +2 -1
  105. package/lib/server/recorder/java.js +2 -1
  106. package/lib/server/recorder/javascript.js +2 -1
  107. package/lib/server/recorder/jsonl.js +2 -1
  108. package/lib/server/recorder/language.js +2 -1
  109. package/lib/server/recorder/python.js +2 -1
  110. package/lib/server/recorder/recorderApp.js +14 -5
  111. package/lib/server/recorder/recorderCollection.js +127 -0
  112. package/lib/server/recorder/recorderRunner.js +177 -0
  113. package/lib/server/recorder/recorderUtils.js +23 -0
  114. package/lib/server/recorder/throttledFile.js +46 -0
  115. package/lib/server/recorder/utils.js +2 -1
  116. package/lib/server/recorder.js +42 -418
  117. package/lib/server/registry/index.js +99 -100
  118. package/lib/server/registry/nativeDeps.js +107 -0
  119. package/lib/server/screenshotter.js +6 -12
  120. package/lib/server/socksClientCertificatesInterceptor.js +328 -0
  121. package/lib/server/trace/recorder/snapshotter.js +4 -1
  122. package/lib/server/trace/recorder/tracing.js +27 -96
  123. package/lib/server/trace/viewer/traceViewer.js +54 -67
  124. package/lib/server/transport.js +1 -1
  125. package/lib/server/webkit/webkit.js +5 -5
  126. package/lib/server/webkit/wkBrowser.js +14 -14
  127. package/lib/server/webkit/wkConnection.js +3 -3
  128. package/lib/server/webkit/wkInterceptableRequest.js +8 -4
  129. package/lib/server/webkit/wkPage.js +52 -34
  130. package/lib/server/webkit/wkProvisionalPage.js +36 -1
  131. package/lib/utils/crypto.js +141 -0
  132. package/lib/utils/debugLogger.js +2 -0
  133. package/lib/utils/env.js +4 -2
  134. package/lib/utils/expectUtils.js +33 -0
  135. package/lib/utils/fileUtils.js +140 -1
  136. package/lib/utils/glob.js +2 -1
  137. package/lib/utils/happy-eyeballs.js +29 -2
  138. package/lib/utils/hostPlatform.js +13 -4
  139. package/lib/utils/httpServer.js +54 -13
  140. package/lib/utils/index.js +53 -31
  141. package/lib/utils/isomorphic/cssTokenizer.js +1 -1
  142. package/lib/utils/isomorphic/locatorParser.js +1 -1
  143. package/lib/utils/isomorphic/mimeType.js +29 -0
  144. package/lib/utils/isomorphic/stringUtils.js +28 -1
  145. package/lib/utils/isomorphic/urlMatch.js +120 -0
  146. package/lib/utils/mimeType.js +2 -1
  147. package/lib/utils/network.js +7 -35
  148. package/lib/utils/stackTrace.js +2 -4
  149. package/lib/utils/timeoutRunner.js +11 -76
  150. package/lib/utils/zones.js +23 -60
  151. package/lib/utilsBundle.js +2 -1
  152. package/lib/utilsBundleImpl/index.js +33 -31
  153. package/lib/vite/htmlReport/index.html +12 -12
  154. package/lib/vite/recorder/assets/codeMirrorModule-C-fQ5QZD.js +24 -0
  155. package/lib/vite/recorder/assets/{codicon-zGuYmc9o.ttf → codicon-DCmgc-ay.ttf} +0 -0
  156. package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
  157. package/lib/vite/recorder/assets/index-D-5S5PPN.js +47 -0
  158. package/lib/vite/recorder/index.html +2 -2
  159. package/lib/vite/traceViewer/assets/codeMirrorModule-5yiV-3wl.js +16831 -0
  160. package/lib/vite/traceViewer/assets/codeMirrorModule-B7Z3vq11.js +24 -0
  161. package/lib/vite/traceViewer/assets/codeMirrorModule-C6p3E9Zg.js +24 -0
  162. package/lib/vite/traceViewer/assets/codeMirrorModule-CqYUz5ms.js +24 -0
  163. package/lib/vite/traceViewer/assets/codeMirrorModule-Dx6AXgMV.js +16838 -0
  164. package/lib/vite/traceViewer/assets/codeMirrorModule-T_sdMrbM.js +24 -0
  165. package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
  166. package/lib/vite/traceViewer/assets/testServerConnection-D-tXL3sj.js +224 -0
  167. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  168. package/lib/vite/traceViewer/assets/workbench-Bjkiwcr1.js +19119 -0
  169. package/lib/vite/traceViewer/assets/workbench-C43LWZEX.js +72 -0
  170. package/lib/vite/traceViewer/assets/workbench-C5OQh9VX.js +19119 -0
  171. package/lib/vite/traceViewer/assets/workbench-DrQjKdyE.js +72 -0
  172. package/lib/vite/traceViewer/assets/workbench-caTaZnzx.js +72 -0
  173. package/lib/vite/traceViewer/assets/workbench-u2lRPMOT.js +72 -0
  174. package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
  175. package/lib/vite/traceViewer/assets/xtermModule-CZ7sDYXB.js +6529 -0
  176. package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
  177. package/lib/vite/traceViewer/codeMirrorModule.Cy8X9Wtw.css +344 -0
  178. package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
  179. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  180. package/lib/vite/traceViewer/embedded.BQq6Psnz.js +104 -0
  181. package/lib/vite/traceViewer/embedded.BVDVQOzc.js +2 -0
  182. package/lib/vite/traceViewer/embedded.Bn8Ptzv6.js +2 -0
  183. package/lib/vite/traceViewer/embedded.CvhnUgIi.js +2 -0
  184. package/lib/vite/traceViewer/embedded.D27cnKiB.js +104 -0
  185. package/lib/vite/traceViewer/embedded.DPqrDeET.js +2 -0
  186. package/lib/vite/traceViewer/embedded.DjZq4InJ.css +68 -0
  187. package/lib/vite/traceViewer/embedded.html +16 -0
  188. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  189. package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
  190. package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
  191. package/lib/vite/traceViewer/index.B8dgQwuN.js +2 -0
  192. package/lib/vite/traceViewer/index.BGj8jY3H.js +2 -0
  193. package/lib/vite/traceViewer/index.C0EgJ4oW.js +195 -0
  194. package/lib/vite/traceViewer/index.CUpI-BFe.js +195 -0
  195. package/lib/vite/traceViewer/{index.-g_5lMbJ.css → index.CrbWWHbf.css} +1 -1
  196. package/lib/vite/traceViewer/index.QanXxRUb.css +131 -0
  197. package/lib/vite/traceViewer/index._cX8k4co.js +2 -0
  198. package/lib/vite/traceViewer/index.html +5 -4
  199. package/lib/vite/traceViewer/index.pMAN88y-.js +2 -0
  200. package/lib/vite/traceViewer/snapshot.html +1 -1
  201. package/lib/vite/traceViewer/sw.bundle.js +3 -4
  202. package/lib/vite/traceViewer/uiMode.D-tg1Oci.js +1730 -0
  203. package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
  204. package/lib/vite/traceViewer/uiMode.DKjMBMlc.js +1730 -0
  205. package/lib/vite/traceViewer/uiMode.DVWUEIHq.css +1424 -0
  206. package/lib/vite/traceViewer/uiMode.DVrL7a1K.js +10 -0
  207. package/lib/vite/traceViewer/uiMode.Dg9oJCQU.js +10 -0
  208. package/lib/vite/traceViewer/uiMode.DwZAzstF.js +10 -0
  209. package/lib/vite/traceViewer/uiMode.html +5 -4
  210. package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
  211. package/lib/vite/traceViewer/uiMode.jY2s-9ps.js +10 -0
  212. package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
  213. package/lib/vite/traceViewer/workbench.B3X2QtYa.css +3702 -0
  214. package/lib/vite/traceViewer/workbench.DyTpxWVb.css +1 -0
  215. package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
  216. package/lib/vite/traceViewer/xtermModule.4oRVGWQ-.css +209 -0
  217. package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
  218. package/package.json +2 -2
  219. package/types/protocol.d.ts +960 -78
  220. package/types/structs.d.ts +1 -1
  221. package/types/types.d.ts +3083 -2448
  222. package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +0 -24
  223. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
  224. package/lib/vite/recorder/assets/index-yg8ypzl6.js +0 -47
  225. package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
  226. package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
  227. package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
  228. package/lib/vite/traceViewer/uiMode.Fb0bNA4H.js +0 -10
  229. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +0 -1
  230. package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +0 -1
  231. /package/lib/vite/recorder/assets/{codeMirrorModule-Hs9-1ZG4.css → codeMirrorModule-ez37Vkbh.css} +0 -0
  232. /package/lib/vite/traceViewer/assets/{xtermModule-Yt6xwiJ_.js → xtermModule-BeNbaIVa.js} +0 -0
  233. /package/lib/vite/traceViewer/{codeMirrorModule.Hs9-1ZG4.css → codeMirrorModule.ez37Vkbh.css} +0 -0
  234. /package/lib/vite/traceViewer/{xtermModule.0lwXJFHT.css → xtermModule.DSXBckUd.css} +0 -0
@@ -190,4 +190,4 @@ class AndroidSocketDispatcher extends _dispatcher.Dispatcher {
190
190
  }
191
191
  }
192
192
  exports.AndroidSocketDispatcher = AndroidSocketDispatcher;
193
- const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
193
+ const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['ChannelUp', 166], ['ChannelDown', 167], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
@@ -20,6 +20,7 @@ var _writableStreamDispatcher = require("./writableStreamDispatcher");
20
20
  var _dialogDispatcher = require("./dialogDispatcher");
21
21
  var _errors = require("../errors");
22
22
  var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
23
+ var _recorderApp = require("../recorder/recorderApp");
23
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
26
  /**
@@ -181,14 +182,23 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
181
182
  if (pageDispatcher !== null && pageDispatcher !== void 0 && pageDispatcher._subscriptions.has(event)) return true;
182
183
  return false;
183
184
  }
184
- async createTempFile(params) {
185
+ async createTempFiles(params) {
185
186
  const dir = this._context._browser.options.artifactsDir;
186
187
  const tmpDir = path.join(dir, 'upload-' + (0, _utils.createGuid)());
187
- await fs.promises.mkdir(tmpDir);
188
+ const tempDirWithRootName = params.rootDirName ? path.join(tmpDir, path.basename(params.rootDirName)) : tmpDir;
189
+ await fs.promises.mkdir(tempDirWithRootName, {
190
+ recursive: true
191
+ });
188
192
  this._context._tempDirs.push(tmpDir);
189
- const file = fs.createWriteStream(path.join(tmpDir, params.name));
190
193
  return {
191
- writableStream: new _writableStreamDispatcher.WritableStreamDispatcher(this, file, params.lastModifiedMs)
194
+ rootDir: params.rootDirName ? new _writableStreamDispatcher.WritableStreamDispatcher(this, tempDirWithRootName) : undefined,
195
+ writableStreams: await Promise.all(params.items.map(async item => {
196
+ await fs.promises.mkdir(path.dirname(path.join(tempDirWithRootName, item.name)), {
197
+ recursive: true
198
+ });
199
+ const file = fs.createWriteStream(path.join(tempDirWithRootName, item.name));
200
+ return new _writableStreamDispatcher.WritableStreamDispatcher(this, file, item.lastModifiedMs);
201
+ }))
192
202
  };
193
203
  }
194
204
  async setDefaultNavigationTimeoutNoReply(params) {
@@ -223,8 +233,15 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
223
233
  async addCookies(params) {
224
234
  await this._context.addCookies(params.cookies);
225
235
  }
226
- async clearCookies() {
227
- await this._context.clearCookies();
236
+ async clearCookies(params) {
237
+ const nameRe = params.nameRegexSource !== undefined && params.nameRegexFlags !== undefined ? new RegExp(params.nameRegexSource, params.nameRegexFlags) : undefined;
238
+ const domainRe = params.domainRegexSource !== undefined && params.domainRegexFlags !== undefined ? new RegExp(params.domainRegexSource, params.domainRegexFlags) : undefined;
239
+ const pathRe = params.pathRegexSource !== undefined && params.pathRegexFlags !== undefined ? new RegExp(params.pathRegexSource, params.pathRegexFlags) : undefined;
240
+ await this._context.clearCookies({
241
+ name: nameRe || params.name,
242
+ domain: domainRe || params.domain,
243
+ path: pathRe || params.path
244
+ });
228
245
  }
229
246
  async grantPermissions(params) {
230
247
  await this._context.grantPermissions(params.permissions, params.origin);
@@ -270,7 +287,7 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
270
287
  await this._context.close(params);
271
288
  }
272
289
  async recorderSupplementEnable(params) {
273
- await _recorder.Recorder.show(this._context, params);
290
+ await _recorder.Recorder.show(this._context, _recorderApp.RecorderApp.factory(this._context), params);
274
291
  }
275
292
  async pause(params, metadata) {
276
293
  // Debugger will take care of this.
@@ -296,6 +313,33 @@ class BrowserContextDispatcher extends _dispatcher.Dispatcher {
296
313
  artifact: _artifactDispatcher.ArtifactDispatcher.from(this, artifact)
297
314
  };
298
315
  }
316
+ async clockFastForward(params, metadata) {
317
+ var _ref, _params$ticksString;
318
+ await this._context.clock.fastForward((_ref = (_params$ticksString = params.ticksString) !== null && _params$ticksString !== void 0 ? _params$ticksString : params.ticksNumber) !== null && _ref !== void 0 ? _ref : 0);
319
+ }
320
+ async clockInstall(params, metadata) {
321
+ var _ref2, _params$timeString;
322
+ await this._context.clock.install((_ref2 = (_params$timeString = params.timeString) !== null && _params$timeString !== void 0 ? _params$timeString : params.timeNumber) !== null && _ref2 !== void 0 ? _ref2 : undefined);
323
+ }
324
+ async clockPauseAt(params, metadata) {
325
+ var _ref3, _params$timeString2;
326
+ await this._context.clock.pauseAt((_ref3 = (_params$timeString2 = params.timeString) !== null && _params$timeString2 !== void 0 ? _params$timeString2 : params.timeNumber) !== null && _ref3 !== void 0 ? _ref3 : 0);
327
+ }
328
+ async clockResume(params, metadata) {
329
+ await this._context.clock.resume();
330
+ }
331
+ async clockRunFor(params, metadata) {
332
+ var _ref4, _params$ticksString2;
333
+ await this._context.clock.runFor((_ref4 = (_params$ticksString2 = params.ticksString) !== null && _params$ticksString2 !== void 0 ? _params$ticksString2 : params.ticksNumber) !== null && _ref4 !== void 0 ? _ref4 : 0);
334
+ }
335
+ async clockSetFixedTime(params, metadata) {
336
+ var _ref5, _params$timeString3;
337
+ await this._context.clock.setFixedTime((_ref5 = (_params$timeString3 = params.timeString) !== null && _params$timeString3 !== void 0 ? _params$timeString3 : params.timeNumber) !== null && _ref5 !== void 0 ? _ref5 : 0);
338
+ }
339
+ async clockSetSystemTime(params, metadata) {
340
+ var _ref6, _params$timeString4;
341
+ await this._context.clock.setSystemTime((_ref6 = (_params$timeString4 = params.timeString) !== null && _params$timeString4 !== void 0 ? _params$timeString4 : params.timeNumber) !== null && _ref6 !== void 0 ? _ref6 : 0);
342
+ }
299
343
  async updateSubscription(params) {
300
344
  if (params.enabled) this._subscriptions.add(params.event);else this._subscriptions.delete(params.event);
301
345
  }
@@ -73,7 +73,7 @@ class Dispatcher extends _events.EventEmitter {
73
73
  (0, _utils.assert)(!this._parent._dispatchers.has(guid));
74
74
  this._parent._dispatchers.set(guid, this);
75
75
  }
76
- if (this._parent) this._connection.sendCreate(this._parent, type, guid, initializer, this._parent._object);
76
+ if (this._parent) this._connection.sendCreate(this._parent, type, guid, initializer);
77
77
  this._connection.maybeDisposeStaleDispatchers(this._gcBucket);
78
78
  }
79
79
  parentScope() {
@@ -105,8 +105,7 @@ class Dispatcher extends _events.EventEmitter {
105
105
  // Just ignore this event outside of tests.
106
106
  return;
107
107
  }
108
- const sdkObject = this._object instanceof _instrumentation.SdkObject ? this._object : undefined;
109
- this._connection.sendEvent(this, method, params, sdkObject);
108
+ this._connection.sendEvent(this, method, params);
110
109
  }
111
110
  _dispose(reason) {
112
111
  this._disposeRecursively(new _errors.TargetClosedError());
@@ -170,53 +169,50 @@ class DispatcherConnection {
170
169
  this._isLocal = void 0;
171
170
  this._isLocal = !!isLocal;
172
171
  }
173
- sendEvent(dispatcher, event, params, sdkObject) {
172
+ sendEvent(dispatcher, event, params) {
174
173
  const validator = (0, _validator.findValidator)(dispatcher._type, event, 'Event');
175
174
  params = validator(params, '', {
176
175
  tChannelImpl: this._tChannelImplToWire.bind(this),
177
176
  binary: this._isLocal ? 'buffer' : 'toBase64'
178
177
  });
179
- this._sendMessageToClient(dispatcher._guid, dispatcher._type, event, params, sdkObject);
178
+ this.onmessage({
179
+ guid: dispatcher._guid,
180
+ method: event,
181
+ params
182
+ });
180
183
  }
181
- sendCreate(parent, type, guid, initializer, sdkObject) {
184
+ sendCreate(parent, type, guid, initializer) {
182
185
  const validator = (0, _validator.findValidator)(type, '', 'Initializer');
183
186
  initializer = validator(initializer, '', {
184
187
  tChannelImpl: this._tChannelImplToWire.bind(this),
185
188
  binary: this._isLocal ? 'buffer' : 'toBase64'
186
189
  });
187
- this._sendMessageToClient(parent._guid, type, '__create__', {
188
- type,
189
- initializer,
190
- guid
191
- }, sdkObject);
190
+ this.onmessage({
191
+ guid: parent._guid,
192
+ method: '__create__',
193
+ params: {
194
+ type,
195
+ initializer,
196
+ guid
197
+ }
198
+ });
192
199
  }
193
200
  sendAdopt(parent, dispatcher) {
194
- this._sendMessageToClient(parent._guid, dispatcher._type, '__adopt__', {
195
- guid: dispatcher._guid
201
+ this.onmessage({
202
+ guid: parent._guid,
203
+ method: '__adopt__',
204
+ params: {
205
+ guid: dispatcher._guid
206
+ }
196
207
  });
197
208
  }
198
209
  sendDispose(dispatcher, reason) {
199
- this._sendMessageToClient(dispatcher._guid, dispatcher._type, '__dispose__', {
200
- reason
201
- });
202
- }
203
- _sendMessageToClient(guid, type, method, params, sdkObject) {
204
- if (sdkObject) {
205
- var _sdkObject$attributio, _sdkObject$instrument;
206
- const event = {
207
- type: 'event',
208
- class: type,
209
- method,
210
- params: params || {},
211
- time: (0, _utils.monotonicTime)(),
212
- pageId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio = sdkObject.attribution) === null || _sdkObject$attributio === void 0 || (_sdkObject$attributio = _sdkObject$attributio.page) === null || _sdkObject$attributio === void 0 ? void 0 : _sdkObject$attributio.guid
213
- };
214
- (_sdkObject$instrument = sdkObject.instrumentation) === null || _sdkObject$instrument === void 0 || _sdkObject$instrument.onEvent(sdkObject, event);
215
- }
216
210
  this.onmessage({
217
- guid,
218
- method,
219
- params
211
+ guid: dispatcher._guid,
212
+ method: '__dispose__',
213
+ params: {
214
+ reason
215
+ }
220
216
  });
221
217
  }
222
218
  _tChannelImplFromWire(names, arg, path, context) {
@@ -262,7 +258,7 @@ class DispatcherConnection {
262
258
  }
263
259
  }
264
260
  async dispatch(message) {
265
- var _sdkObject$attributio2, _sdkObject$attributio3, _params$info;
261
+ var _sdkObject$attributio, _sdkObject$attributio2, _params$info;
266
262
  const {
267
263
  id,
268
264
  guid,
@@ -301,13 +297,13 @@ class DispatcherConnection {
301
297
  const sdkObject = dispatcher._object instanceof _instrumentation.SdkObject ? dispatcher._object : undefined;
302
298
  const callMetadata = {
303
299
  id: `call@${id}`,
304
- wallTime: validMetadata.wallTime || Date.now(),
305
300
  location: validMetadata.location,
306
301
  apiName: validMetadata.apiName,
307
302
  internal: validMetadata.internal,
303
+ stepId: validMetadata.stepId,
308
304
  objectId: sdkObject === null || sdkObject === void 0 ? void 0 : sdkObject.guid,
309
- pageId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio2 = sdkObject.attribution) === null || _sdkObject$attributio2 === void 0 || (_sdkObject$attributio2 = _sdkObject$attributio2.page) === null || _sdkObject$attributio2 === void 0 ? void 0 : _sdkObject$attributio2.guid,
310
- frameId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio3 = sdkObject.attribution) === null || _sdkObject$attributio3 === void 0 || (_sdkObject$attributio3 = _sdkObject$attributio3.frame) === null || _sdkObject$attributio3 === void 0 ? void 0 : _sdkObject$attributio3.guid,
305
+ pageId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio = sdkObject.attribution) === null || _sdkObject$attributio === void 0 || (_sdkObject$attributio = _sdkObject$attributio.page) === null || _sdkObject$attributio === void 0 ? void 0 : _sdkObject$attributio.guid,
306
+ frameId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio2 = sdkObject.attribution) === null || _sdkObject$attributio2 === void 0 || (_sdkObject$attributio2 = _sdkObject$attributio2.frame) === null || _sdkObject$attributio2 === void 0 ? void 0 : _sdkObject$attributio2.guid,
311
307
  startTime: (0, _utils.monotonicTime)(),
312
308
  endTime: 0,
313
309
  type: dispatcher._type,
@@ -382,7 +378,7 @@ class DispatcherConnection {
382
378
  }
383
379
  }
384
380
  response.error = (0, _errors.serializeError)(e);
385
- // The command handler could have set error in the metada, do not reset it if there was no exception.
381
+ // The command handler could have set error in the metadata, do not reset it if there was no exception.
386
382
  callMetadata.error = response.error;
387
383
  } finally {
388
384
  callMetadata.endTime = (0, _utils.monotonicTime)();
@@ -394,6 +390,6 @@ class DispatcherConnection {
394
390
  }
395
391
  exports.DispatcherConnection = DispatcherConnection;
396
392
  function closeReason(sdkObject) {
397
- var _sdkObject$attributio4, _sdkObject$attributio5, _sdkObject$attributio6;
398
- return ((_sdkObject$attributio4 = sdkObject.attribution.page) === null || _sdkObject$attributio4 === void 0 ? void 0 : _sdkObject$attributio4._closeReason) || ((_sdkObject$attributio5 = sdkObject.attribution.context) === null || _sdkObject$attributio5 === void 0 ? void 0 : _sdkObject$attributio5._closeReason) || ((_sdkObject$attributio6 = sdkObject.attribution.browser) === null || _sdkObject$attributio6 === void 0 ? void 0 : _sdkObject$attributio6._closeReason);
393
+ var _sdkObject$attributio3, _sdkObject$attributio4, _sdkObject$attributio5;
394
+ return ((_sdkObject$attributio3 = sdkObject.attribution.page) === null || _sdkObject$attributio3 === void 0 ? void 0 : _sdkObject$attributio3._closeReason) || ((_sdkObject$attributio4 = sdkObject.attribution.context) === null || _sdkObject$attributio4 === void 0 ? void 0 : _sdkObject$attributio4._closeReason) || ((_sdkObject$attributio5 = sdkObject.attribution.browser) === null || _sdkObject$attributio5 === void 0 ? void 0 : _sdkObject$attributio5._closeReason);
399
395
  }
@@ -89,8 +89,7 @@ class FrameDispatcher extends _dispatcher.Dispatcher {
89
89
  async evaluateExpression(params, metadata) {
90
90
  return {
91
91
  value: (0, _jsHandleDispatcher.serializeResult)(await this._frame.evaluateExpression(params.expression, {
92
- isFunction: params.isFunction,
93
- exposeUtilityScript: params.exposeUtilityScript
92
+ isFunction: params.isFunction
94
93
  }, (0, _jsHandleDispatcher.parseArgument)(params.arg)))
95
94
  };
96
95
  }
@@ -87,7 +87,7 @@ class JSHandleDispatcher extends _dispatcher.Dispatcher {
87
87
  }
88
88
 
89
89
  // Generic channel parser converts guids to JSHandleDispatchers,
90
- // and this function takes care of coverting them into underlying JSHandles.
90
+ // and this function takes care of converting them into underlying JSHandles.
91
91
  exports.JSHandleDispatcher = JSHandleDispatcher;
92
92
  function parseArgument(arg) {
93
93
  return (0, _serializers.parseSerializedValue)(arg.value, arg.handles.map(a => a._object));
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.JsonPipeDispatcher = void 0;
7
7
  var _dispatcher = require("./dispatcher");
8
8
  var _utils = require("../../utils");
9
- var _errors = require("../errors");
10
9
  /**
11
10
  * Copyright (c) Microsoft Corporation.
12
11
  *
@@ -45,12 +44,11 @@ class JsonPipeDispatcher extends _dispatcher.Dispatcher {
45
44
  message
46
45
  });
47
46
  }
48
- wasClosed(error) {
47
+ wasClosed(reason) {
49
48
  if (!this._disposed) {
50
- const params = error ? {
51
- error: (0, _errors.serializeError)(error)
52
- } : {};
53
- this._dispatchEvent('closed', params);
49
+ this._dispatchEvent('closed', {
50
+ reason
51
+ });
54
52
  this._dispose();
55
53
  }
56
54
  }
@@ -20,6 +20,7 @@ var _userAgent = require("../../utils/userAgent");
20
20
  var _progress = require("../progress");
21
21
  var _network = require("../../utils/network");
22
22
  var _instrumentation = require("../../server/instrumentation");
23
+ var _deviceDescriptors = require("../deviceDescriptors");
23
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
25
  /**
25
26
  * Copyright (c) Microsoft Corporation.
@@ -40,8 +41,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
40
41
  class LocalUtilsDispatcher extends _dispatcher.Dispatcher {
41
42
  constructor(scope, playwright) {
42
43
  const localUtils = new _instrumentation.SdkObject(playwright, 'localUtils', 'localUtils');
43
- const descriptors = require('../deviceDescriptors');
44
- const deviceDescriptors = Object.entries(descriptors).map(([name, descriptor]) => ({
44
+ const deviceDescriptors = Object.entries(_deviceDescriptors.deviceDescriptors).map(([name, descriptor]) => ({
45
45
  name,
46
46
  descriptor
47
47
  }));
@@ -208,9 +208,9 @@ class LocalUtilsDispatcher extends _dispatcher.Dispatcher {
208
208
  pipe.on('message', message => {
209
209
  transport.send(message);
210
210
  });
211
- transport.onclose = () => {
211
+ transport.onclose = reason => {
212
212
  socksInterceptor === null || socksInterceptor === void 0 || socksInterceptor.cleanup();
213
- pipe.wasClosed();
213
+ pipe.wasClosed(reason);
214
214
  };
215
215
  pipe.on('close', () => transport.close());
216
216
  return {
@@ -321,7 +321,14 @@ class HarBackend {
321
321
  if (candidate.request.url !== url || candidate.request.method !== method) continue;
322
322
  if (method === 'POST' && postData && candidate.request.postData) {
323
323
  const buffer = await this._loadContent(candidate.request.postData);
324
- if (!buffer.equals(postData)) continue;
324
+ if (!buffer.equals(postData)) {
325
+ const boundary = multipartBoundary(headers);
326
+ if (!boundary) continue;
327
+ const candidataBoundary = multipartBoundary(candidate.request.headers);
328
+ if (!candidataBoundary) continue;
329
+ // Try to match multipart/form-data ignroing boundary as it changes between requests.
330
+ if (postData.toString().replaceAll(boundary, '') !== buffer.toString().replaceAll(candidataBoundary, '')) continue;
331
+ }
325
332
  }
326
333
  entries.push(candidate);
327
334
  }
@@ -396,4 +403,11 @@ async function urlToWSEndpoint(progress, endpointURL) {
396
403
  wsUrl.pathname += wsEndpointPath;
397
404
  wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:';
398
405
  return wsUrl.toString();
406
+ }
407
+ function multipartBoundary(headers) {
408
+ const contentType = headers.find(h => h.name.toLowerCase() === 'content-type');
409
+ if (!(contentType !== null && contentType !== void 0 && contentType.value.includes('multipart/form-data'))) return undefined;
410
+ const boundary = contentType.value.match(/boundary=(\S+)/);
411
+ if (boundary) return boundary[1];
412
+ return undefined;
399
413
  }
@@ -186,9 +186,9 @@ class APIRequestContextDispatcher extends _dispatcher.Dispatcher {
186
186
  async storageState() {
187
187
  return this._object.storageState();
188
188
  }
189
- async dispose(_, metadata) {
189
+ async dispose(params, metadata) {
190
190
  metadata.potentiallyClosesScope = true;
191
- await this._object.dispose();
191
+ await this._object.dispose(params);
192
192
  this._dispose();
193
193
  }
194
194
  async fetch(params, metadata) {
@@ -134,13 +134,16 @@ class PageDispatcher extends _dispatcher.Dispatcher {
134
134
  };
135
135
  }
136
136
  async registerLocatorHandler(params, metadata) {
137
- const uid = this._page.registerLocatorHandler(params.selector);
137
+ const uid = this._page.registerLocatorHandler(params.selector, params.noWaitAfter);
138
138
  return {
139
139
  uid
140
140
  };
141
141
  }
142
142
  async resolveLocatorHandlerNoReply(params, metadata) {
143
- this._page.resolveLocatorHandler(params.uid);
143
+ this._page.resolveLocatorHandler(params.uid, params.remove);
144
+ }
145
+ async unregisterLocatorHandler(params, metadata) {
146
+ this._page.unregisterLocatorHandler(params.uid);
144
147
  }
145
148
  async emulateMedia(params, metadata) {
146
149
  await this._page.emulateMedia({
@@ -39,6 +39,7 @@ class PlaywrightDispatcher extends _dispatcher.Dispatcher {
39
39
  const prelaunchedAndroidDeviceDispatcher = prelaunchedAndroidDevice ? new _androidDispatcher.AndroidDeviceDispatcher(android, prelaunchedAndroidDevice) : undefined;
40
40
  super(scope, playwright, 'Playwright', {
41
41
  chromium: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.chromium),
42
+ bidi: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.bidi),
42
43
  firefox: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.firefox),
43
44
  webkit: new _browserTypeDispatcher.BrowserTypeDispatcher(scope, playwright.webkit),
44
45
  android,
@@ -26,17 +26,18 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
26
26
  */
27
27
 
28
28
  class WritableStreamDispatcher extends _dispatcher.Dispatcher {
29
- constructor(scope, stream, lastModifiedMs) {
29
+ constructor(scope, streamOrDirectory, lastModifiedMs) {
30
30
  super(scope, {
31
31
  guid: 'writableStream@' + (0, _utils.createGuid)(),
32
- stream
32
+ streamOrDirectory
33
33
  }, 'WritableStream', {});
34
34
  this._type_WritableStream = true;
35
35
  this._lastModifiedMs = void 0;
36
36
  this._lastModifiedMs = lastModifiedMs;
37
37
  }
38
38
  async write(params) {
39
- const stream = this._object.stream;
39
+ if (typeof this._object.streamOrDirectory === 'string') throw new Error('Cannot write to a directory');
40
+ const stream = this._object.streamOrDirectory;
40
41
  await new Promise((fulfill, reject) => {
41
42
  stream.write(params.binary, error => {
42
43
  if (error) reject(error);else fulfill();
@@ -44,12 +45,14 @@ class WritableStreamDispatcher extends _dispatcher.Dispatcher {
44
45
  });
45
46
  }
46
47
  async close() {
47
- const stream = this._object.stream;
48
+ if (typeof this._object.streamOrDirectory === 'string') throw new Error('Cannot close a directory');
49
+ const stream = this._object.streamOrDirectory;
48
50
  await new Promise(fulfill => stream.end(fulfill));
49
51
  if (this._lastModifiedMs) await fs.promises.utimes(this.path(), new Date(this._lastModifiedMs), new Date(this._lastModifiedMs));
50
52
  }
51
53
  path() {
52
- return this._object.stream.path;
54
+ if (typeof this._object.streamOrDirectory === 'string') return this._object.streamOrDirectory;
55
+ return this._object.streamOrDirectory.path;
53
56
  }
54
57
  }
55
58
  exports.WritableStreamDispatcher = WritableStreamDispatcher;