patchright-core 1.48.2

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 (333) hide show
  1. package/README.md +3 -0
  2. package/ThirdPartyNotices.txt +1548 -0
  3. package/bin/PrintDeps.exe +0 -0
  4. package/bin/README.md +2 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  7. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  8. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  9. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  10. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  11. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  12. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  13. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  14. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  15. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  16. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  17. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  18. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  19. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  20. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  21. package/browsers.json +57 -0
  22. package/cli.js +18 -0
  23. package/index.d.ts +17 -0
  24. package/index.js +33 -0
  25. package/index.mjs +28 -0
  26. package/lib/androidServerImpl.js +69 -0
  27. package/lib/browserServerImpl.js +92 -0
  28. package/lib/cli/driver.js +95 -0
  29. package/lib/cli/program.js +589 -0
  30. package/lib/cli/programWithTestStub.js +67 -0
  31. package/lib/client/accessibility.js +50 -0
  32. package/lib/client/android.js +473 -0
  33. package/lib/client/api.js +285 -0
  34. package/lib/client/artifact.js +79 -0
  35. package/lib/client/browser.js +145 -0
  36. package/lib/client/browserContext.js +583 -0
  37. package/lib/client/browserType.js +241 -0
  38. package/lib/client/cdpSession.js +53 -0
  39. package/lib/client/channelOwner.js +235 -0
  40. package/lib/client/clientHelper.js +57 -0
  41. package/lib/client/clientInstrumentation.js +50 -0
  42. package/lib/client/clock.js +69 -0
  43. package/lib/client/connection.js +333 -0
  44. package/lib/client/consoleMessage.js +55 -0
  45. package/lib/client/coverage.js +41 -0
  46. package/lib/client/dialog.js +57 -0
  47. package/lib/client/download.js +62 -0
  48. package/lib/client/electron.js +135 -0
  49. package/lib/client/elementHandle.js +321 -0
  50. package/lib/client/errors.js +77 -0
  51. package/lib/client/eventEmitter.js +314 -0
  52. package/lib/client/events.js +94 -0
  53. package/lib/client/fetch.js +391 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +504 -0
  56. package/lib/client/harRouter.js +99 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +121 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +36 -0
  61. package/lib/client/locator.js +441 -0
  62. package/lib/client/network.js +762 -0
  63. package/lib/client/page.js +770 -0
  64. package/lib/client/playwright.js +80 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +134 -0
  68. package/lib/client/types.js +24 -0
  69. package/lib/client/video.js +51 -0
  70. package/lib/client/waiter.js +158 -0
  71. package/lib/client/webError.js +37 -0
  72. package/lib/client/worker.js +71 -0
  73. package/lib/client/writableStream.js +54 -0
  74. package/lib/common/socksProxy.js +569 -0
  75. package/lib/common/timeoutSettings.js +73 -0
  76. package/lib/common/types.js +5 -0
  77. package/lib/generated/clockSource.js +7 -0
  78. package/lib/generated/consoleApiSource.js +7 -0
  79. package/lib/generated/injectedScriptSource.js +7 -0
  80. package/lib/generated/pollingRecorderSource.js +7 -0
  81. package/lib/generated/utilityScriptSource.js +7 -0
  82. package/lib/generated/webSocketMockSource.js +7 -0
  83. package/lib/image_tools/colorUtils.js +98 -0
  84. package/lib/image_tools/compare.js +108 -0
  85. package/lib/image_tools/imageChannel.js +70 -0
  86. package/lib/image_tools/stats.js +102 -0
  87. package/lib/inProcessFactory.js +54 -0
  88. package/lib/inprocess.js +20 -0
  89. package/lib/outofprocess.js +67 -0
  90. package/lib/protocol/debug.js +27 -0
  91. package/lib/protocol/serializers.js +173 -0
  92. package/lib/protocol/transport.js +82 -0
  93. package/lib/protocol/validator.js +2760 -0
  94. package/lib/protocol/validatorPrimitives.js +139 -0
  95. package/lib/remote/playwrightConnection.js +274 -0
  96. package/lib/remote/playwrightServer.js +110 -0
  97. package/lib/server/accessibility.js +62 -0
  98. package/lib/server/android/android.js +441 -0
  99. package/lib/server/android/backendAdb.js +172 -0
  100. package/lib/server/artifact.js +104 -0
  101. package/lib/server/bidi/bidiBrowser.js +311 -0
  102. package/lib/server/bidi/bidiChromium.js +124 -0
  103. package/lib/server/bidi/bidiConnection.js +206 -0
  104. package/lib/server/bidi/bidiExecutionContext.js +159 -0
  105. package/lib/server/bidi/bidiFirefox.js +104 -0
  106. package/lib/server/bidi/bidiInput.js +158 -0
  107. package/lib/server/bidi/bidiNetworkManager.js +338 -0
  108. package/lib/server/bidi/bidiOverCdp.js +103 -0
  109. package/lib/server/bidi/bidiPage.js +529 -0
  110. package/lib/server/bidi/bidiPdf.js +140 -0
  111. package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  112. package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  113. package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  114. package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  115. package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
  116. package/lib/server/browser.js +148 -0
  117. package/lib/server/browserContext.js +666 -0
  118. package/lib/server/browserType.js +335 -0
  119. package/lib/server/chromium/appIcon.png +0 -0
  120. package/lib/server/chromium/chromium.js +350 -0
  121. package/lib/server/chromium/chromiumSwitches.js +36 -0
  122. package/lib/server/chromium/crAccessibility.js +237 -0
  123. package/lib/server/chromium/crBrowser.js +522 -0
  124. package/lib/server/chromium/crConnection.js +228 -0
  125. package/lib/server/chromium/crCoverage.js +246 -0
  126. package/lib/server/chromium/crDevTools.js +104 -0
  127. package/lib/server/chromium/crDragDrop.js +143 -0
  128. package/lib/server/chromium/crExecutionContext.js +149 -0
  129. package/lib/server/chromium/crInput.js +171 -0
  130. package/lib/server/chromium/crNetworkManager.js +809 -0
  131. package/lib/server/chromium/crPage.js +1235 -0
  132. package/lib/server/chromium/crPdf.js +153 -0
  133. package/lib/server/chromium/crProtocolHelper.js +133 -0
  134. package/lib/server/chromium/crServiceWorker.js +111 -0
  135. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  136. package/lib/server/chromium/videoRecorder.js +155 -0
  137. package/lib/server/clock.js +133 -0
  138. package/lib/server/codegen/csharp.js +299 -0
  139. package/lib/server/codegen/java.js +235 -0
  140. package/lib/server/codegen/javascript.js +223 -0
  141. package/lib/server/codegen/jsonl.js +47 -0
  142. package/lib/server/codegen/language.js +88 -0
  143. package/lib/server/codegen/languages.js +30 -0
  144. package/lib/server/codegen/python.js +265 -0
  145. package/lib/server/codegen/types.js +5 -0
  146. package/lib/server/console.js +57 -0
  147. package/lib/server/cookieStore.js +185 -0
  148. package/lib/server/debugController.js +234 -0
  149. package/lib/server/debugger.js +132 -0
  150. package/lib/server/deviceDescriptors.js +26 -0
  151. package/lib/server/deviceDescriptorsSource.json +1669 -0
  152. package/lib/server/dialog.js +71 -0
  153. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  154. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  155. package/lib/server/dispatchers/browserContextDispatcher.js +368 -0
  156. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  157. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  158. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  159. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  160. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  161. package/lib/server/dispatchers/dispatcher.js +395 -0
  162. package/lib/server/dispatchers/electronDispatcher.js +93 -0
  163. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  164. package/lib/server/dispatchers/frameDispatcher.js +286 -0
  165. package/lib/server/dispatchers/jsHandleDispatcher.js +97 -0
  166. package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  167. package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  168. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  169. package/lib/server/dispatchers/pageDispatcher.js +367 -0
  170. package/lib/server/dispatchers/playwrightDispatcher.js +107 -0
  171. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  172. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  173. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  174. package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
  175. package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  176. package/lib/server/dom.js +845 -0
  177. package/lib/server/download.js +60 -0
  178. package/lib/server/electron/electron.js +296 -0
  179. package/lib/server/electron/loader.js +57 -0
  180. package/lib/server/errors.js +68 -0
  181. package/lib/server/fetch.js +656 -0
  182. package/lib/server/fileChooser.js +42 -0
  183. package/lib/server/fileUploadUtils.js +75 -0
  184. package/lib/server/firefox/ffAccessibility.js +216 -0
  185. package/lib/server/firefox/ffBrowser.js +460 -0
  186. package/lib/server/firefox/ffConnection.js +168 -0
  187. package/lib/server/firefox/ffExecutionContext.js +135 -0
  188. package/lib/server/firefox/ffInput.js +150 -0
  189. package/lib/server/firefox/ffNetworkManager.js +233 -0
  190. package/lib/server/firefox/ffPage.js +559 -0
  191. package/lib/server/firefox/firefox.js +99 -0
  192. package/lib/server/formData.js +75 -0
  193. package/lib/server/frameSelectors.js +171 -0
  194. package/lib/server/frames.js +1808 -0
  195. package/lib/server/har/harRecorder.js +139 -0
  196. package/lib/server/har/harTracer.js +542 -0
  197. package/lib/server/helper.js +103 -0
  198. package/lib/server/index.js +114 -0
  199. package/lib/server/input.js +310 -0
  200. package/lib/server/instrumentation.js +70 -0
  201. package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  202. package/lib/server/javascript.js +299 -0
  203. package/lib/server/launchApp.js +91 -0
  204. package/lib/server/macEditingCommands.js +139 -0
  205. package/lib/server/network.js +617 -0
  206. package/lib/server/page.js +819 -0
  207. package/lib/server/pipeTransport.js +85 -0
  208. package/lib/server/playwright.js +88 -0
  209. package/lib/server/progress.js +102 -0
  210. package/lib/server/protocolError.js +49 -0
  211. package/lib/server/recorder/contextRecorder.js +299 -0
  212. package/lib/server/recorder/recorderApp.js +196 -0
  213. package/lib/server/recorder/recorderCollection.js +116 -0
  214. package/lib/server/recorder/recorderFrontend.js +5 -0
  215. package/lib/server/recorder/recorderInTraceViewer.js +144 -0
  216. package/lib/server/recorder/recorderRunner.js +155 -0
  217. package/lib/server/recorder/recorderUtils.js +112 -0
  218. package/lib/server/recorder/throttledFile.js +46 -0
  219. package/lib/server/recorder.js +329 -0
  220. package/lib/server/registry/browserFetcher.js +168 -0
  221. package/lib/server/registry/dependencies.js +322 -0
  222. package/lib/server/registry/index.js +1005 -0
  223. package/lib/server/registry/nativeDeps.js +490 -0
  224. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  225. package/lib/server/screenshotter.js +348 -0
  226. package/lib/server/selectors.js +73 -0
  227. package/lib/server/socksClientCertificatesInterceptor.js +340 -0
  228. package/lib/server/socksInterceptor.js +100 -0
  229. package/lib/server/trace/recorder/snapshotter.js +172 -0
  230. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  231. package/lib/server/trace/recorder/tracing.js +542 -0
  232. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  233. package/lib/server/trace/viewer/traceViewer.js +213 -0
  234. package/lib/server/transport.js +191 -0
  235. package/lib/server/types.js +24 -0
  236. package/lib/server/usKeyboardLayout.js +555 -0
  237. package/lib/server/webkit/webkit.js +87 -0
  238. package/lib/server/webkit/wkAccessibility.js +194 -0
  239. package/lib/server/webkit/wkBrowser.js +329 -0
  240. package/lib/server/webkit/wkConnection.js +173 -0
  241. package/lib/server/webkit/wkExecutionContext.js +143 -0
  242. package/lib/server/webkit/wkInput.js +169 -0
  243. package/lib/server/webkit/wkInterceptableRequest.js +162 -0
  244. package/lib/server/webkit/wkPage.js +1219 -0
  245. package/lib/server/webkit/wkProvisionalPage.js +94 -0
  246. package/lib/server/webkit/wkWorkers.js +104 -0
  247. package/lib/third_party/diff_match_patch.js +2222 -0
  248. package/lib/third_party/pixelmatch.js +255 -0
  249. package/lib/utils/ascii.js +31 -0
  250. package/lib/utils/comparators.js +171 -0
  251. package/lib/utils/crypto.js +174 -0
  252. package/lib/utils/debug.js +46 -0
  253. package/lib/utils/debugLogger.js +91 -0
  254. package/lib/utils/env.js +49 -0
  255. package/lib/utils/eventsHelper.js +38 -0
  256. package/lib/utils/expectUtils.js +33 -0
  257. package/lib/utils/fileUtils.js +205 -0
  258. package/lib/utils/happy-eyeballs.js +194 -0
  259. package/lib/utils/headers.js +52 -0
  260. package/lib/utils/hostPlatform.js +133 -0
  261. package/lib/utils/httpServer.js +237 -0
  262. package/lib/utils/index.js +368 -0
  263. package/lib/utils/isomorphic/cssParser.js +250 -0
  264. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  265. package/lib/utils/isomorphic/locatorGenerators.js +642 -0
  266. package/lib/utils/isomorphic/locatorParser.js +179 -0
  267. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  268. package/lib/utils/isomorphic/mimeType.js +29 -0
  269. package/lib/utils/isomorphic/recorderUtils.js +195 -0
  270. package/lib/utils/isomorphic/selectorParser.js +397 -0
  271. package/lib/utils/isomorphic/stringUtils.js +139 -0
  272. package/lib/utils/isomorphic/traceUtils.js +39 -0
  273. package/lib/utils/isomorphic/urlMatch.js +120 -0
  274. package/lib/utils/linuxUtils.js +78 -0
  275. package/lib/utils/manualPromise.js +109 -0
  276. package/lib/utils/multimap.js +75 -0
  277. package/lib/utils/network.js +160 -0
  278. package/lib/utils/processLauncher.js +248 -0
  279. package/lib/utils/profiler.js +53 -0
  280. package/lib/utils/rtti.js +44 -0
  281. package/lib/utils/semaphore.js +51 -0
  282. package/lib/utils/spawnAsync.js +45 -0
  283. package/lib/utils/stackTrace.js +121 -0
  284. package/lib/utils/task.js +58 -0
  285. package/lib/utils/time.js +37 -0
  286. package/lib/utils/timeoutRunner.js +66 -0
  287. package/lib/utils/traceUtils.js +44 -0
  288. package/lib/utils/userAgent.js +105 -0
  289. package/lib/utils/wsServer.js +127 -0
  290. package/lib/utils/zipFile.js +75 -0
  291. package/lib/utils/zones.js +62 -0
  292. package/lib/utilsBundle.js +82 -0
  293. package/lib/utilsBundleImpl/index.js +53 -0
  294. package/lib/utilsBundleImpl/xdg-open +1066 -0
  295. package/lib/vite/htmlReport/index.html +66 -0
  296. package/lib/vite/recorder/assets/codeMirrorModule-baozm8ur.js +24 -0
  297. package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  298. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  299. package/lib/vite/recorder/assets/index-2ElAIWFB.js +42 -0
  300. package/lib/vite/recorder/assets/index-BW-aOBcL.css +1 -0
  301. package/lib/vite/recorder/index.html +29 -0
  302. package/lib/vite/recorder/playwright-logo.svg +9 -0
  303. package/lib/vite/traceViewer/assets/codeMirrorModule-Bh1rfd2w.js +24 -0
  304. package/lib/vite/traceViewer/assets/inspectorTab-7GHnKvSD.js +64 -0
  305. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  306. package/lib/vite/traceViewer/assets/workbench-DPQnTHYP.js +9 -0
  307. package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  308. package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  309. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  310. package/lib/vite/traceViewer/embedded.BlHoW5LY.js +2 -0
  311. package/lib/vite/traceViewer/embedded.html +18 -0
  312. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  313. package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  314. package/lib/vite/traceViewer/index.DaWVfou1.js +2 -0
  315. package/lib/vite/traceViewer/index.html +29 -0
  316. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +1 -0
  317. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  318. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  319. package/lib/vite/traceViewer/recorder.C4zxcvd2.js +2 -0
  320. package/lib/vite/traceViewer/recorder.html +17 -0
  321. package/lib/vite/traceViewer/snapshot.html +21 -0
  322. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  323. package/lib/vite/traceViewer/uiMode.CAYqod-m.css +1 -0
  324. package/lib/vite/traceViewer/uiMode.html +20 -0
  325. package/lib/vite/traceViewer/uiMode.mTXWniJb.js +5 -0
  326. package/lib/vite/traceViewer/workbench.D3JVcA9K.css +1 -0
  327. package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  328. package/lib/zipBundle.js +25 -0
  329. package/lib/zipBundleImpl.js +5 -0
  330. package/package.json +44 -0
  331. package/types/protocol.d.ts +21571 -0
  332. package/types/structs.d.ts +45 -0
  333. package/types/types.d.ts +22519 -0
