@checkly/playwright-core 1.51.17-beta.1 → 1.54.2-beta.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.
- package/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -36
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +90 -113
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-DrMbgOIo.js +0 -16684
- package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
- package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
- package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
- package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
- package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
- package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
- package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
- package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
- package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
- package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
- package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
- package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
- package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
|
@@ -1,122 +1,108 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
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 socksClientCertificatesInterceptor_exports = {};
|
|
30
|
+
__export(socksClientCertificatesInterceptor_exports, {
|
|
31
|
+
ClientCertificatesProxy: () => ClientCertificatesProxy,
|
|
32
|
+
getMatchingTLSOptionsForOrigin: () => getMatchingTLSOptionsForOrigin,
|
|
33
|
+
rewriteOpenSSLErrorIfNeeded: () => rewriteOpenSSLErrorIfNeeded
|
|
5
34
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
var _happyEyeballs = require("./utils/happyEyeballs");
|
|
20
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
-
/**
|
|
22
|
-
* Copyright (c) Microsoft Corporation.
|
|
23
|
-
*
|
|
24
|
-
* Licensed under the Apache License, Version 2.0 (the 'License");
|
|
25
|
-
* you may not use this file except in compliance with the License.
|
|
26
|
-
* You may obtain a copy of the License at
|
|
27
|
-
*
|
|
28
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
29
|
-
*
|
|
30
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
31
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
32
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
33
|
-
* See the License for the specific language governing permissions and
|
|
34
|
-
* limitations under the License.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
let dummyServerTlsOptions = undefined;
|
|
35
|
+
module.exports = __toCommonJS(socksClientCertificatesInterceptor_exports);
|
|
36
|
+
var import_events = require("events");
|
|
37
|
+
var import_http2 = __toESM(require("http2"));
|
|
38
|
+
var import_net = __toESM(require("net"));
|
|
39
|
+
var import_stream = __toESM(require("stream"));
|
|
40
|
+
var import_tls = __toESM(require("tls"));
|
|
41
|
+
var import_socksProxy = require("./utils/socksProxy");
|
|
42
|
+
var import_utils = require("../utils");
|
|
43
|
+
var import_browserContext = require("./browserContext");
|
|
44
|
+
var import_network = require("./utils/network");
|
|
45
|
+
var import_debugLogger = require("./utils/debugLogger");
|
|
46
|
+
var import_happyEyeballs = require("./utils/happyEyeballs");
|
|
47
|
+
let dummyServerTlsOptions = void 0;
|
|
38
48
|
function loadDummyServerCertsIfNeeded() {
|
|
39
|
-
if (dummyServerTlsOptions)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} = (0, _utils.generateSelfSignedCertificate)();
|
|
44
|
-
dummyServerTlsOptions = {
|
|
45
|
-
key,
|
|
46
|
-
cert
|
|
47
|
-
};
|
|
49
|
+
if (dummyServerTlsOptions)
|
|
50
|
+
return;
|
|
51
|
+
const { cert, key } = (0, import_utils.generateSelfSignedCertificate)();
|
|
52
|
+
dummyServerTlsOptions = { key, cert };
|
|
48
53
|
}
|
|
49
54
|
class ALPNCache {
|
|
50
55
|
constructor() {
|
|
51
|
-
this._cache = new Map();
|
|
56
|
+
this._cache = /* @__PURE__ */ new Map();
|
|
52
57
|
}
|
|
53
58
|
get(host, port, success) {
|
|
54
59
|
const cacheKey = `${host}:${port}`;
|
|
55
60
|
{
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
|
|
61
|
+
const result2 = this._cache.get(cacheKey);
|
|
62
|
+
if (result2) {
|
|
63
|
+
result2.then(success);
|
|
59
64
|
return;
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
|
-
const result = new
|
|
67
|
+
const result = new import_utils.ManualPromise();
|
|
63
68
|
this._cache.set(cacheKey, result);
|
|
64
69
|
result.then(success);
|
|
65
|
-
(0,
|
|
70
|
+
(0, import_happyEyeballs.createTLSSocket)({
|
|
66
71
|
host,
|
|
67
72
|
port,
|
|
68
|
-
servername:
|
|
69
|
-
ALPNProtocols: [
|
|
73
|
+
servername: import_net.default.isIP(host) ? void 0 : host,
|
|
74
|
+
ALPNProtocols: ["h2", "http/1.1"],
|
|
70
75
|
rejectUnauthorized: false
|
|
71
|
-
}).then(socket => {
|
|
72
|
-
|
|
73
|
-
result.resolve(socket.alpnProtocol || 'http/1.1');
|
|
76
|
+
}).then((socket) => {
|
|
77
|
+
result.resolve(socket.alpnProtocol || "http/1.1");
|
|
74
78
|
socket.end();
|
|
75
|
-
}).catch(error => {
|
|
76
|
-
|
|
77
|
-
result.resolve(
|
|
79
|
+
}).catch((error) => {
|
|
80
|
+
import_debugLogger.debugLogger.log("client-certificates", `ALPN error: ${error.message}`);
|
|
81
|
+
result.resolve("http/1.1");
|
|
78
82
|
});
|
|
79
83
|
}
|
|
80
84
|
}
|
|
81
85
|
class SocksProxyConnection {
|
|
82
86
|
constructor(socksProxy, uid, host, port) {
|
|
83
|
-
this.socksProxy = void 0;
|
|
84
|
-
this.uid = void 0;
|
|
85
|
-
this.host = void 0;
|
|
86
|
-
this.port = void 0;
|
|
87
87
|
this.firstPackageReceived = false;
|
|
88
|
-
this.target = void 0;
|
|
89
|
-
// In case of http, we just pipe data to the target socket and they are |undefined|.
|
|
90
|
-
this.internal = void 0;
|
|
91
|
-
this.internalTLS = void 0;
|
|
92
|
-
this._targetCloseEventListener = void 0;
|
|
93
|
-
this._dummyServer = void 0;
|
|
94
88
|
this._closed = false;
|
|
95
89
|
this.socksProxy = socksProxy;
|
|
96
90
|
this.uid = uid;
|
|
97
91
|
this.host = host;
|
|
98
92
|
this.port = port;
|
|
99
93
|
this._targetCloseEventListener = () => {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
this.
|
|
103
|
-
uid: this.uid
|
|
104
|
-
});
|
|
105
|
-
(_this$internalTLS = this.internalTLS) === null || _this$internalTLS === void 0 || _this$internalTLS.destroy();
|
|
106
|
-
(_this$_dummyServer = this._dummyServer) === null || _this$_dummyServer === void 0 || _this$_dummyServer.close();
|
|
94
|
+
this.socksProxy._socksProxy.sendSocketEnd({ uid: this.uid });
|
|
95
|
+
this.internalTLS?.destroy();
|
|
96
|
+
this._dummyServer?.close();
|
|
107
97
|
};
|
|
108
98
|
}
|
|
109
99
|
async connect() {
|
|
110
|
-
if (this.socksProxy.proxyAgentFromOptions)
|
|
111
|
-
host: rewriteToLocalhostIfNeeded(this.host),
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
this.target.once(
|
|
116
|
-
this.target.once('error', error => this.socksProxy._socksProxy.sendSocketError({
|
|
117
|
-
uid: this.uid,
|
|
118
|
-
error: error.message
|
|
119
|
-
}));
|
|
100
|
+
if (this.socksProxy.proxyAgentFromOptions)
|
|
101
|
+
this.target = await this.socksProxy.proxyAgentFromOptions.callback(new import_events.EventEmitter(), { host: rewriteToLocalhostIfNeeded(this.host), port: this.port, secureEndpoint: false });
|
|
102
|
+
else
|
|
103
|
+
this.target = await (0, import_happyEyeballs.createSocket)(rewriteToLocalhostIfNeeded(this.host), this.port);
|
|
104
|
+
this.target.once("close", this._targetCloseEventListener);
|
|
105
|
+
this.target.once("error", (error) => this.socksProxy._socksProxy.sendSocketError({ uid: this.uid, error: error.message }));
|
|
120
106
|
if (this._closed) {
|
|
121
107
|
this.target.destroy();
|
|
122
108
|
return;
|
|
@@ -128,83 +114,81 @@ class SocksProxyConnection {
|
|
|
128
114
|
});
|
|
129
115
|
}
|
|
130
116
|
onClose() {
|
|
131
|
-
var _this$internalTLS2, _this$_dummyServer2;
|
|
132
|
-
// Close the other end and cleanup TLS resources.
|
|
133
117
|
this.target.destroy();
|
|
134
|
-
|
|
135
|
-
|
|
118
|
+
this.internalTLS?.destroy();
|
|
119
|
+
this._dummyServer?.close();
|
|
136
120
|
this._closed = true;
|
|
137
121
|
}
|
|
138
122
|
onData(data) {
|
|
139
|
-
// HTTP / TLS are client-hello based protocols. This allows us to detect
|
|
140
|
-
// the protocol on the first package and attach appropriate listeners.
|
|
141
123
|
if (!this.firstPackageReceived) {
|
|
142
124
|
this.firstPackageReceived = true;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
data
|
|
147
|
-
}));
|
|
125
|
+
if (data[0] === 22)
|
|
126
|
+
this._attachTLSListeners();
|
|
127
|
+
else
|
|
128
|
+
this.target.on("data", (data2) => this.socksProxy._socksProxy.sendSocketData({ uid: this.uid, data: data2 }));
|
|
148
129
|
}
|
|
149
|
-
if (this.internal)
|
|
130
|
+
if (this.internal)
|
|
131
|
+
this.internal.push(data);
|
|
132
|
+
else
|
|
133
|
+
this.target.write(data);
|
|
150
134
|
}
|
|
151
135
|
_attachTLSListeners() {
|
|
152
|
-
this.internal = new
|
|
153
|
-
read: () => {
|
|
136
|
+
this.internal = new import_stream.default.Duplex({
|
|
137
|
+
read: () => {
|
|
138
|
+
},
|
|
154
139
|
write: (data, encoding, callback) => {
|
|
155
|
-
this.socksProxy._socksProxy.sendSocketData({
|
|
156
|
-
uid: this.uid,
|
|
157
|
-
data
|
|
158
|
-
});
|
|
140
|
+
this.socksProxy._socksProxy.sendSocketData({ uid: this.uid, data });
|
|
159
141
|
callback();
|
|
160
142
|
}
|
|
161
143
|
});
|
|
162
|
-
this.socksProxy.alpnCache.get(rewriteToLocalhostIfNeeded(this.host), this.port, alpnProtocolChosenByServer => {
|
|
163
|
-
|
|
164
|
-
if (this._closed)
|
|
165
|
-
|
|
144
|
+
this.socksProxy.alpnCache.get(rewriteToLocalhostIfNeeded(this.host), this.port, (alpnProtocolChosenByServer) => {
|
|
145
|
+
import_debugLogger.debugLogger.log("client-certificates", `Proxy->Target ${this.host}:${this.port} chooses ALPN ${alpnProtocolChosenByServer}`);
|
|
146
|
+
if (this._closed)
|
|
147
|
+
return;
|
|
148
|
+
this._dummyServer = import_tls.default.createServer({
|
|
166
149
|
...dummyServerTlsOptions,
|
|
167
|
-
ALPNProtocols: alpnProtocolChosenByServer ===
|
|
150
|
+
ALPNProtocols: alpnProtocolChosenByServer === "h2" ? ["h2", "http/1.1"] : ["http/1.1"]
|
|
168
151
|
});
|
|
169
|
-
this._dummyServer.emit(
|
|
170
|
-
this._dummyServer.once(
|
|
152
|
+
this._dummyServer.emit("connection", this.internal);
|
|
153
|
+
this._dummyServer.once("secureConnection", (internalTLS) => {
|
|
171
154
|
this.internalTLS = internalTLS;
|
|
172
|
-
|
|
173
|
-
let targetTLS =
|
|
174
|
-
const handleError = error => {
|
|
175
|
-
|
|
176
|
-
const responseBody = (0,
|
|
177
|
-
if (
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
// This means we call this._targetCloseEventListener manually.
|
|
183
|
-
this.target.removeListener('close', this._targetCloseEventListener);
|
|
184
|
-
// @ts-expect-error
|
|
185
|
-
const session = _http.default.performServerHandshake(internalTLS);
|
|
186
|
-
session.on('error', () => {
|
|
155
|
+
import_debugLogger.debugLogger.log("client-certificates", `Browser->Proxy ${this.host}:${this.port} chooses ALPN ${internalTLS.alpnProtocol}`);
|
|
156
|
+
let targetTLS = void 0;
|
|
157
|
+
const handleError = (error) => {
|
|
158
|
+
import_debugLogger.debugLogger.log("client-certificates", `error when connecting to target: ${error.message.replaceAll("\n", " ")}`);
|
|
159
|
+
const responseBody = (0, import_utils.escapeHTML)("Playwright client-certificate error: " + error.message).replaceAll("\n", " <br>");
|
|
160
|
+
if (internalTLS?.alpnProtocol === "h2") {
|
|
161
|
+
if ("performServerHandshake" in import_http2.default) {
|
|
162
|
+
this.target.removeListener("close", this._targetCloseEventListener);
|
|
163
|
+
const session = import_http2.default.performServerHandshake(internalTLS);
|
|
164
|
+
session.on("error", () => {
|
|
187
165
|
this.target.destroy();
|
|
188
166
|
this._targetCloseEventListener();
|
|
189
167
|
});
|
|
190
|
-
session.once(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
[
|
|
168
|
+
session.once("stream", (stream2) => {
|
|
169
|
+
stream2.respond({
|
|
170
|
+
"content-type": "text/html",
|
|
171
|
+
[import_http2.default.constants.HTTP2_HEADER_STATUS]: 503
|
|
194
172
|
});
|
|
195
173
|
const cleanup = () => {
|
|
196
174
|
session.close();
|
|
197
175
|
this.target.destroy();
|
|
198
176
|
this._targetCloseEventListener();
|
|
199
177
|
};
|
|
200
|
-
|
|
201
|
-
|
|
178
|
+
stream2.end(responseBody, cleanup);
|
|
179
|
+
stream2.once("error", cleanup);
|
|
202
180
|
});
|
|
203
181
|
} else {
|
|
204
182
|
this.target.destroy();
|
|
205
183
|
}
|
|
206
184
|
} else {
|
|
207
|
-
internalTLS.end([
|
|
185
|
+
internalTLS.end([
|
|
186
|
+
"HTTP/1.1 503 Internal Server Error",
|
|
187
|
+
"Content-Type: text/html; charset=utf-8",
|
|
188
|
+
"Content-Length: " + Buffer.byteLength(responseBody),
|
|
189
|
+
"",
|
|
190
|
+
responseBody
|
|
191
|
+
].join("\r\n"));
|
|
208
192
|
this.target.destroy();
|
|
209
193
|
}
|
|
210
194
|
};
|
|
@@ -212,94 +196,83 @@ class SocksProxyConnection {
|
|
|
212
196
|
internalTLS.destroy();
|
|
213
197
|
return;
|
|
214
198
|
}
|
|
215
|
-
targetTLS =
|
|
199
|
+
targetTLS = import_tls.default.connect({
|
|
216
200
|
socket: this.target,
|
|
217
201
|
host: this.host,
|
|
218
202
|
port: this.port,
|
|
219
203
|
rejectUnauthorized: !this.socksProxy.ignoreHTTPSErrors,
|
|
220
|
-
ALPNProtocols: [internalTLS.alpnProtocol ||
|
|
221
|
-
servername: !
|
|
204
|
+
ALPNProtocols: [internalTLS.alpnProtocol || "http/1.1"],
|
|
205
|
+
servername: !import_net.default.isIP(this.host) ? this.host : void 0,
|
|
222
206
|
secureContext: this.socksProxy.secureContextMap.get(new URL(`https://${this.host}:${this.port}`).origin)
|
|
223
207
|
});
|
|
224
|
-
targetTLS.once(
|
|
208
|
+
targetTLS.once("secureConnect", () => {
|
|
225
209
|
internalTLS.pipe(targetTLS);
|
|
226
210
|
targetTLS.pipe(internalTLS);
|
|
227
211
|
});
|
|
228
|
-
internalTLS.once(
|
|
229
|
-
targetTLS.once(
|
|
212
|
+
internalTLS.once("error", () => this.target.destroy());
|
|
213
|
+
targetTLS.once("error", handleError);
|
|
230
214
|
});
|
|
231
215
|
});
|
|
232
216
|
}
|
|
233
217
|
}
|
|
234
218
|
class ClientCertificatesProxy {
|
|
235
219
|
constructor(contextOptions) {
|
|
236
|
-
this.
|
|
237
|
-
this.
|
|
238
|
-
|
|
239
|
-
this.secureContextMap = new Map();
|
|
240
|
-
this.alpnCache = void 0;
|
|
241
|
-
this.proxyAgentFromOptions = void 0;
|
|
242
|
-
(0, _browserContext.verifyClientCertificates)(contextOptions.clientCertificates);
|
|
220
|
+
this._connections = /* @__PURE__ */ new Map();
|
|
221
|
+
this.secureContextMap = /* @__PURE__ */ new Map();
|
|
222
|
+
(0, import_browserContext.verifyClientCertificates)(contextOptions.clientCertificates);
|
|
243
223
|
this.alpnCache = new ALPNCache();
|
|
244
224
|
this.ignoreHTTPSErrors = contextOptions.ignoreHTTPSErrors;
|
|
245
|
-
this.proxyAgentFromOptions =
|
|
225
|
+
this.proxyAgentFromOptions = (0, import_network.createProxyAgent)(contextOptions.proxy);
|
|
246
226
|
this._initSecureContexts(contextOptions.clientCertificates);
|
|
247
|
-
this._socksProxy = new
|
|
248
|
-
this._socksProxy.setPattern(
|
|
249
|
-
this._socksProxy.addListener(
|
|
227
|
+
this._socksProxy = new import_socksProxy.SocksProxy();
|
|
228
|
+
this._socksProxy.setPattern("*");
|
|
229
|
+
this._socksProxy.addListener(import_socksProxy.SocksProxy.Events.SocksRequested, async (payload) => {
|
|
250
230
|
try {
|
|
251
231
|
const connection = new SocksProxyConnection(this, payload.uid, payload.host, payload.port);
|
|
252
232
|
await connection.connect();
|
|
253
233
|
this._connections.set(payload.uid, connection);
|
|
254
234
|
} catch (error) {
|
|
255
|
-
this._socksProxy.socketFailed({
|
|
256
|
-
uid: payload.uid,
|
|
257
|
-
errorCode: error.code
|
|
258
|
-
});
|
|
235
|
+
this._socksProxy.socketFailed({ uid: payload.uid, errorCode: error.code });
|
|
259
236
|
}
|
|
260
237
|
});
|
|
261
|
-
this._socksProxy.addListener(
|
|
262
|
-
|
|
263
|
-
(_this$_connections$ge = this._connections.get(payload.uid)) === null || _this$_connections$ge === void 0 || _this$_connections$ge.onData(payload.data);
|
|
238
|
+
this._socksProxy.addListener(import_socksProxy.SocksProxy.Events.SocksData, async (payload) => {
|
|
239
|
+
this._connections.get(payload.uid)?.onData(payload.data);
|
|
264
240
|
});
|
|
265
|
-
this._socksProxy.addListener(
|
|
266
|
-
|
|
267
|
-
(_this$_connections$ge2 = this._connections.get(payload.uid)) === null || _this$_connections$ge2 === void 0 || _this$_connections$ge2.onClose();
|
|
241
|
+
this._socksProxy.addListener(import_socksProxy.SocksProxy.Events.SocksClosed, (payload) => {
|
|
242
|
+
this._connections.get(payload.uid)?.onClose();
|
|
268
243
|
this._connections.delete(payload.uid);
|
|
269
244
|
});
|
|
270
245
|
loadDummyServerCertsIfNeeded();
|
|
271
246
|
}
|
|
272
247
|
_initSecureContexts(clientCertificates) {
|
|
273
|
-
|
|
274
|
-
const origin2certs = new Map();
|
|
248
|
+
const origin2certs = /* @__PURE__ */ new Map();
|
|
275
249
|
for (const cert of clientCertificates || []) {
|
|
276
250
|
const origin = normalizeOrigin(cert.origin);
|
|
277
251
|
const certs = origin2certs.get(origin) || [];
|
|
278
252
|
certs.push(cert);
|
|
279
253
|
origin2certs.set(origin, certs);
|
|
280
254
|
}
|
|
281
|
-
|
|
282
|
-
// Step 2. Create secure contexts for each origin.
|
|
283
255
|
for (const [origin, certs] of origin2certs) {
|
|
284
256
|
try {
|
|
285
|
-
this.secureContextMap.set(origin,
|
|
257
|
+
this.secureContextMap.set(origin, import_tls.default.createSecureContext(convertClientCertificatesToTLSOptions(certs)));
|
|
286
258
|
} catch (error) {
|
|
287
259
|
error = rewriteOpenSSLErrorIfNeeded(error);
|
|
288
|
-
throw (0,
|
|
260
|
+
throw (0, import_utils.rewriteErrorMessage)(error, `Failed to load client certificate: ${error.message}`);
|
|
289
261
|
}
|
|
290
262
|
}
|
|
291
263
|
}
|
|
292
|
-
async
|
|
293
|
-
const
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
264
|
+
static async create(contextOptions) {
|
|
265
|
+
const proxy = new ClientCertificatesProxy(contextOptions);
|
|
266
|
+
await proxy._socksProxy.listen(0, "127.0.0.1");
|
|
267
|
+
return proxy;
|
|
268
|
+
}
|
|
269
|
+
proxySettings() {
|
|
270
|
+
return { server: `socks5://127.0.0.1:${this._socksProxy.port()}` };
|
|
297
271
|
}
|
|
298
272
|
async close() {
|
|
299
273
|
await this._socksProxy.close();
|
|
300
274
|
}
|
|
301
275
|
}
|
|
302
|
-
exports.ClientCertificatesProxy = ClientCertificatesProxy;
|
|
303
276
|
function normalizeOrigin(origin) {
|
|
304
277
|
try {
|
|
305
278
|
return new URL(origin).origin;
|
|
@@ -308,33 +281,45 @@ function normalizeOrigin(origin) {
|
|
|
308
281
|
}
|
|
309
282
|
}
|
|
310
283
|
function convertClientCertificatesToTLSOptions(clientCertificates) {
|
|
311
|
-
if (!clientCertificates || !clientCertificates.length)
|
|
284
|
+
if (!clientCertificates || !clientCertificates.length)
|
|
285
|
+
return;
|
|
312
286
|
const tlsOptions = {
|
|
313
287
|
pfx: [],
|
|
314
288
|
key: [],
|
|
315
289
|
cert: []
|
|
316
290
|
};
|
|
317
291
|
for (const cert of clientCertificates) {
|
|
318
|
-
if (cert.cert)
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
passphrase: cert.passphrase
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
buf: cert.pfx,
|
|
325
|
-
passphrase: cert.passphrase
|
|
326
|
-
});
|
|
292
|
+
if (cert.cert)
|
|
293
|
+
tlsOptions.cert.push(cert.cert);
|
|
294
|
+
if (cert.key)
|
|
295
|
+
tlsOptions.key.push({ pem: cert.key, passphrase: cert.passphrase });
|
|
296
|
+
if (cert.pfx)
|
|
297
|
+
tlsOptions.pfx.push({ buf: cert.pfx, passphrase: cert.passphrase });
|
|
327
298
|
}
|
|
328
299
|
return tlsOptions;
|
|
329
300
|
}
|
|
330
301
|
function getMatchingTLSOptionsForOrigin(clientCertificates, origin) {
|
|
331
|
-
const matchingCerts = clientCertificates
|
|
302
|
+
const matchingCerts = clientCertificates?.filter(
|
|
303
|
+
(c) => normalizeOrigin(c.origin) === origin
|
|
304
|
+
);
|
|
332
305
|
return convertClientCertificatesToTLSOptions(matchingCerts);
|
|
333
306
|
}
|
|
334
307
|
function rewriteToLocalhostIfNeeded(host) {
|
|
335
|
-
return host ===
|
|
308
|
+
return host === "local.playwright" ? "localhost" : host;
|
|
336
309
|
}
|
|
337
310
|
function rewriteOpenSSLErrorIfNeeded(error) {
|
|
338
|
-
if (error.message !==
|
|
339
|
-
|
|
340
|
-
|
|
311
|
+
if (error.message !== "unsupported" && error.code !== "ERR_CRYPTO_UNSUPPORTED_OPERATION")
|
|
312
|
+
return error;
|
|
313
|
+
return (0, import_utils.rewriteErrorMessage)(error, [
|
|
314
|
+
"Unsupported TLS certificate.",
|
|
315
|
+
"Most likely, the security algorithm of the given certificate was deprecated by OpenSSL.",
|
|
316
|
+
"For more details, see https://github.com/openssl/openssl/blob/master/README-PROVIDERS.md#the-legacy-provider",
|
|
317
|
+
"You could probably modernize the certificate by following the steps at https://github.com/nodejs/node/issues/40672#issuecomment-1243648223"
|
|
318
|
+
].join("\n"));
|
|
319
|
+
}
|
|
320
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
321
|
+
0 && (module.exports = {
|
|
322
|
+
ClientCertificatesProxy,
|
|
323
|
+
getMatchingTLSOptionsForOrigin,
|
|
324
|
+
rewriteOpenSSLErrorIfNeeded
|
|
325
|
+
});
|