@checkly/playwright-core 1.51.17-beta.2 → 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 -35
- 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-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
package/lib/client/network.js
CHANGED
|
@@ -1,60 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var network_exports = {};
|
|
20
|
+
__export(network_exports, {
|
|
21
|
+
RawHeaders: () => RawHeaders,
|
|
22
|
+
Request: () => Request,
|
|
23
|
+
Response: () => Response,
|
|
24
|
+
Route: () => Route,
|
|
25
|
+
RouteHandler: () => RouteHandler,
|
|
26
|
+
WebSocket: () => WebSocket,
|
|
27
|
+
WebSocketRoute: () => WebSocketRoute,
|
|
28
|
+
WebSocketRouteHandler: () => WebSocketRouteHandler,
|
|
29
|
+
validateHeaders: () => validateHeaders
|
|
5
30
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Copyright (c) Microsoft Corporation.
|
|
25
|
-
*
|
|
26
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
27
|
-
* you may not use this file except in compliance with the License.
|
|
28
|
-
* You may obtain a copy of the License at
|
|
29
|
-
*
|
|
30
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
31
|
-
*
|
|
32
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
33
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
34
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
35
|
-
* See the License for the specific language governing permissions and
|
|
36
|
-
* limitations under the License.
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
|
-
class Request extends _channelOwner.ChannelOwner {
|
|
40
|
-
static from(request) {
|
|
41
|
-
return request._object;
|
|
42
|
-
}
|
|
43
|
-
static fromNullable(request) {
|
|
44
|
-
return request ? Request.from(request) : null;
|
|
45
|
-
}
|
|
31
|
+
module.exports = __toCommonJS(network_exports);
|
|
32
|
+
var import_channelOwner = require("./channelOwner");
|
|
33
|
+
var import_errors = require("./errors");
|
|
34
|
+
var import_events = require("./events");
|
|
35
|
+
var import_fetch = require("./fetch");
|
|
36
|
+
var import_frame = require("./frame");
|
|
37
|
+
var import_waiter = require("./waiter");
|
|
38
|
+
var import_worker = require("./worker");
|
|
39
|
+
var import_assert = require("../utils/isomorphic/assert");
|
|
40
|
+
var import_headers = require("../utils/isomorphic/headers");
|
|
41
|
+
var import_urlMatch = require("../utils/isomorphic/urlMatch");
|
|
42
|
+
var import_manualPromise = require("../utils/isomorphic/manualPromise");
|
|
43
|
+
var import_multimap = require("../utils/isomorphic/multimap");
|
|
44
|
+
var import_rtti = require("../utils/isomorphic/rtti");
|
|
45
|
+
var import_stackTrace = require("../utils/isomorphic/stackTrace");
|
|
46
|
+
var import_mimeType = require("../utils/isomorphic/mimeType");
|
|
47
|
+
class Request extends import_channelOwner.ChannelOwner {
|
|
46
48
|
constructor(parent, type, guid, initializer) {
|
|
47
49
|
super(parent, type, guid, initializer);
|
|
48
50
|
this._redirectedFrom = null;
|
|
49
51
|
this._redirectedTo = null;
|
|
50
52
|
this._failureText = null;
|
|
51
|
-
this._provisionalHeaders = void 0;
|
|
52
|
-
this._actualHeadersPromise = void 0;
|
|
53
|
-
this._timing = void 0;
|
|
54
53
|
this._fallbackOverrides = {};
|
|
55
|
-
this.markAsInternalType();
|
|
56
54
|
this._redirectedFrom = Request.fromNullable(initializer.redirectedFrom);
|
|
57
|
-
if (this._redirectedFrom)
|
|
55
|
+
if (this._redirectedFrom)
|
|
56
|
+
this._redirectedFrom._redirectedTo = this;
|
|
58
57
|
this._provisionalHeaders = new RawHeaders(initializer.headers);
|
|
59
58
|
this._timing = {
|
|
60
59
|
startTime: 0,
|
|
@@ -68,6 +67,12 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
68
67
|
responseEnd: -1
|
|
69
68
|
};
|
|
70
69
|
}
|
|
70
|
+
static from(request) {
|
|
71
|
+
return request._object;
|
|
72
|
+
}
|
|
73
|
+
static fromNullable(request) {
|
|
74
|
+
return request ? Request.from(request) : null;
|
|
75
|
+
}
|
|
71
76
|
url() {
|
|
72
77
|
return this._fallbackOverrides.url || this._initializer.url;
|
|
73
78
|
}
|
|
@@ -78,42 +83,44 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
78
83
|
return this._fallbackOverrides.method || this._initializer.method;
|
|
79
84
|
}
|
|
80
85
|
postData() {
|
|
81
|
-
|
|
82
|
-
return ((_ref = this._fallbackOverrides.postDataBuffer || this._initializer.postData) === null || _ref === void 0 ? void 0 : _ref.toString('utf-8')) || null;
|
|
86
|
+
return (this._fallbackOverrides.postDataBuffer || this._initializer.postData)?.toString("utf-8") || null;
|
|
83
87
|
}
|
|
84
88
|
postDataBuffer() {
|
|
85
89
|
return this._fallbackOverrides.postDataBuffer || this._initializer.postData || null;
|
|
86
90
|
}
|
|
87
91
|
postDataJSON() {
|
|
88
92
|
const postData = this.postData();
|
|
89
|
-
if (!postData)
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
if (!postData)
|
|
94
|
+
return null;
|
|
95
|
+
const contentType = this.headers()["content-type"];
|
|
96
|
+
if (contentType?.includes("application/x-www-form-urlencoded")) {
|
|
92
97
|
const entries = {};
|
|
93
98
|
const parsed = new URLSearchParams(postData);
|
|
94
|
-
for (const [k, v] of parsed.entries())
|
|
99
|
+
for (const [k, v] of parsed.entries())
|
|
100
|
+
entries[k] = v;
|
|
95
101
|
return entries;
|
|
96
102
|
}
|
|
97
103
|
try {
|
|
98
104
|
return JSON.parse(postData);
|
|
99
105
|
} catch (e) {
|
|
100
|
-
throw new Error(
|
|
106
|
+
throw new Error("POST data is not a valid JSON object: " + postData);
|
|
101
107
|
}
|
|
102
108
|
}
|
|
103
|
-
|
|
104
109
|
/**
|
|
105
110
|
* @deprecated
|
|
106
111
|
*/
|
|
107
112
|
headers() {
|
|
108
|
-
if (this._fallbackOverrides.headers)
|
|
113
|
+
if (this._fallbackOverrides.headers)
|
|
114
|
+
return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers).headers();
|
|
109
115
|
return this._provisionalHeaders.headers();
|
|
110
116
|
}
|
|
111
117
|
async _actualHeaders() {
|
|
112
|
-
if (this._fallbackOverrides.headers)
|
|
118
|
+
if (this._fallbackOverrides.headers)
|
|
119
|
+
return RawHeaders._fromHeadersObjectLossy(this._fallbackOverrides.headers);
|
|
113
120
|
if (!this._actualHeadersPromise) {
|
|
114
121
|
this._actualHeadersPromise = this._wrapApiCall(async () => {
|
|
115
122
|
return new RawHeaders((await this._channel.rawRequestHeaders()).headers);
|
|
116
|
-
});
|
|
123
|
+
}, { internal: true });
|
|
117
124
|
}
|
|
118
125
|
return await this._actualHeadersPromise;
|
|
119
126
|
}
|
|
@@ -130,27 +137,28 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
130
137
|
return Response.fromNullable((await this._channel.response()).response);
|
|
131
138
|
}
|
|
132
139
|
async _internalResponse() {
|
|
133
|
-
return await this.
|
|
134
|
-
return Response.fromNullable((await this._channel.response()).response);
|
|
135
|
-
}, true);
|
|
140
|
+
return Response.fromNullable((await this._channel.response()).response);
|
|
136
141
|
}
|
|
137
142
|
frame() {
|
|
138
143
|
if (!this._initializer.frame) {
|
|
139
|
-
(0,
|
|
140
|
-
throw new Error(
|
|
144
|
+
(0, import_assert.assert)(this.serviceWorker());
|
|
145
|
+
throw new Error("Service Worker requests do not have an associated frame.");
|
|
141
146
|
}
|
|
142
|
-
const frame =
|
|
147
|
+
const frame = import_frame.Frame.from(this._initializer.frame);
|
|
143
148
|
if (!frame._page) {
|
|
144
|
-
throw new Error([
|
|
149
|
+
throw new Error([
|
|
150
|
+
"Frame for this navigation request is not available, because the request",
|
|
151
|
+
"was issued before the frame is created. You can check whether the request",
|
|
152
|
+
"is a navigation request by calling isNavigationRequest() method."
|
|
153
|
+
].join("\n"));
|
|
145
154
|
}
|
|
146
155
|
return frame;
|
|
147
156
|
}
|
|
148
157
|
_safePage() {
|
|
149
|
-
|
|
150
|
-
return ((_Frame$fromNullable = _frame.Frame.fromNullable(this._initializer.frame)) === null || _Frame$fromNullable === void 0 ? void 0 : _Frame$fromNullable._page) || null;
|
|
158
|
+
return import_frame.Frame.fromNullable(this._initializer.frame)?._page || null;
|
|
151
159
|
}
|
|
152
160
|
serviceWorker() {
|
|
153
|
-
return this._initializer.serviceWorker ?
|
|
161
|
+
return this._initializer.serviceWorker ? import_worker.Worker.from(this._initializer.serviceWorker) : null;
|
|
154
162
|
}
|
|
155
163
|
isNavigationRequest() {
|
|
156
164
|
return this._initializer.isNavigationRequest;
|
|
@@ -162,7 +170,8 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
162
170
|
return this._redirectedTo;
|
|
163
171
|
}
|
|
164
172
|
failure() {
|
|
165
|
-
if (this._failureText === null)
|
|
173
|
+
if (this._failureText === null)
|
|
174
|
+
return null;
|
|
166
175
|
return {
|
|
167
176
|
errorText: this._failureText
|
|
168
177
|
};
|
|
@@ -172,53 +181,56 @@ class Request extends _channelOwner.ChannelOwner {
|
|
|
172
181
|
}
|
|
173
182
|
async sizes() {
|
|
174
183
|
const response = await this.response();
|
|
175
|
-
if (!response)
|
|
184
|
+
if (!response)
|
|
185
|
+
throw new Error("Unable to fetch sizes for failed request");
|
|
176
186
|
return (await response._channel.sizes()).sizes;
|
|
177
187
|
}
|
|
178
188
|
_setResponseEndTiming(responseEndTiming) {
|
|
179
189
|
this._timing.responseEnd = responseEndTiming;
|
|
180
|
-
if (this._timing.responseStart === -1)
|
|
190
|
+
if (this._timing.responseStart === -1)
|
|
191
|
+
this._timing.responseStart = responseEndTiming;
|
|
181
192
|
}
|
|
182
193
|
_finalRequest() {
|
|
183
194
|
return this._redirectedTo ? this._redirectedTo._finalRequest() : this;
|
|
184
195
|
}
|
|
185
196
|
_applyFallbackOverrides(overrides) {
|
|
186
|
-
if (overrides.url)
|
|
187
|
-
|
|
188
|
-
if (overrides.
|
|
189
|
-
|
|
197
|
+
if (overrides.url)
|
|
198
|
+
this._fallbackOverrides.url = overrides.url;
|
|
199
|
+
if (overrides.method)
|
|
200
|
+
this._fallbackOverrides.method = overrides.method;
|
|
201
|
+
if (overrides.headers)
|
|
202
|
+
this._fallbackOverrides.headers = overrides.headers;
|
|
203
|
+
if ((0, import_rtti.isString)(overrides.postData))
|
|
204
|
+
this._fallbackOverrides.postDataBuffer = Buffer.from(overrides.postData, "utf-8");
|
|
205
|
+
else if (overrides.postData instanceof Buffer)
|
|
206
|
+
this._fallbackOverrides.postDataBuffer = overrides.postData;
|
|
207
|
+
else if (overrides.postData)
|
|
208
|
+
this._fallbackOverrides.postDataBuffer = Buffer.from(JSON.stringify(overrides.postData), "utf-8");
|
|
190
209
|
}
|
|
191
210
|
_fallbackOverridesForContinue() {
|
|
192
211
|
return this._fallbackOverrides;
|
|
193
212
|
}
|
|
194
213
|
_targetClosedScope() {
|
|
195
|
-
|
|
196
|
-
return ((_this$serviceWorker = this.serviceWorker()) === null || _this$serviceWorker === void 0 ? void 0 : _this$serviceWorker._closedScope) || ((_this$_safePage = this._safePage()) === null || _this$_safePage === void 0 ? void 0 : _this$_safePage._closedOrCrashedScope) || new _manualPromise.LongStandingScope();
|
|
214
|
+
return this.serviceWorker()?._closedScope || this._safePage()?._closedOrCrashedScope || new import_manualPromise.LongStandingScope();
|
|
197
215
|
}
|
|
198
216
|
}
|
|
199
|
-
|
|
200
|
-
class Route extends _channelOwner.ChannelOwner {
|
|
201
|
-
static from(route) {
|
|
202
|
-
return route._object;
|
|
203
|
-
}
|
|
217
|
+
class Route extends import_channelOwner.ChannelOwner {
|
|
204
218
|
constructor(parent, type, guid, initializer) {
|
|
205
219
|
super(parent, type, guid, initializer);
|
|
206
220
|
this._handlingPromise = null;
|
|
207
|
-
this._context = void 0;
|
|
208
221
|
this._didThrow = false;
|
|
209
|
-
|
|
222
|
+
}
|
|
223
|
+
static from(route) {
|
|
224
|
+
return route._object;
|
|
210
225
|
}
|
|
211
226
|
request() {
|
|
212
227
|
return Request.from(this._initializer.request);
|
|
213
228
|
}
|
|
214
229
|
async _raceWithTargetClose(promise) {
|
|
215
|
-
// When page closes or crashes, we catch any potential rejects from this Route.
|
|
216
|
-
// Note that page could be missing when routing popup's initial request that
|
|
217
|
-
// does not have a Page initialized just yet.
|
|
218
230
|
return await this.request()._targetClosedScope().safeRace(promise);
|
|
219
231
|
}
|
|
220
232
|
async _startHandling() {
|
|
221
|
-
this._handlingPromise = new
|
|
233
|
+
this._handlingPromise = new import_manualPromise.ManualPromise();
|
|
222
234
|
return await this._handlingPromise;
|
|
223
235
|
}
|
|
224
236
|
async fallback(options = {}) {
|
|
@@ -228,32 +240,22 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
228
240
|
}
|
|
229
241
|
async abort(errorCode) {
|
|
230
242
|
await this._handleRoute(async () => {
|
|
231
|
-
await this._raceWithTargetClose(this._channel.abort({
|
|
232
|
-
errorCode
|
|
233
|
-
}));
|
|
243
|
+
await this._raceWithTargetClose(this._channel.abort({ errorCode }));
|
|
234
244
|
});
|
|
235
245
|
}
|
|
236
246
|
async _redirectNavigationRequest(url) {
|
|
237
247
|
await this._handleRoute(async () => {
|
|
238
|
-
await this._raceWithTargetClose(this._channel.redirectNavigationRequest({
|
|
239
|
-
url
|
|
240
|
-
}));
|
|
248
|
+
await this._raceWithTargetClose(this._channel.redirectNavigationRequest({ url }));
|
|
241
249
|
});
|
|
242
250
|
}
|
|
243
251
|
async fetch(options = {}) {
|
|
244
252
|
return await this._wrapApiCall(async () => {
|
|
245
|
-
return await this._context.request._innerFetch({
|
|
246
|
-
request: this.request(),
|
|
247
|
-
data: options.postData,
|
|
248
|
-
...options
|
|
249
|
-
});
|
|
253
|
+
return await this._context.request._innerFetch({ request: this.request(), data: options.postData, ...options });
|
|
250
254
|
});
|
|
251
255
|
}
|
|
252
256
|
async fulfill(options = {}) {
|
|
253
257
|
await this._handleRoute(async () => {
|
|
254
|
-
await this.
|
|
255
|
-
await this._innerFulfill(options);
|
|
256
|
-
});
|
|
258
|
+
await this._innerFulfill(options);
|
|
257
259
|
});
|
|
258
260
|
}
|
|
259
261
|
async _handleRoute(callback) {
|
|
@@ -268,44 +270,50 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
268
270
|
}
|
|
269
271
|
async _innerFulfill(options = {}) {
|
|
270
272
|
let fetchResponseUid;
|
|
271
|
-
let {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
body
|
|
275
|
-
} = options;
|
|
276
|
-
if (options.json !== undefined) {
|
|
277
|
-
(0, _assert.assert)(options.body === undefined, 'Can specify either body or json parameters');
|
|
273
|
+
let { status: statusOption, headers: headersOption, body } = options;
|
|
274
|
+
if (options.json !== void 0) {
|
|
275
|
+
(0, import_assert.assert)(options.body === void 0, "Can specify either body or json parameters");
|
|
278
276
|
body = JSON.stringify(options.json);
|
|
279
277
|
}
|
|
280
|
-
if (options.response instanceof
|
|
281
|
-
statusOption
|
|
282
|
-
headersOption
|
|
283
|
-
if (body ===
|
|
284
|
-
if (options.response._request._connection === this._connection)
|
|
278
|
+
if (options.response instanceof import_fetch.APIResponse) {
|
|
279
|
+
statusOption ??= options.response.status();
|
|
280
|
+
headersOption ??= options.response.headers();
|
|
281
|
+
if (body === void 0 && options.path === void 0) {
|
|
282
|
+
if (options.response._request._connection === this._connection)
|
|
283
|
+
fetchResponseUid = options.response._fetchUid();
|
|
284
|
+
else
|
|
285
|
+
body = await options.response.body();
|
|
285
286
|
}
|
|
286
287
|
}
|
|
287
288
|
let isBase64 = false;
|
|
288
289
|
let length = 0;
|
|
289
290
|
if (options.path) {
|
|
290
291
|
const buffer = await this._platform.fs().promises.readFile(options.path);
|
|
291
|
-
body = buffer.toString(
|
|
292
|
+
body = buffer.toString("base64");
|
|
292
293
|
isBase64 = true;
|
|
293
294
|
length = buffer.length;
|
|
294
|
-
} else if ((0,
|
|
295
|
+
} else if ((0, import_rtti.isString)(body)) {
|
|
295
296
|
isBase64 = false;
|
|
296
297
|
length = Buffer.byteLength(body);
|
|
297
298
|
} else if (body) {
|
|
298
299
|
length = body.length;
|
|
299
|
-
body = body.toString(
|
|
300
|
+
body = body.toString("base64");
|
|
300
301
|
isBase64 = true;
|
|
301
302
|
}
|
|
302
303
|
const headers = {};
|
|
303
|
-
for (const header of Object.keys(headersOption || {}))
|
|
304
|
-
|
|
305
|
-
if (
|
|
304
|
+
for (const header of Object.keys(headersOption || {}))
|
|
305
|
+
headers[header.toLowerCase()] = String(headersOption[header]);
|
|
306
|
+
if (options.contentType)
|
|
307
|
+
headers["content-type"] = String(options.contentType);
|
|
308
|
+
else if (options.json)
|
|
309
|
+
headers["content-type"] = "application/json";
|
|
310
|
+
else if (options.path)
|
|
311
|
+
headers["content-type"] = (0, import_mimeType.getMimeTypeForPath)(options.path) || "application/octet-stream";
|
|
312
|
+
if (length && !("content-length" in headers))
|
|
313
|
+
headers["content-length"] = String(length);
|
|
306
314
|
await this._raceWithTargetClose(this._channel.fulfill({
|
|
307
315
|
status: statusOption || 200,
|
|
308
|
-
headers: (0,
|
|
316
|
+
headers: (0, import_headers.headersObjectToArray)(headers),
|
|
309
317
|
body,
|
|
310
318
|
isBase64,
|
|
311
319
|
fetchResponseUid
|
|
@@ -314,11 +322,15 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
314
322
|
async continue(options = {}) {
|
|
315
323
|
await this._handleRoute(async () => {
|
|
316
324
|
this.request()._applyFallbackOverrides(options);
|
|
317
|
-
await this._innerContinue(
|
|
325
|
+
await this._innerContinue(
|
|
326
|
+
false
|
|
327
|
+
/* isFallback */
|
|
328
|
+
);
|
|
318
329
|
});
|
|
319
330
|
}
|
|
320
331
|
_checkNotHandled() {
|
|
321
|
-
if (!this._handlingPromise)
|
|
332
|
+
if (!this._handlingPromise)
|
|
333
|
+
throw new Error("Route is already handled!");
|
|
322
334
|
}
|
|
323
335
|
_reportHandled(done) {
|
|
324
336
|
const chain = this._handlingPromise;
|
|
@@ -330,31 +342,21 @@ class Route extends _channelOwner.ChannelOwner {
|
|
|
330
342
|
return await this._raceWithTargetClose(this._channel.continue({
|
|
331
343
|
url: options.url,
|
|
332
344
|
method: options.method,
|
|
333
|
-
headers: options.headers ? (0,
|
|
345
|
+
headers: options.headers ? (0, import_headers.headersObjectToArray)(options.headers) : void 0,
|
|
334
346
|
postData: options.postDataBuffer,
|
|
335
347
|
isFallback
|
|
336
348
|
}));
|
|
337
349
|
}
|
|
338
350
|
}
|
|
339
|
-
|
|
340
|
-
class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
341
|
-
static from(route) {
|
|
342
|
-
return route._object;
|
|
343
|
-
}
|
|
351
|
+
class WebSocketRoute extends import_channelOwner.ChannelOwner {
|
|
344
352
|
constructor(parent, type, guid, initializer) {
|
|
345
353
|
super(parent, type, guid, initializer);
|
|
346
|
-
this._onPageMessage = void 0;
|
|
347
|
-
this._onPageClose = void 0;
|
|
348
|
-
this._onServerMessage = void 0;
|
|
349
|
-
this._onServerClose = void 0;
|
|
350
|
-
this._server = void 0;
|
|
351
354
|
this._connected = false;
|
|
352
|
-
this.markAsInternalType();
|
|
353
355
|
this._server = {
|
|
354
|
-
onMessage: handler => {
|
|
356
|
+
onMessage: (handler) => {
|
|
355
357
|
this._onServerMessage = handler;
|
|
356
358
|
},
|
|
357
|
-
onClose: handler => {
|
|
359
|
+
onClose: (handler) => {
|
|
358
360
|
this._onServerClose = handler;
|
|
359
361
|
},
|
|
360
362
|
connectToServer: () => {
|
|
@@ -364,88 +366,75 @@ class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
|
364
366
|
return this._initializer.url;
|
|
365
367
|
},
|
|
366
368
|
close: async (options = {}) => {
|
|
367
|
-
await this._channel.closeServer({
|
|
368
|
-
|
|
369
|
-
wasClean: true
|
|
370
|
-
}).catch(() => {});
|
|
369
|
+
await this._channel.closeServer({ ...options, wasClean: true }).catch(() => {
|
|
370
|
+
});
|
|
371
371
|
},
|
|
372
|
-
send: message => {
|
|
373
|
-
if ((0,
|
|
374
|
-
message,
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
message: message.toString(
|
|
378
|
-
|
|
379
|
-
}).catch(() => {});
|
|
372
|
+
send: (message) => {
|
|
373
|
+
if ((0, import_rtti.isString)(message))
|
|
374
|
+
this._channel.sendToServer({ message, isBase64: false }).catch(() => {
|
|
375
|
+
});
|
|
376
|
+
else
|
|
377
|
+
this._channel.sendToServer({ message: message.toString("base64"), isBase64: true }).catch(() => {
|
|
378
|
+
});
|
|
380
379
|
},
|
|
381
380
|
async [Symbol.asyncDispose]() {
|
|
382
381
|
await this.close();
|
|
383
382
|
}
|
|
384
383
|
};
|
|
385
|
-
this._channel.on(
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
isBase64
|
|
392
|
-
}).catch(() => {});
|
|
384
|
+
this._channel.on("messageFromPage", ({ message, isBase64 }) => {
|
|
385
|
+
if (this._onPageMessage)
|
|
386
|
+
this._onPageMessage(isBase64 ? Buffer.from(message, "base64") : message);
|
|
387
|
+
else if (this._connected)
|
|
388
|
+
this._channel.sendToServer({ message, isBase64 }).catch(() => {
|
|
389
|
+
});
|
|
393
390
|
});
|
|
394
|
-
this._channel.on(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
isBase64
|
|
401
|
-
}).catch(() => {});
|
|
391
|
+
this._channel.on("messageFromServer", ({ message, isBase64 }) => {
|
|
392
|
+
if (this._onServerMessage)
|
|
393
|
+
this._onServerMessage(isBase64 ? Buffer.from(message, "base64") : message);
|
|
394
|
+
else
|
|
395
|
+
this._channel.sendToPage({ message, isBase64 }).catch(() => {
|
|
396
|
+
});
|
|
402
397
|
});
|
|
403
|
-
this._channel.on(
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
code,
|
|
410
|
-
reason,
|
|
411
|
-
wasClean
|
|
412
|
-
}).catch(() => {});
|
|
398
|
+
this._channel.on("closePage", ({ code, reason, wasClean }) => {
|
|
399
|
+
if (this._onPageClose)
|
|
400
|
+
this._onPageClose(code, reason);
|
|
401
|
+
else
|
|
402
|
+
this._channel.closeServer({ code, reason, wasClean }).catch(() => {
|
|
403
|
+
});
|
|
413
404
|
});
|
|
414
|
-
this._channel.on(
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
code,
|
|
421
|
-
reason,
|
|
422
|
-
wasClean
|
|
423
|
-
}).catch(() => {});
|
|
405
|
+
this._channel.on("closeServer", ({ code, reason, wasClean }) => {
|
|
406
|
+
if (this._onServerClose)
|
|
407
|
+
this._onServerClose(code, reason);
|
|
408
|
+
else
|
|
409
|
+
this._channel.closePage({ code, reason, wasClean }).catch(() => {
|
|
410
|
+
});
|
|
424
411
|
});
|
|
425
412
|
}
|
|
413
|
+
static from(route) {
|
|
414
|
+
return route._object;
|
|
415
|
+
}
|
|
426
416
|
url() {
|
|
427
417
|
return this._initializer.url;
|
|
428
418
|
}
|
|
429
419
|
async close(options = {}) {
|
|
430
|
-
await this._channel.closePage({
|
|
431
|
-
|
|
432
|
-
wasClean: true
|
|
433
|
-
}).catch(() => {});
|
|
420
|
+
await this._channel.closePage({ ...options, wasClean: true }).catch(() => {
|
|
421
|
+
});
|
|
434
422
|
}
|
|
435
423
|
connectToServer() {
|
|
436
|
-
if (this._connected)
|
|
424
|
+
if (this._connected)
|
|
425
|
+
throw new Error("Already connected to the server");
|
|
437
426
|
this._connected = true;
|
|
438
|
-
this._channel.connect().catch(() => {
|
|
427
|
+
this._channel.connect().catch(() => {
|
|
428
|
+
});
|
|
439
429
|
return this._server;
|
|
440
430
|
}
|
|
441
431
|
send(message) {
|
|
442
|
-
if ((0,
|
|
443
|
-
message,
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
message: message.toString(
|
|
447
|
-
|
|
448
|
-
}).catch(() => {});
|
|
432
|
+
if ((0, import_rtti.isString)(message))
|
|
433
|
+
this._channel.sendToPage({ message, isBase64: false }).catch(() => {
|
|
434
|
+
});
|
|
435
|
+
else
|
|
436
|
+
this._channel.sendToPage({ message: message.toString("base64"), isBase64: true }).catch(() => {
|
|
437
|
+
});
|
|
449
438
|
}
|
|
450
439
|
onMessage(handler) {
|
|
451
440
|
this._onPageMessage = handler;
|
|
@@ -457,17 +446,14 @@ class WebSocketRoute extends _channelOwner.ChannelOwner {
|
|
|
457
446
|
await this.close();
|
|
458
447
|
}
|
|
459
448
|
async _afterHandle() {
|
|
460
|
-
if (this._connected)
|
|
461
|
-
|
|
462
|
-
await this._channel.ensureOpened()
|
|
449
|
+
if (this._connected)
|
|
450
|
+
return;
|
|
451
|
+
await this._channel.ensureOpened().catch(() => {
|
|
452
|
+
});
|
|
463
453
|
}
|
|
464
454
|
}
|
|
465
|
-
exports.WebSocketRoute = WebSocketRoute;
|
|
466
455
|
class WebSocketRouteHandler {
|
|
467
456
|
constructor(baseURL, url, handler) {
|
|
468
|
-
this._baseURL = void 0;
|
|
469
|
-
this.url = void 0;
|
|
470
|
-
this.handler = void 0;
|
|
471
457
|
this._baseURL = baseURL;
|
|
472
458
|
this.url = url;
|
|
473
459
|
this.handler = handler;
|
|
@@ -476,20 +462,19 @@ class WebSocketRouteHandler {
|
|
|
476
462
|
const patterns = [];
|
|
477
463
|
let all = false;
|
|
478
464
|
for (const handler of handlers) {
|
|
479
|
-
if ((0,
|
|
480
|
-
glob: handler.url
|
|
481
|
-
|
|
482
|
-
regexSource: handler.url.source,
|
|
483
|
-
|
|
484
|
-
|
|
465
|
+
if ((0, import_rtti.isString)(handler.url))
|
|
466
|
+
patterns.push({ glob: handler.url });
|
|
467
|
+
else if ((0, import_rtti.isRegExp)(handler.url))
|
|
468
|
+
patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });
|
|
469
|
+
else
|
|
470
|
+
all = true;
|
|
485
471
|
}
|
|
486
|
-
if (all)
|
|
487
|
-
glob:
|
|
488
|
-
}];
|
|
472
|
+
if (all)
|
|
473
|
+
return [{ glob: "**/*" }];
|
|
489
474
|
return patterns;
|
|
490
475
|
}
|
|
491
476
|
matches(wsURL) {
|
|
492
|
-
return (0,
|
|
477
|
+
return (0, import_urlMatch.urlMatches)(this._baseURL, wsURL, this.url, true);
|
|
493
478
|
}
|
|
494
479
|
async handle(webSocketRoute) {
|
|
495
480
|
const handler = this.handler;
|
|
@@ -497,30 +482,24 @@ class WebSocketRouteHandler {
|
|
|
497
482
|
await webSocketRoute._afterHandle();
|
|
498
483
|
}
|
|
499
484
|
}
|
|
500
|
-
|
|
501
|
-
class Response extends _channelOwner.ChannelOwner {
|
|
502
|
-
static from(response) {
|
|
503
|
-
return response._object;
|
|
504
|
-
}
|
|
505
|
-
static fromNullable(response) {
|
|
506
|
-
return response ? Response.from(response) : null;
|
|
507
|
-
}
|
|
485
|
+
class Response extends import_channelOwner.ChannelOwner {
|
|
508
486
|
constructor(parent, type, guid, initializer) {
|
|
509
487
|
super(parent, type, guid, initializer);
|
|
510
|
-
this.
|
|
511
|
-
this._actualHeadersPromise = void 0;
|
|
512
|
-
this._request = void 0;
|
|
513
|
-
this._finishedPromise = new _manualPromise.ManualPromise();
|
|
514
|
-
this.markAsInternalType();
|
|
488
|
+
this._finishedPromise = new import_manualPromise.ManualPromise();
|
|
515
489
|
this._provisionalHeaders = new RawHeaders(initializer.headers);
|
|
516
490
|
this._request = Request.from(this._initializer.request);
|
|
517
491
|
Object.assign(this._request._timing, this._initializer.timing);
|
|
518
492
|
}
|
|
493
|
+
static from(response) {
|
|
494
|
+
return response._object;
|
|
495
|
+
}
|
|
496
|
+
static fromNullable(response) {
|
|
497
|
+
return response ? Response.from(response) : null;
|
|
498
|
+
}
|
|
519
499
|
url() {
|
|
520
500
|
return this._initializer.url;
|
|
521
501
|
}
|
|
522
502
|
ok() {
|
|
523
|
-
// Status 0 is for file:// URLs
|
|
524
503
|
return this._initializer.status === 0 || this._initializer.status >= 200 && this._initializer.status <= 299;
|
|
525
504
|
}
|
|
526
505
|
status() {
|
|
@@ -532,7 +511,6 @@ class Response extends _channelOwner.ChannelOwner {
|
|
|
532
511
|
fromServiceWorker() {
|
|
533
512
|
return this._initializer.fromServiceWorker;
|
|
534
513
|
}
|
|
535
|
-
|
|
536
514
|
/**
|
|
537
515
|
* @deprecated
|
|
538
516
|
*/
|
|
@@ -567,7 +545,7 @@ class Response extends _channelOwner.ChannelOwner {
|
|
|
567
545
|
}
|
|
568
546
|
async text() {
|
|
569
547
|
const content = await this.body();
|
|
570
|
-
return content.toString(
|
|
548
|
+
return content.toString("utf8");
|
|
571
549
|
}
|
|
572
550
|
async json() {
|
|
573
551
|
const content = await this.text();
|
|
@@ -586,37 +564,30 @@ class Response extends _channelOwner.ChannelOwner {
|
|
|
586
564
|
return (await this._channel.securityDetails()).value || null;
|
|
587
565
|
}
|
|
588
566
|
}
|
|
589
|
-
|
|
590
|
-
class WebSocket extends _channelOwner.ChannelOwner {
|
|
567
|
+
class WebSocket extends import_channelOwner.ChannelOwner {
|
|
591
568
|
static from(webSocket) {
|
|
592
569
|
return webSocket._object;
|
|
593
570
|
}
|
|
594
571
|
constructor(parent, type, guid, initializer) {
|
|
595
572
|
super(parent, type, guid, initializer);
|
|
596
|
-
this._page = void 0;
|
|
597
|
-
this._isClosed = void 0;
|
|
598
573
|
this._isClosed = false;
|
|
599
574
|
this._page = parent;
|
|
600
|
-
this._channel.on(
|
|
601
|
-
if (event.opcode === 1)
|
|
602
|
-
payload: event.data
|
|
603
|
-
|
|
604
|
-
payload: Buffer.from(event.data,
|
|
605
|
-
});
|
|
575
|
+
this._channel.on("frameSent", (event) => {
|
|
576
|
+
if (event.opcode === 1)
|
|
577
|
+
this.emit(import_events.Events.WebSocket.FrameSent, { payload: event.data });
|
|
578
|
+
else if (event.opcode === 2)
|
|
579
|
+
this.emit(import_events.Events.WebSocket.FrameSent, { payload: Buffer.from(event.data, "base64") });
|
|
606
580
|
});
|
|
607
|
-
this._channel.on(
|
|
608
|
-
if (event.opcode === 1)
|
|
609
|
-
payload: event.data
|
|
610
|
-
|
|
611
|
-
payload: Buffer.from(event.data,
|
|
612
|
-
});
|
|
581
|
+
this._channel.on("frameReceived", (event) => {
|
|
582
|
+
if (event.opcode === 1)
|
|
583
|
+
this.emit(import_events.Events.WebSocket.FrameReceived, { payload: event.data });
|
|
584
|
+
else if (event.opcode === 2)
|
|
585
|
+
this.emit(import_events.Events.WebSocket.FrameReceived, { payload: Buffer.from(event.data, "base64") });
|
|
613
586
|
});
|
|
614
|
-
this._channel.on(
|
|
615
|
-
|
|
616
|
-
}) => this.emit(_events.Events.WebSocket.Error, error));
|
|
617
|
-
this._channel.on('close', () => {
|
|
587
|
+
this._channel.on("socketError", ({ error }) => this.emit(import_events.Events.WebSocket.Error, error));
|
|
588
|
+
this._channel.on("close", () => {
|
|
618
589
|
this._isClosed = true;
|
|
619
|
-
this.emit(
|
|
590
|
+
this.emit(import_events.Events.WebSocket.Close, this);
|
|
620
591
|
});
|
|
621
592
|
}
|
|
622
593
|
url() {
|
|
@@ -627,36 +598,33 @@ class WebSocket extends _channelOwner.ChannelOwner {
|
|
|
627
598
|
}
|
|
628
599
|
async waitForEvent(event, optionsOrPredicate = {}) {
|
|
629
600
|
return await this._wrapApiCall(async () => {
|
|
630
|
-
const timeout = this._page._timeoutSettings.timeout(typeof optionsOrPredicate ===
|
|
631
|
-
const predicate = typeof optionsOrPredicate ===
|
|
632
|
-
const waiter =
|
|
601
|
+
const timeout = this._page._timeoutSettings.timeout(typeof optionsOrPredicate === "function" ? {} : optionsOrPredicate);
|
|
602
|
+
const predicate = typeof optionsOrPredicate === "function" ? optionsOrPredicate : optionsOrPredicate.predicate;
|
|
603
|
+
const waiter = import_waiter.Waiter.createForEvent(this, event);
|
|
633
604
|
waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
|
|
634
|
-
if (event !==
|
|
635
|
-
|
|
636
|
-
|
|
605
|
+
if (event !== import_events.Events.WebSocket.Error)
|
|
606
|
+
waiter.rejectOnEvent(this, import_events.Events.WebSocket.Error, new Error("Socket error"));
|
|
607
|
+
if (event !== import_events.Events.WebSocket.Close)
|
|
608
|
+
waiter.rejectOnEvent(this, import_events.Events.WebSocket.Close, new Error("Socket closed"));
|
|
609
|
+
waiter.rejectOnEvent(this._page, import_events.Events.Page.Close, () => this._page._closeErrorWithReason());
|
|
637
610
|
const result = await waiter.waitForEvent(this, event, predicate);
|
|
638
611
|
waiter.dispose();
|
|
639
612
|
return result;
|
|
640
613
|
});
|
|
641
614
|
}
|
|
642
615
|
}
|
|
643
|
-
exports.WebSocket = WebSocket;
|
|
644
616
|
function validateHeaders(headers) {
|
|
645
617
|
for (const key of Object.keys(headers)) {
|
|
646
618
|
const value = headers[key];
|
|
647
|
-
if (!Object.is(value,
|
|
619
|
+
if (!Object.is(value, void 0) && !(0, import_rtti.isString)(value))
|
|
620
|
+
throw new Error(`Expected value of header "${key}" to be String, but "${typeof value}" is found.`);
|
|
648
621
|
}
|
|
649
622
|
}
|
|
650
623
|
class RouteHandler {
|
|
651
624
|
constructor(platform, baseURL, url, handler, times = Number.MAX_SAFE_INTEGER) {
|
|
652
625
|
this.handledCount = 0;
|
|
653
|
-
this._baseURL = void 0;
|
|
654
|
-
this._times = void 0;
|
|
655
|
-
this.url = void 0;
|
|
656
|
-
this.handler = void 0;
|
|
657
626
|
this._ignoreException = false;
|
|
658
|
-
this._activeInvocations = new Set();
|
|
659
|
-
this._savedZone = void 0;
|
|
627
|
+
this._activeInvocations = /* @__PURE__ */ new Set();
|
|
660
628
|
this._baseURL = baseURL;
|
|
661
629
|
this._times = times;
|
|
662
630
|
this.url = url;
|
|
@@ -667,39 +635,35 @@ class RouteHandler {
|
|
|
667
635
|
const patterns = [];
|
|
668
636
|
let all = false;
|
|
669
637
|
for (const handler of handlers) {
|
|
670
|
-
if ((0,
|
|
671
|
-
glob: handler.url
|
|
672
|
-
|
|
673
|
-
regexSource: handler.url.source,
|
|
674
|
-
|
|
675
|
-
|
|
638
|
+
if ((0, import_rtti.isString)(handler.url))
|
|
639
|
+
patterns.push({ glob: handler.url });
|
|
640
|
+
else if ((0, import_rtti.isRegExp)(handler.url))
|
|
641
|
+
patterns.push({ regexSource: handler.url.source, regexFlags: handler.url.flags });
|
|
642
|
+
else
|
|
643
|
+
all = true;
|
|
676
644
|
}
|
|
677
|
-
if (all)
|
|
678
|
-
glob:
|
|
679
|
-
}];
|
|
645
|
+
if (all)
|
|
646
|
+
return [{ glob: "**/*" }];
|
|
680
647
|
return patterns;
|
|
681
648
|
}
|
|
682
649
|
matches(requestURL) {
|
|
683
|
-
return (0,
|
|
650
|
+
return (0, import_urlMatch.urlMatches)(this._baseURL, requestURL, this.url);
|
|
684
651
|
}
|
|
685
652
|
async handle(route) {
|
|
686
653
|
return await this._savedZone.run(async () => this._handleImpl(route));
|
|
687
654
|
}
|
|
688
655
|
async _handleImpl(route) {
|
|
689
|
-
const handlerInvocation = {
|
|
690
|
-
complete: new _manualPromise.ManualPromise(),
|
|
691
|
-
route
|
|
692
|
-
};
|
|
656
|
+
const handlerInvocation = { complete: new import_manualPromise.ManualPromise(), route };
|
|
693
657
|
this._activeInvocations.add(handlerInvocation);
|
|
694
658
|
try {
|
|
695
659
|
return await this._handleInternal(route);
|
|
696
660
|
} catch (e) {
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
if ((0,
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
661
|
+
if (this._ignoreException)
|
|
662
|
+
return false;
|
|
663
|
+
if ((0, import_errors.isTargetClosedError)(e)) {
|
|
664
|
+
(0, import_stackTrace.rewriteErrorMessage)(e, `"${e.message}" while running route callback.
|
|
665
|
+
Consider awaiting \`await page.unrouteAll({ behavior: 'ignoreErrors' })\`
|
|
666
|
+
before the end of the test to ignore remaining routes in flight.`);
|
|
703
667
|
}
|
|
704
668
|
throw e;
|
|
705
669
|
} finally {
|
|
@@ -708,16 +672,13 @@ class RouteHandler {
|
|
|
708
672
|
}
|
|
709
673
|
}
|
|
710
674
|
async stop(behavior) {
|
|
711
|
-
|
|
712
|
-
// - wait for the current handler invocations to finish
|
|
713
|
-
// - or do not wait, if the user opted out of it, but swallow all exceptions
|
|
714
|
-
// that happen after the unroute/close.
|
|
715
|
-
if (behavior === 'ignoreErrors') {
|
|
675
|
+
if (behavior === "ignoreErrors") {
|
|
716
676
|
this._ignoreException = true;
|
|
717
677
|
} else {
|
|
718
678
|
const promises = [];
|
|
719
679
|
for (const activation of this._activeInvocations) {
|
|
720
|
-
if (!activation.route._didThrow)
|
|
680
|
+
if (!activation.route._didThrow)
|
|
681
|
+
promises.push(activation.complete);
|
|
721
682
|
}
|
|
722
683
|
await Promise.all(promises);
|
|
723
684
|
}
|
|
@@ -725,45 +686,59 @@ class RouteHandler {
|
|
|
725
686
|
async _handleInternal(route) {
|
|
726
687
|
++this.handledCount;
|
|
727
688
|
const handledPromise = route._startHandling();
|
|
728
|
-
// Extract handler into a variable to avoid [RouteHandler.handler] in the stack.
|
|
729
689
|
const handler = this.handler;
|
|
730
|
-
const [handled] = await Promise.all([
|
|
690
|
+
const [handled] = await Promise.all([
|
|
691
|
+
handledPromise,
|
|
692
|
+
handler(route, route.request())
|
|
693
|
+
]);
|
|
731
694
|
return handled;
|
|
732
695
|
}
|
|
733
696
|
willExpire() {
|
|
734
697
|
return this.handledCount + 1 >= this._times;
|
|
735
698
|
}
|
|
736
699
|
}
|
|
737
|
-
exports.RouteHandler = RouteHandler;
|
|
738
700
|
class RawHeaders {
|
|
701
|
+
constructor(headers) {
|
|
702
|
+
this._headersMap = new import_multimap.MultiMap();
|
|
703
|
+
this._headersArray = headers;
|
|
704
|
+
for (const header of headers)
|
|
705
|
+
this._headersMap.set(header.name.toLowerCase(), header.value);
|
|
706
|
+
}
|
|
739
707
|
static _fromHeadersObjectLossy(headers) {
|
|
740
708
|
const headersArray = Object.entries(headers).map(([name, value]) => ({
|
|
741
709
|
name,
|
|
742
710
|
value
|
|
743
|
-
})).filter(header => header.value !==
|
|
711
|
+
})).filter((header) => header.value !== void 0);
|
|
744
712
|
return new RawHeaders(headersArray);
|
|
745
713
|
}
|
|
746
|
-
constructor(headers) {
|
|
747
|
-
this._headersArray = void 0;
|
|
748
|
-
this._headersMap = new _multimap.MultiMap();
|
|
749
|
-
this._headersArray = headers;
|
|
750
|
-
for (const header of headers) this._headersMap.set(header.name.toLowerCase(), header.value);
|
|
751
|
-
}
|
|
752
714
|
get(name) {
|
|
753
715
|
const values = this.getAll(name);
|
|
754
|
-
if (!values || !values.length)
|
|
755
|
-
|
|
716
|
+
if (!values || !values.length)
|
|
717
|
+
return null;
|
|
718
|
+
return values.join(name.toLowerCase() === "set-cookie" ? "\n" : ", ");
|
|
756
719
|
}
|
|
757
720
|
getAll(name) {
|
|
758
721
|
return [...this._headersMap.get(name.toLowerCase())];
|
|
759
722
|
}
|
|
760
723
|
headers() {
|
|
761
724
|
const result = {};
|
|
762
|
-
for (const name of this._headersMap.keys())
|
|
725
|
+
for (const name of this._headersMap.keys())
|
|
726
|
+
result[name] = this.get(name);
|
|
763
727
|
return result;
|
|
764
728
|
}
|
|
765
729
|
headersArray() {
|
|
766
730
|
return this._headersArray;
|
|
767
731
|
}
|
|
768
732
|
}
|
|
769
|
-
|
|
733
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
734
|
+
0 && (module.exports = {
|
|
735
|
+
RawHeaders,
|
|
736
|
+
Request,
|
|
737
|
+
Response,
|
|
738
|
+
Route,
|
|
739
|
+
RouteHandler,
|
|
740
|
+
WebSocket,
|
|
741
|
+
WebSocketRoute,
|
|
742
|
+
WebSocketRouteHandler,
|
|
743
|
+
validateHeaders
|
|
744
|
+
});
|