@@ -0,0 +1,583 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BrowserContext = void 0;
7
+ exports.prepareBrowserContextParams = prepareBrowserContextParams;
8
+ exports.toClientCertificatesProtocol = toClientCertificatesProtocol;
9
+ var _page = require("./page");
10
+ var _frame = require("./frame");
11
+ var network = _interopRequireWildcard(require("./network"));
12
+ var _fs = _interopRequireDefault(require("fs"));
13
+ var _path = _interopRequireDefault(require("path"));
14
+ var _channelOwner = require("./channelOwner");
15
+ var _clientHelper = require("./clientHelper");
16
+ var _browser = require("./browser");
17
+ var _worker = require("./worker");
18
+ var _events = require("./events");
19
+ var _timeoutSettings = require("../common/timeoutSettings");
20
+ var _waiter = require("./waiter");
21
+ var _utils = require("../utils");
22
+ var _cdpSession = require("./cdpSession");
23
+ var _tracing = require("./tracing");
24
+ var _artifact = require("./artifact");
25
+ var _fetch = require("./fetch");
26
+ var _stackTrace = require("../utils/stackTrace");
27
+ var _harRouter = require("./harRouter");
28
+ var _consoleMessage = require("./consoleMessage");
29
+ var _dialog = require("./dialog");
30
+ var _webError = require("./webError");
31
+ var _errors = require("./errors");
32
+ var _clock = require("./clock");
33
+ let _Symbol$asyncDispose;
34
+ /**
35
+ * Copyright 2017 Google Inc. All rights reserved.
36
+ * Modifications copyright (c) Microsoft Corporation.
37
+ *
38
+ * Licensed under the Apache License, Version 2.0 (the "License");
39
+ * you may not use this file except in compliance with the License.
40
+ * You may obtain a copy of the License at
41
+ *
42
+ * http://www.apache.org/licenses/LICENSE-2.0
43
+ *
44
+ * Unless required by applicable law or agreed to in writing, software
45
+ * distributed under the License is distributed on an "AS IS" BASIS,
46
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47
+ * See the License for the specific language governing permissions and
48
+ * limitations under the License.
49
+ */
50
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
51
+ 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); }
52
+ 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; }
53
+ _Symbol$asyncDispose = Symbol.asyncDispose;
54
+ class BrowserContext extends _channelOwner.ChannelOwner {
55
+ static from(context) {
56
+ return context._object;
57
+ }
58
+ static fromNullable(context) {
59
+ return context ? BrowserContext.from(context) : null;
60
+ }
61
+ constructor(parent, type, guid, initializer) {
62
+ var _this$_browser, _this$_browser2;
63
+ super(parent, type, guid, initializer);
64
+ this._pages = new Set();
65
+ this._routes = [];
66
+ this._webSocketRoutes = [];
67
+ this._browser = null;
68
+ this._browserType = void 0;
69
+ this._bindings = new Map();
70
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
71
+ this._ownerPage = void 0;
72
+ this._closedPromise = void 0;
73
+ this._options = {};
74
+ this.request = void 0;
75
+ this.tracing = void 0;
76
+ this.clock = void 0;
77
+ this._backgroundPages = new Set();
78
+ this._serviceWorkers = new Set();
79
+ this._isChromium = void 0;
80
+ this._harRecorders = new Map();
81
+ this._closeWasCalled = false;
82
+ this._closeReason = void 0;
83
+ this._harRouters = [];
84
+ this.routeInjecting = false;
85
+ if (parent instanceof _browser.Browser) this._browser = parent;
86
+ (_this$_browser = this._browser) === null || _this$_browser === void 0 || _this$_browser._contexts.add(this);
87
+ this._isChromium = ((_this$_browser2 = this._browser) === null || _this$_browser2 === void 0 ? void 0 : _this$_browser2._name) === 'chromium';
88
+ this.tracing = _tracing.Tracing.from(initializer.tracing);
89
+ this.request = _fetch.APIRequestContext.from(initializer.requestContext);
90
+ this.clock = new _clock.Clock(this);
91
+ this._channel.on('bindingCall', ({
92
+ binding
93
+ }) => this._onBinding(_page.BindingCall.from(binding)));
94
+ this._channel.on('close', () => this._onClose());
95
+ this._channel.on('page', ({
96
+ page
97
+ }) => this._onPage(_page.Page.from(page)));
98
+ this._channel.on('route', ({
99
+ route
100
+ }) => this._onRoute(network.Route.from(route)));
101
+ this._channel.on('webSocketRoute', ({
102
+ webSocketRoute
103
+ }) => this._onWebSocketRoute(network.WebSocketRoute.from(webSocketRoute)));
104
+ this._channel.on('backgroundPage', ({
105
+ page
106
+ }) => {
107
+ const backgroundPage = _page.Page.from(page);
108
+ this._backgroundPages.add(backgroundPage);
109
+ this.emit(_events.Events.BrowserContext.BackgroundPage, backgroundPage);
110
+ });
111
+ this._channel.on('serviceWorker', ({
112
+ worker
113
+ }) => {
114
+ const serviceWorker = _worker.Worker.from(worker);
115
+ serviceWorker._context = this;
116
+ this._serviceWorkers.add(serviceWorker);
117
+ this.emit(_events.Events.BrowserContext.ServiceWorker, serviceWorker);
118
+ });
119
+ this._channel.on('console', event => {
120
+ const consoleMessage = new _consoleMessage.ConsoleMessage(event);
121
+ this.emit(_events.Events.BrowserContext.Console, consoleMessage);
122
+ const page = consoleMessage.page();
123
+ if (page) page.emit(_events.Events.Page.Console, consoleMessage);
124
+ });
125
+ this._channel.on('pageError', ({
126
+ error,
127
+ page
128
+ }) => {
129
+ const pageObject = _page.Page.from(page);
130
+ const parsedError = (0, _errors.parseError)(error);
131
+ this.emit(_events.Events.BrowserContext.WebError, new _webError.WebError(pageObject, parsedError));
132
+ if (pageObject) pageObject.emit(_events.Events.Page.PageError, parsedError);
133
+ });
134
+ this._channel.on('dialog', ({
135
+ dialog
136
+ }) => {
137
+ const dialogObject = _dialog.Dialog.from(dialog);
138
+ let hasListeners = this.emit(_events.Events.BrowserContext.Dialog, dialogObject);
139
+ const page = dialogObject.page();
140
+ if (page) hasListeners = page.emit(_events.Events.Page.Dialog, dialogObject) || hasListeners;
141
+ if (!hasListeners) {
142
+ // Although we do similar handling on the server side, we still need this logic
143
+ // on the client side due to a possible race condition between two async calls:
144
+ // a) removing "dialog" listener subscription (client->server)
145
+ // b) actual "dialog" event (server->client)
146
+ if (dialogObject.type() === 'beforeunload') dialog.accept({}).catch(() => {});else dialog.dismiss().catch(() => {});
147
+ }
148
+ });
149
+ this._channel.on('request', ({
150
+ request,
151
+ page
152
+ }) => this._onRequest(network.Request.from(request), _page.Page.fromNullable(page)));
153
+ this._channel.on('requestFailed', ({
154
+ request,
155
+ failureText,
156
+ responseEndTiming,
157
+ page
158
+ }) => this._onRequestFailed(network.Request.from(request), responseEndTiming, failureText, _page.Page.fromNullable(page)));
159
+ this._channel.on('requestFinished', params => this._onRequestFinished(params));
160
+ this._channel.on('response', ({
161
+ response,
162
+ page
163
+ }) => this._onResponse(network.Response.from(response), _page.Page.fromNullable(page)));
164
+ this._closedPromise = new Promise(f => this.once(_events.Events.BrowserContext.Close, f));
165
+ this._setEventToSubscriptionMapping(new Map([[_events.Events.BrowserContext.Console, 'console'], [_events.Events.BrowserContext.Dialog, 'dialog'], [_events.Events.BrowserContext.Request, 'request'], [_events.Events.BrowserContext.Response, 'response'], [_events.Events.BrowserContext.RequestFinished, 'requestFinished'], [_events.Events.BrowserContext.RequestFailed, 'requestFailed']]));
166
+ }
167
+ _setOptions(contextOptions, browserOptions) {
168
+ this._options = contextOptions;
169
+ if (this._options.recordHar) this._harRecorders.set('', {
170
+ path: this._options.recordHar.path,
171
+ content: this._options.recordHar.content
172
+ });
173
+ this.tracing._tracesDir = browserOptions.tracesDir;
174
+ }
175
+ _onPage(page) {
176
+ this._pages.add(page);
177
+ this.emit(_events.Events.BrowserContext.Page, page);
178
+ if (page._opener && !page._opener.isClosed()) page._opener.emit(_events.Events.Page.Popup, page);
179
+ }
180
+ _onRequest(request, page) {
181
+ this.emit(_events.Events.BrowserContext.Request, request);
182
+ if (page) page.emit(_events.Events.Page.Request, request);
183
+ }
184
+ _onResponse(response, page) {
185
+ this.emit(_events.Events.BrowserContext.Response, response);
186
+ if (page) page.emit(_events.Events.Page.Response, response);
187
+ }
188
+ _onRequestFailed(request, responseEndTiming, failureText, page) {
189
+ request._failureText = failureText || null;
190
+ request._setResponseEndTiming(responseEndTiming);
191
+ this.emit(_events.Events.BrowserContext.RequestFailed, request);
192
+ if (page) page.emit(_events.Events.Page.RequestFailed, request);
193
+ }
194
+ _onRequestFinished(params) {
195
+ const {
196
+ responseEndTiming
197
+ } = params;
198
+ const request = network.Request.from(params.request);
199
+ const response = network.Response.fromNullable(params.response);
200
+ const page = _page.Page.fromNullable(params.page);
201
+ request._setResponseEndTiming(responseEndTiming);
202
+ this.emit(_events.Events.BrowserContext.RequestFinished, request);
203
+ if (page) page.emit(_events.Events.Page.RequestFinished, request);
204
+ if (response) response._finishedPromise.resolve(null);
205
+ }
206
+ async _onRoute(route) {
207
+ route._context = this;
208
+ const page = route.request()._safePage();
209
+ const routeHandlers = this._routes.slice();
210
+ for (const routeHandler of routeHandlers) {
211
+ // If the page or the context was closed we stall all requests right away.
212
+ if (page !== null && page !== void 0 && page._closeWasCalled || this._closeWasCalled) return;
213
+ if (!routeHandler.matches(route.request().url())) continue;
214
+ const index = this._routes.indexOf(routeHandler);
215
+ if (index === -1) continue;
216
+ if (routeHandler.willExpire()) this._routes.splice(index, 1);
217
+ const handled = await routeHandler.handle(route);
218
+ if (!this._routes.length) this._wrapApiCall(() => this._updateInterceptionPatterns(), true).catch(() => {});
219
+ if (handled) return;
220
+ }
221
+ // If the page is closed or unrouteAll() was called without waiting and interception disabled,
222
+ // the method will throw an error - silence it.
223
+ await route._innerContinue(true /* isFallback */).catch(() => {});
224
+ }
225
+ async _onWebSocketRoute(webSocketRoute) {
226
+ const routeHandler = this._webSocketRoutes.find(route => route.matches(webSocketRoute.url()));
227
+ if (routeHandler) await routeHandler.handle(webSocketRoute);else webSocketRoute.connectToServer();
228
+ }
229
+ async _onBinding(bindingCall) {
230
+ const func = this._bindings.get(bindingCall._initializer.name);
231
+ if (!func) return;
232
+ await bindingCall.call(func);
233
+ }
234
+ setDefaultNavigationTimeout(timeout) {
235
+ this._timeoutSettings.setDefaultNavigationTimeout(timeout);
236
+ this._wrapApiCall(async () => {
237
+ this._channel.setDefaultNavigationTimeoutNoReply({
238
+ timeout
239
+ }).catch(() => {});
240
+ }, true);
241
+ }
242
+ setDefaultTimeout(timeout) {
243
+ this._timeoutSettings.setDefaultTimeout(timeout);
244
+ this._wrapApiCall(async () => {
245
+ this._channel.setDefaultTimeoutNoReply({
246
+ timeout
247
+ }).catch(() => {});
248
+ }, true);
249
+ }
250
+ browser() {
251
+ return this._browser;
252
+ }
253
+ pages() {
254
+ return [...this._pages];
255
+ }
256
+ async newPage() {
257
+ if (this._ownerPage) throw new Error('Please use browser.newContext()');
258
+ return _page.Page.from((await this._channel.newPage()).page);
259
+ }
260
+ async cookies(urls) {
261
+ if (!urls) urls = [];
262
+ if (urls && typeof urls === 'string') urls = [urls];
263
+ return (await this._channel.cookies({
264
+ urls: urls
265
+ })).cookies;
266
+ }
267
+ async addCookies(cookies) {
268
+ await this._channel.addCookies({
269
+ cookies
270
+ });
271
+ }
272
+ async clearCookies(options = {}) {
273
+ await this._channel.clearCookies({
274
+ name: (0, _utils.isString)(options.name) ? options.name : undefined,
275
+ nameRegexSource: (0, _utils.isRegExp)(options.name) ? options.name.source : undefined,
276
+ nameRegexFlags: (0, _utils.isRegExp)(options.name) ? options.name.flags : undefined,
277
+ domain: (0, _utils.isString)(options.domain) ? options.domain : undefined,
278
+ domainRegexSource: (0, _utils.isRegExp)(options.domain) ? options.domain.source : undefined,
279
+ domainRegexFlags: (0, _utils.isRegExp)(options.domain) ? options.domain.flags : undefined,
280
+ path: (0, _utils.isString)(options.path) ? options.path : undefined,
281
+ pathRegexSource: (0, _utils.isRegExp)(options.path) ? options.path.source : undefined,
282
+ pathRegexFlags: (0, _utils.isRegExp)(options.path) ? options.path.flags : undefined
283
+ });
284
+ }
285
+ async grantPermissions(permissions, options) {
286
+ await this._channel.grantPermissions({
287
+ permissions,
288
+ ...options
289
+ });
290
+ }
291
+ async clearPermissions() {
292
+ await this._channel.clearPermissions();
293
+ }
294
+ async setGeolocation(geolocation) {
295
+ await this._channel.setGeolocation({
296
+ geolocation: geolocation || undefined
297
+ });
298
+ }
299
+ async setExtraHTTPHeaders(headers) {
300
+ network.validateHeaders(headers);
301
+ await this._channel.setExtraHTTPHeaders({
302
+ headers: (0, _utils.headersObjectToArray)(headers)
303
+ });
304
+ }
305
+ async setOffline(offline) {
306
+ await this._channel.setOffline({
307
+ offline
308
+ });
309
+ }
310
+ async setHTTPCredentials(httpCredentials) {
311
+ await this._channel.setHTTPCredentials({
312
+ httpCredentials: httpCredentials || undefined
313
+ });
314
+ }
315
+ async addInitScript(script, arg) {
316
+ await this.installInjectRoute();
317
+ const source = await (0, _clientHelper.evaluationScript)(script, arg);
318
+ await this._channel.addInitScript({
319
+ source
320
+ });
321
+ }
322
+ async exposeBinding(name, callback, options = {}) {
323
+ await this.installInjectRoute();
324
+ await this._channel.exposeBinding({
325
+ name,
326
+ needsHandle: options.handle
327
+ });
328
+ this._bindings.set(name, callback);
329
+ }
330
+ async exposeFunction(name, callback) {
331
+ await this.installInjectRoute();
332
+ await this._channel.exposeBinding({
333
+ name
334
+ });
335
+ const binding = (source, ...args) => callback(...args);
336
+ this._bindings.set(name, binding);
337
+ }
338
+ async route(url, handler, options = {}) {
339
+ this._routes.unshift(new network.RouteHandler(this._options.baseURL, url, handler, options.times));
340
+ await this._updateInterceptionPatterns();
341
+ }
342
+ async routeWebSocket(url, handler) {
343
+ this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));
344
+ await this._updateWebSocketInterceptionPatterns();
345
+ }
346
+ async _recordIntoHAR(har, page, options = {}) {
347
+ var _options$updateConten, _options$updateMode, _options$updateConten2;
348
+ const {
349
+ harId
350
+ } = await this._channel.harStart({
351
+ page: page === null || page === void 0 ? void 0 : page._channel,
352
+ options: prepareRecordHarOptions({
353
+ path: har,
354
+ content: (_options$updateConten = options.updateContent) !== null && _options$updateConten !== void 0 ? _options$updateConten : 'attach',
355
+ mode: (_options$updateMode = options.updateMode) !== null && _options$updateMode !== void 0 ? _options$updateMode : 'minimal',
356
+ urlFilter: options.url
357
+ })
358
+ });
359
+ this._harRecorders.set(harId, {
360
+ path: har,
361
+ content: (_options$updateConten2 = options.updateContent) !== null && _options$updateConten2 !== void 0 ? _options$updateConten2 : 'attach'
362
+ });
363
+ }
364
+ async routeFromHAR(har, options = {}) {
365
+ if (options.update) {
366
+ await this._recordIntoHAR(har, null, options);
367
+ return;
368
+ }
369
+ const harRouter = await _harRouter.HarRouter.create(this._connection.localUtils(), har, options.notFound || 'abort', {
370
+ urlMatch: options.url
371
+ });
372
+ this._harRouters.push(harRouter);
373
+ await harRouter.addContextRoute(this);
374
+ }
375
+ _disposeHarRouters() {
376
+ this._harRouters.forEach(router => router.dispose());
377
+ this._harRouters = [];
378
+ }
379
+ async unrouteAll(options) {
380
+ await this._unrouteInternal(this._routes, [], options === null || options === void 0 ? void 0 : options.behavior);
381
+ this._disposeHarRouters();
382
+ }
383
+ async unroute(url, handler) {
384
+ const removed = [];
385
+ const remaining = [];
386
+ for (const route of this._routes) {
387
+ if ((0, _utils.urlMatchesEqual)(route.url, url) && (!handler || route.handler === handler)) removed.push(route);else remaining.push(route);
388
+ }
389
+ await this._unrouteInternal(removed, remaining, 'default');
390
+ }
391
+ async _unrouteInternal(removed, remaining, behavior) {
392
+ this._routes = remaining;
393
+ await this._updateInterceptionPatterns();
394
+ if (!behavior || behavior === 'default') return;
395
+ const promises = removed.map(routeHandler => routeHandler.stop(behavior));
396
+ await Promise.all(promises);
397
+ }
398
+ async _updateInterceptionPatterns() {
399
+ const patterns = network.RouteHandler.prepareInterceptionPatterns(this._routes);
400
+ await this._channel.setNetworkInterceptionPatterns({
401
+ patterns
402
+ });
403
+ }
404
+ async _updateWebSocketInterceptionPatterns() {
405
+ const patterns = network.WebSocketRouteHandler.prepareInterceptionPatterns(this._webSocketRoutes);
406
+ await this._channel.setWebSocketInterceptionPatterns({
407
+ patterns
408
+ });
409
+ }
410
+ _effectiveCloseReason() {
411
+ var _this$_browser3;
412
+ return this._closeReason || ((_this$_browser3 = this._browser) === null || _this$_browser3 === void 0 ? void 0 : _this$_browser3._closeReason);
413
+ }
414
+ async waitForEvent(event, optionsOrPredicate = {}) {
415
+ return await this._wrapApiCall(async () => {
416
+ const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);
417
+ const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;
418
+ const waiter = _waiter.Waiter.createForEvent(this, event);
419
+ waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
420
+ if (event !== _events.Events.BrowserContext.Close) waiter.rejectOnEvent(this, _events.Events.BrowserContext.Close, () => new _errors.TargetClosedError(this._effectiveCloseReason()));
421
+ const result = await waiter.waitForEvent(this, event, predicate);
422
+ waiter.dispose();
423
+ return result;
424
+ });
425
+ }
426
+ async storageState(options = {}) {
427
+ const state = await this._channel.storageState();
428
+ if (options.path) {
429
+ await (0, _utils.mkdirIfNeeded)(options.path);
430
+ await _fs.default.promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8');
431
+ }
432
+ return state;
433
+ }
434
+ backgroundPages() {
435
+ return [...this._backgroundPages];
436
+ }
437
+ serviceWorkers() {
438
+ return [...this._serviceWorkers];
439
+ }
440
+ async newCDPSession(page) {
441
+ // channelOwner.ts's validation messages don't handle the pseudo-union type, so we're explicit here
442
+ if (!(page instanceof _page.Page) && !(page instanceof _frame.Frame)) throw new Error('page: expected Page or Frame');
443
+ const result = await this._channel.newCDPSession(page instanceof _page.Page ? {
444
+ page: page._channel
445
+ } : {
446
+ frame: page._channel
447
+ });
448
+ return _cdpSession.CDPSession.from(result.session);
449
+ }
450
+ _onClose() {
451
+ var _this$_browserType;
452
+ if (this._browser) this._browser._contexts.delete(this);
453
+ (_this$_browserType = this._browserType) === null || _this$_browserType === void 0 || (_this$_browserType = _this$_browserType._contexts) === null || _this$_browserType === void 0 || _this$_browserType.delete(this);
454
+ this._disposeHarRouters();
455
+ this.tracing._resetStackCounter();
456
+ this.emit(_events.Events.BrowserContext.Close, this);
457
+ }
458
+ async [_Symbol$asyncDispose]() {
459
+ await this.close();
460
+ }
461
+ async close(options = {}) {
462
+ if (this._closeWasCalled) return;
463
+ this._closeReason = options.reason;
464
+ this._closeWasCalled = true;
465
+ await this._wrapApiCall(async () => {
466
+ await this.request.dispose(options);
467
+ }, true);
468
+ await this._wrapApiCall(async () => {
469
+ var _this$_browserType2;
470
+ await ((_this$_browserType2 = this._browserType) === null || _this$_browserType2 === void 0 ? void 0 : _this$_browserType2._willCloseContext(this));
471
+ for (const [harId, harParams] of this._harRecorders) {
472
+ const har = await this._channel.harExport({
473
+ harId
474
+ });
475
+ const artifact = _artifact.Artifact.from(har.artifact);
476
+ // Server side will compress artifact if content is attach or if file is .zip.
477
+ const isCompressed = harParams.content === 'attach' || harParams.path.endsWith('.zip');
478
+ const needCompressed = harParams.path.endsWith('.zip');
479
+ if (isCompressed && !needCompressed) {
480
+ await artifact.saveAs(harParams.path + '.tmp');
481
+ await this._connection.localUtils()._channel.harUnzip({
482
+ zipFile: harParams.path + '.tmp',
483
+ harFile: harParams.path
484
+ });
485
+ } else {
486
+ await artifact.saveAs(harParams.path);
487
+ }
488
+ await artifact.delete();
489
+ }
490
+ }, true);
491
+ await this._channel.close(options);
492
+ await this._closedPromise;
493
+ }
494
+ async _enableRecorder(params) {
495
+ await this._channel.enableRecorder(params);
496
+ }
497
+ async installInjectRoute() {
498
+ if (this.routeInjecting) return;
499
+ await this.route('**/*', async route => {
500
+ if (route.request().resourceType() === 'document' && route.request().url().startsWith('http')) {
501
+ try {
502
+ const response = await route.fetch({
503
+ maxRedirects: 0
504
+ });
505
+ await route.fulfill({
506
+ response: response
507
+ });
508
+ } catch (e) {
509
+ await route.continue();
510
+ }
511
+ } else {
512
+ await route.continue();
513
+ }
514
+ });
515
+ this.routeInjecting = true;
516
+ }
517
+ }
518
+ exports.BrowserContext = BrowserContext;
519
+ async function prepareStorageState(options) {
520
+ if (typeof options.storageState !== 'string') return options.storageState;
521
+ try {
522
+ return JSON.parse(await _fs.default.promises.readFile(options.storageState, 'utf8'));
523
+ } catch (e) {
524
+ (0, _stackTrace.rewriteErrorMessage)(e, `Error reading storage state from ${options.storageState}:\n` + e.message);
525
+ throw e;
526
+ }
527
+ }
528
+ function prepareRecordHarOptions(options) {
529
+ if (!options) return;
530
+ return {
531
+ path: options.path,
532
+ content: options.content || (options.omitContent ? 'omit' : undefined),
533
+ urlGlob: (0, _utils.isString)(options.urlFilter) ? options.urlFilter : undefined,
534
+ urlRegexSource: (0, _utils.isRegExp)(options.urlFilter) ? options.urlFilter.source : undefined,
535
+ urlRegexFlags: (0, _utils.isRegExp)(options.urlFilter) ? options.urlFilter.flags : undefined,
536
+ mode: options.mode
537
+ };
538
+ }
539
+ async function prepareBrowserContextParams(options) {
540
+ if (options.videoSize && !options.videosPath) throw new Error(`"videoSize" option requires "videosPath" to be specified`);
541
+ if (options.extraHTTPHeaders) network.validateHeaders(options.extraHTTPHeaders);
542
+ const contextParams = {
543
+ ...options,
544
+ viewport: options.viewport === null ? undefined : options.viewport,
545
+ noDefaultViewport: options.viewport === null,
546
+ extraHTTPHeaders: options.extraHTTPHeaders ? (0, _utils.headersObjectToArray)(options.extraHTTPHeaders) : undefined,
547
+ storageState: await prepareStorageState(options),
548
+ serviceWorkers: options.serviceWorkers,
549
+ recordHar: prepareRecordHarOptions(options.recordHar),
550
+ colorScheme: options.colorScheme === null ? 'no-override' : options.colorScheme,
551
+ reducedMotion: options.reducedMotion === null ? 'no-override' : options.reducedMotion,
552
+ forcedColors: options.forcedColors === null ? 'no-override' : options.forcedColors,
553
+ acceptDownloads: toAcceptDownloadsProtocol(options.acceptDownloads),
554
+ clientCertificates: await toClientCertificatesProtocol(options.clientCertificates)
555
+ };
556
+ if (!contextParams.recordVideo && options.videosPath) {
557
+ contextParams.recordVideo = {
558
+ dir: options.videosPath,
559
+ size: options.videoSize
560
+ };
561
+ }
562
+ if (contextParams.recordVideo && contextParams.recordVideo.dir) contextParams.recordVideo.dir = _path.default.resolve(process.cwd(), contextParams.recordVideo.dir);
563
+ return contextParams;
564
+ }
565
+ function toAcceptDownloadsProtocol(acceptDownloads) {
566
+ if (acceptDownloads === undefined) return undefined;
567
+ if (acceptDownloads) return 'accept';
568
+ return 'deny';
569
+ }
570
+ async function toClientCertificatesProtocol(certs) {
571
+ if (!certs) return undefined;
572
+ const bufferizeContent = async (value, path) => {
573
+ if (value) return value;
574
+ if (path) return await _fs.default.promises.readFile(path);
575
+ };
576
+ return await Promise.all(certs.map(async cert => ({
577
+ origin: cert.origin,
578
+ cert: await bufferizeContent(cert.cert, cert.certPath),
579
+ key: await bufferizeContent(cert.key, cert.keyPath),
580
+ pfx: await bufferizeContent(cert.pfx, cert.pfxPath),
581
+ passphrase: cert.passphrase
582
+ })));
583
+ }