patchright-core 1.51.3 → 1.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/browsers.json +15 -13
  2. package/lib/androidServerImpl.js +42 -48
  3. package/lib/browserServerImpl.js +54 -67
  4. package/lib/cli/driver.js +71 -69
  5. package/lib/cli/program.js +312 -328
  6. package/lib/cli/programWithTestStub.js +51 -45
  7. package/lib/client/accessibility.js +31 -32
  8. package/lib/client/android.js +141 -228
  9. package/lib/client/api.js +135 -283
  10. package/lib/client/artifact.js +39 -36
  11. package/lib/client/browser.js +57 -61
  12. package/lib/client/browserContext.js +297 -326
  13. package/lib/client/browserType.js +92 -106
  14. package/lib/client/cdpSession.js +29 -31
  15. package/lib/client/channelOwner.js +82 -95
  16. package/lib/client/clientHelper.js +46 -38
  17. package/lib/client/clientInstrumentation.js +40 -37
  18. package/lib/client/clientStackTrace.js +41 -37
  19. package/lib/client/clock.js +36 -36
  20. package/lib/client/connection.js +190 -212
  21. package/lib/client/consoleMessage.js +31 -28
  22. package/lib/client/coverage.js +25 -22
  23. package/lib/client/dialog.js +30 -31
  24. package/lib/client/download.js +25 -25
  25. package/lib/client/electron.js +73 -75
  26. package/lib/client/elementHandle.js +111 -147
  27. package/lib/client/errors.js +53 -53
  28. package/lib/client/eventEmitter.js +124 -121
  29. package/lib/client/events.js +72 -68
  30. package/lib/client/fetch.js +135 -158
  31. package/lib/client/fileChooser.js +25 -24
  32. package/lib/client/fileUtils.js +31 -28
  33. package/lib/client/frame.js +187 -306
  34. package/lib/client/harRouter.js +42 -52
  35. package/lib/client/input.js +40 -69
  36. package/lib/client/jsHandle.js +56 -71
  37. package/lib/client/jsonPipe.js +27 -23
  38. package/lib/client/localUtils.js +29 -28
  39. package/lib/client/locator.js +161 -245
  40. package/lib/client/network.js +277 -295
  41. package/lib/client/page.js +270 -318
  42. package/lib/client/platform.js +46 -43
  43. package/lib/client/playwright.js +51 -66
  44. package/lib/client/selectors.js +48 -46
  45. package/lib/client/stream.js +29 -25
  46. package/lib/client/timeoutSettings.js +49 -39
  47. package/lib/client/tracing.js +48 -84
  48. package/lib/client/types.js +26 -22
  49. package/lib/client/video.js +35 -27
  50. package/lib/client/waiter.js +69 -88
  51. package/lib/client/webError.js +25 -23
  52. package/lib/client/webSocket.js +61 -56
  53. package/lib/client/worker.js +48 -58
  54. package/lib/client/writableStream.js +27 -23
  55. package/lib/generated/clockSource.js +26 -5
  56. package/lib/generated/consoleApiSource.js +26 -5
  57. package/lib/generated/injectedScriptSource.js +26 -5
  58. package/lib/generated/pollingRecorderSource.js +26 -5
  59. package/lib/generated/utilityScriptSource.js +26 -5
  60. package/lib/generated/webSocketMockSource.js +371 -4
  61. package/lib/inProcessFactory.js +53 -53
  62. package/lib/inprocess.js +2 -19
  63. package/lib/outofprocess.js +53 -46
  64. package/lib/protocol/debug.js +209 -25
  65. package/lib/protocol/serializers.js +153 -134
  66. package/lib/protocol/validator.js +2714 -2714
  67. package/lib/protocol/validatorPrimitives.js +114 -73
  68. package/lib/remote/playwrightConnection.js +140 -157
  69. package/lib/remote/playwrightServer.js +99 -84
  70. package/lib/server/accessibility.js +44 -37
  71. package/lib/server/android/android.js +216 -209
  72. package/lib/server/android/backendAdb.js +89 -82
  73. package/lib/server/artifact.js +78 -55
  74. package/lib/server/bidi/bidiBrowser.js +221 -155
  75. package/lib/server/bidi/bidiChromium.js +106 -79
  76. package/lib/server/bidi/bidiConnection.js +66 -83
  77. package/lib/server/bidi/bidiExecutionContext.js +128 -113
  78. package/lib/server/bidi/bidiFirefox.js +76 -69
  79. package/lib/server/bidi/bidiInput.js +86 -97
  80. package/lib/server/bidi/bidiNetworkManager.js +137 -154
  81. package/lib/server/bidi/bidiOverCdp.js +57 -58
  82. package/lib/server/bidi/bidiPage.js +247 -219
  83. package/lib/server/bidi/bidiPdf.js +52 -86
  84. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  85. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  86. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  87. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  88. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  89. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  90. package/lib/server/browser.js +76 -84
  91. package/lib/server/browserContext.js +321 -346
  92. package/lib/server/browserType.js +169 -182
  93. package/lib/server/callLog.js +47 -44
  94. package/lib/server/chromium/chromium.js +212 -190
  95. package/lib/server/chromium/chromiumSwitches.js +86 -64
  96. package/lib/server/chromium/crAccessibility.js +157 -131
  97. package/lib/server/chromium/crBrowser.js +253 -273
  98. package/lib/server/chromium/crConnection.js +91 -116
  99. package/lib/server/chromium/crCoverage.js +113 -127
  100. package/lib/server/chromium/crDevTools.js +59 -51
  101. package/lib/server/chromium/crDragDrop.js +62 -79
  102. package/lib/server/chromium/crExecutionContext.js +88 -83
  103. package/lib/server/chromium/crInput.js +97 -95
  104. package/lib/server/chromium/crNetworkManager.js +284 -404
  105. package/lib/server/chromium/crPage.js +522 -608
  106. package/lib/server/chromium/crPdf.js +54 -86
  107. package/lib/server/chromium/crProtocolHelper.js +92 -80
  108. package/lib/server/chromium/crServiceWorker.js +82 -67
  109. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  110. package/lib/server/chromium/protocol.d.js +16 -0
  111. package/lib/server/chromium/videoRecorder.js +65 -99
  112. package/lib/server/clock.js +62 -50
  113. package/lib/server/codegen/csharp.js +185 -160
  114. package/lib/server/codegen/java.js +155 -128
  115. package/lib/server/codegen/javascript.js +163 -148
  116. package/lib/server/codegen/jsonl.js +32 -28
  117. package/lib/server/codegen/language.js +75 -52
  118. package/lib/server/codegen/languages.js +65 -27
  119. package/lib/server/codegen/python.js +140 -125
  120. package/lib/server/codegen/types.js +15 -4
  121. package/lib/server/console.js +28 -32
  122. package/lib/server/cookieStore.js +105 -86
  123. package/lib/server/debugController.js +97 -124
  124. package/lib/server/debugger.js +82 -78
  125. package/lib/server/deviceDescriptors.js +37 -24
  126. package/lib/server/deviceDescriptorsSource.json +50 -50
  127. package/lib/server/dialog.js +36 -35
  128. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  129. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  130. package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
  131. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  132. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  133. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  134. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
  135. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  136. package/lib/server/dispatchers/dispatcher.js +169 -220
  137. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  138. package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
  139. package/lib/server/dispatchers/frameDispatcher.js +99 -163
  140. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  141. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  142. package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
  143. package/lib/server/dispatchers/networkDispatchers.js +90 -107
  144. package/lib/server/dispatchers/pageDispatcher.js +128 -169
  145. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  146. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  147. package/lib/server/dispatchers/streamDispatcher.js +42 -45
  148. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  149. package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
  150. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
  151. package/lib/server/dom.js +413 -443
  152. package/lib/server/download.js +45 -35
  153. package/lib/server/electron/electron.js +156 -176
  154. package/lib/server/electron/loader.js +8 -36
  155. package/lib/server/errors.js +47 -46
  156. package/lib/server/fetch.js +289 -323
  157. package/lib/server/fileChooser.js +25 -24
  158. package/lib/server/fileUploadUtils.js +65 -59
  159. package/lib/server/firefox/ffAccessibility.js +153 -131
  160. package/lib/server/firefox/ffBrowser.js +213 -277
  161. package/lib/server/firefox/ffConnection.js +63 -84
  162. package/lib/server/firefox/ffExecutionContext.js +91 -73
  163. package/lib/server/firefox/ffInput.js +67 -69
  164. package/lib/server/firefox/ffNetworkManager.js +131 -110
  165. package/lib/server/firefox/ffPage.js +236 -273
  166. package/lib/server/firefox/firefox.js +76 -67
  167. package/lib/server/firefox/protocol.d.js +16 -0
  168. package/lib/server/formData.js +107 -35
  169. package/lib/server/frameSelectors.js +221 -112
  170. package/lib/server/frames.js +731 -894
  171. package/lib/server/har/harRecorder.js +85 -77
  172. package/lib/server/har/harTracer.js +287 -222
  173. package/lib/server/harBackend.js +80 -80
  174. package/lib/server/helper.js +56 -59
  175. package/lib/server/index.js +59 -99
  176. package/lib/server/input.js +134 -163
  177. package/lib/server/instrumentation.js +49 -44
  178. package/lib/server/javascript.js +143 -134
  179. package/lib/server/launchApp.js +92 -73
  180. package/lib/server/localUtils.js +130 -122
  181. package/lib/server/macEditingCommands.js +141 -137
  182. package/lib/server/network.js +262 -296
  183. package/lib/server/page.js +326 -423
  184. package/lib/server/pageBinding.js +88 -0
  185. package/lib/server/pipeTransport.js +49 -45
  186. package/lib/server/playwright.js +60 -67
  187. package/lib/server/progress.js +56 -51
  188. package/lib/server/protocolError.js +34 -31
  189. package/lib/server/recorder/chat.js +70 -86
  190. package/lib/server/recorder/contextRecorder.js +134 -138
  191. package/lib/server/recorder/recorderApp.js +127 -136
  192. package/lib/server/recorder/recorderCollection.js +56 -44
  193. package/lib/server/recorder/recorderFrontend.js +15 -4
  194. package/lib/server/recorder/recorderRunner.js +79 -103
  195. package/lib/server/recorder/recorderUtils.js +56 -45
  196. package/lib/server/recorder/throttledFile.js +42 -30
  197. package/lib/server/recorder.js +177 -186
  198. package/lib/server/registry/browserFetcher.js +106 -101
  199. package/lib/server/registry/dependencies.js +245 -196
  200. package/lib/server/registry/index.js +904 -792
  201. package/lib/server/registry/nativeDeps.js +1073 -464
  202. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  203. package/lib/server/screenshotter.js +166 -182
  204. package/lib/server/selectors.js +85 -46
  205. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  206. package/lib/server/socksInterceptor.js +62 -70
  207. package/lib/server/storageScript.js +94 -100
  208. package/lib/server/timeoutSettings.js +58 -43
  209. package/lib/server/trace/recorder/snapshotter.js +70 -89
  210. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  211. package/lib/server/trace/recorder/tracing.js +321 -333
  212. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  213. package/lib/server/trace/viewer/traceViewer.js +168 -146
  214. package/lib/server/transport.js +124 -133
  215. package/lib/server/types.js +26 -22
  216. package/lib/server/usKeyboardLayout.js +135 -545
  217. package/lib/server/utils/ascii.js +39 -26
  218. package/lib/server/utils/comparators.js +105 -103
  219. package/lib/server/utils/crypto.js +157 -112
  220. package/lib/server/utils/debug.js +37 -28
  221. package/lib/server/utils/debugLogger.js +69 -48
  222. package/lib/server/utils/env.js +52 -37
  223. package/lib/server/utils/eventsHelper.js +29 -28
  224. package/lib/server/utils/expectUtils.js +31 -26
  225. package/lib/server/utils/fileUtils.js +123 -136
  226. package/lib/server/utils/happyEyeballs.js +138 -123
  227. package/lib/server/utils/hostPlatform.js +84 -120
  228. package/lib/server/utils/httpServer.js +106 -121
  229. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  230. package/lib/server/utils/image_tools/compare.js +44 -43
  231. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  232. package/lib/server/utils/image_tools/stats.js +40 -40
  233. package/lib/server/utils/linuxUtils.js +50 -37
  234. package/lib/server/utils/network.js +143 -86
  235. package/lib/server/utils/nodePlatform.js +87 -79
  236. package/lib/server/utils/pipeTransport.js +44 -42
  237. package/lib/server/utils/processLauncher.js +111 -121
  238. package/lib/server/utils/profiler.js +52 -39
  239. package/lib/server/utils/socksProxy.js +280 -339
  240. package/lib/server/utils/spawnAsync.js +37 -41
  241. package/lib/server/utils/task.js +31 -38
  242. package/lib/server/utils/userAgent.js +73 -66
  243. package/lib/server/utils/wsServer.js +73 -69
  244. package/lib/server/utils/zipFile.js +36 -37
  245. package/lib/server/utils/zones.js +37 -34
  246. package/lib/server/webkit/protocol.d.js +16 -0
  247. package/lib/server/webkit/webkit.js +76 -63
  248. package/lib/server/webkit/wkAccessibility.js +161 -118
  249. package/lib/server/webkit/wkBrowser.js +159 -176
  250. package/lib/server/webkit/wkConnection.js +59 -83
  251. package/lib/server/webkit/wkExecutionContext.js +84 -70
  252. package/lib/server/webkit/wkInput.js +82 -80
  253. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  254. package/lib/server/webkit/wkPage.js +525 -619
  255. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  256. package/lib/server/webkit/wkWorkers.js +77 -77
  257. package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
  258. package/lib/utils/isomorphic/assert.js +28 -22
  259. package/lib/utils/isomorphic/builtins.js +86 -0
  260. package/lib/utils/isomorphic/colors.js +66 -59
  261. package/lib/utils/isomorphic/cssParser.js +121 -125
  262. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  263. package/lib/utils/isomorphic/headers.js +38 -37
  264. package/lib/utils/isomorphic/locatorGenerators.js +340 -357
  265. package/lib/utils/isomorphic/locatorParser.js +96 -105
  266. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  267. package/lib/utils/isomorphic/manualPromise.js +47 -39
  268. package/lib/utils/isomorphic/mimeType.js +448 -25
  269. package/lib/utils/isomorphic/multimap.js +35 -27
  270. package/lib/utils/isomorphic/rtti.js +35 -33
  271. package/lib/utils/isomorphic/selectorParser.js +183 -193
  272. package/lib/utils/isomorphic/semaphore.js +27 -24
  273. package/lib/utils/isomorphic/stackTrace.js +87 -98
  274. package/lib/utils/isomorphic/stringUtils.js +113 -106
  275. package/lib/utils/isomorphic/time.js +41 -22
  276. package/lib/utils/isomorphic/timeoutRunner.js +55 -54
  277. package/lib/utils/isomorphic/traceUtils.js +38 -41
  278. package/lib/utils/isomorphic/types.js +15 -4
  279. package/lib/utils/isomorphic/urlMatch.js +112 -67
  280. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  281. package/lib/utils.js +97 -443
  282. package/lib/utilsBundle.js +101 -52
  283. package/lib/vite/htmlReport/index.html +21 -15
  284. package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-CXVeovup.js} +1 -1
  285. package/lib/vite/recorder/assets/index-BsWQsSGl.js +184 -0
  286. package/lib/vite/recorder/index.html +1 -1
  287. package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-_GLjJL-7.js} +1 -1
  288. package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +265 -0
  289. package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
  290. package/lib/vite/traceViewer/index.cFZzK9RN.js +2 -0
  291. package/lib/vite/traceViewer/index.html +3 -3
  292. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  293. package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +5 -0
  294. package/lib/vite/traceViewer/uiMode.html +3 -3
  295. package/lib/zipBundle.js +32 -23
  296. package/package.json +1 -1
  297. package/types/protocol.d.ts +436 -17
  298. package/types/types.d.ts +35 -16
  299. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  300. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-l0TyP_G8.js +0 -259
  302. package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
@@ -1,128 +1,120 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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 socksProxy_exports = {};
30
+ __export(socksProxy_exports, {
31
+ SocksProxy: () => SocksProxy,
32
+ SocksProxyHandler: () => SocksProxyHandler,
33
+ parsePattern: () => parsePattern
5
34
  });
6
- exports.SocksProxyHandler = exports.SocksProxy = void 0;
7
- exports.parsePattern = parsePattern;
8
- var _events = _interopRequireDefault(require("events"));
9
- var _net = _interopRequireDefault(require("net"));
10
- var _assert = require("../../utils/isomorphic/assert");
11
- var _crypto = require("./crypto");
12
- var _debugLogger = require("./debugLogger");
13
- var _happyEyeballs = require("./happyEyeballs");
14
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
- /**
16
- * Copyright (c) Microsoft Corporation.
17
- *
18
- * Licensed under the Apache License, Version 2.0 (the "License");
19
- * you may not use this file except in compliance with the License.
20
- * You may obtain a copy of the License at
21
- *
22
- * http://www.apache.org/licenses/LICENSE-2.0
23
- *
24
- * Unless required by applicable law or agreed to in writing, software
25
- * distributed under the License is distributed on an "AS IS" BASIS,
26
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
27
- * See the License for the specific language governing permissions and
28
- * limitations under the License.
29
- */
30
- // https://tools.ietf.org/html/rfc1928
31
- var SocksAuth = /*#__PURE__*/function (SocksAuth) {
32
- SocksAuth[SocksAuth["NO_AUTHENTICATION_REQUIRED"] = 0] = "NO_AUTHENTICATION_REQUIRED";
33
- SocksAuth[SocksAuth["GSSAPI"] = 1] = "GSSAPI";
34
- SocksAuth[SocksAuth["USERNAME_PASSWORD"] = 2] = "USERNAME_PASSWORD";
35
- SocksAuth[SocksAuth["NO_ACCEPTABLE_METHODS"] = 255] = "NO_ACCEPTABLE_METHODS";
36
- return SocksAuth;
37
- }(SocksAuth || {});
38
- var SocksAddressType = /*#__PURE__*/function (SocksAddressType) {
39
- SocksAddressType[SocksAddressType["IPv4"] = 1] = "IPv4";
40
- SocksAddressType[SocksAddressType["FqName"] = 3] = "FqName";
41
- SocksAddressType[SocksAddressType["IPv6"] = 4] = "IPv6";
42
- return SocksAddressType;
43
- }(SocksAddressType || {});
44
- var SocksCommand = /*#__PURE__*/function (SocksCommand) {
45
- SocksCommand[SocksCommand["CONNECT"] = 1] = "CONNECT";
46
- SocksCommand[SocksCommand["BIND"] = 2] = "BIND";
47
- SocksCommand[SocksCommand["UDP_ASSOCIATE"] = 3] = "UDP_ASSOCIATE";
48
- return SocksCommand;
49
- }(SocksCommand || {});
50
- var SocksReply = /*#__PURE__*/function (SocksReply) {
51
- SocksReply[SocksReply["Succeeded"] = 0] = "Succeeded";
52
- SocksReply[SocksReply["GeneralServerFailure"] = 1] = "GeneralServerFailure";
53
- SocksReply[SocksReply["NotAllowedByRuleSet"] = 2] = "NotAllowedByRuleSet";
54
- SocksReply[SocksReply["NetworkUnreachable"] = 3] = "NetworkUnreachable";
55
- SocksReply[SocksReply["HostUnreachable"] = 4] = "HostUnreachable";
56
- SocksReply[SocksReply["ConnectionRefused"] = 5] = "ConnectionRefused";
57
- SocksReply[SocksReply["TtlExpired"] = 6] = "TtlExpired";
58
- SocksReply[SocksReply["CommandNotSupported"] = 7] = "CommandNotSupported";
59
- SocksReply[SocksReply["AddressTypeNotSupported"] = 8] = "AddressTypeNotSupported";
60
- return SocksReply;
61
- }(SocksReply || {});
35
+ module.exports = __toCommonJS(socksProxy_exports);
36
+ var import_events = __toESM(require("events"));
37
+ var import_net = __toESM(require("net"));
38
+ var import_assert = require("../../utils/isomorphic/assert");
39
+ var import_crypto = require("./crypto");
40
+ var import_debugLogger = require("./debugLogger");
41
+ var import_happyEyeballs = require("./happyEyeballs");
42
+ var SocksAuth = /* @__PURE__ */ ((SocksAuth2) => {
43
+ SocksAuth2[SocksAuth2["NO_AUTHENTICATION_REQUIRED"] = 0] = "NO_AUTHENTICATION_REQUIRED";
44
+ SocksAuth2[SocksAuth2["GSSAPI"] = 1] = "GSSAPI";
45
+ SocksAuth2[SocksAuth2["USERNAME_PASSWORD"] = 2] = "USERNAME_PASSWORD";
46
+ SocksAuth2[SocksAuth2["NO_ACCEPTABLE_METHODS"] = 255] = "NO_ACCEPTABLE_METHODS";
47
+ return SocksAuth2;
48
+ })(SocksAuth || {});
49
+ var SocksAddressType = /* @__PURE__ */ ((SocksAddressType2) => {
50
+ SocksAddressType2[SocksAddressType2["IPv4"] = 1] = "IPv4";
51
+ SocksAddressType2[SocksAddressType2["FqName"] = 3] = "FqName";
52
+ SocksAddressType2[SocksAddressType2["IPv6"] = 4] = "IPv6";
53
+ return SocksAddressType2;
54
+ })(SocksAddressType || {});
55
+ var SocksCommand = /* @__PURE__ */ ((SocksCommand2) => {
56
+ SocksCommand2[SocksCommand2["CONNECT"] = 1] = "CONNECT";
57
+ SocksCommand2[SocksCommand2["BIND"] = 2] = "BIND";
58
+ SocksCommand2[SocksCommand2["UDP_ASSOCIATE"] = 3] = "UDP_ASSOCIATE";
59
+ return SocksCommand2;
60
+ })(SocksCommand || {});
61
+ var SocksReply = /* @__PURE__ */ ((SocksReply2) => {
62
+ SocksReply2[SocksReply2["Succeeded"] = 0] = "Succeeded";
63
+ SocksReply2[SocksReply2["GeneralServerFailure"] = 1] = "GeneralServerFailure";
64
+ SocksReply2[SocksReply2["NotAllowedByRuleSet"] = 2] = "NotAllowedByRuleSet";
65
+ SocksReply2[SocksReply2["NetworkUnreachable"] = 3] = "NetworkUnreachable";
66
+ SocksReply2[SocksReply2["HostUnreachable"] = 4] = "HostUnreachable";
67
+ SocksReply2[SocksReply2["ConnectionRefused"] = 5] = "ConnectionRefused";
68
+ SocksReply2[SocksReply2["TtlExpired"] = 6] = "TtlExpired";
69
+ SocksReply2[SocksReply2["CommandNotSupported"] = 7] = "CommandNotSupported";
70
+ SocksReply2[SocksReply2["AddressTypeNotSupported"] = 8] = "AddressTypeNotSupported";
71
+ return SocksReply2;
72
+ })(SocksReply || {});
62
73
  class SocksConnection {
63
74
  constructor(uid, socket, client) {
64
75
  this._buffer = Buffer.from([]);
65
76
  this._offset = 0;
66
77
  this._fence = 0;
67
- this._fenceCallback = void 0;
68
- this._socket = void 0;
69
- this._boundOnData = void 0;
70
- this._uid = void 0;
71
- this._client = void 0;
72
78
  this._uid = uid;
73
79
  this._socket = socket;
74
80
  this._client = client;
75
81
  this._boundOnData = this._onData.bind(this);
76
- socket.on('data', this._boundOnData);
77
- socket.on('close', () => this._onClose());
78
- socket.on('end', () => this._onClose());
79
- socket.on('error', () => this._onClose());
82
+ socket.on("data", this._boundOnData);
83
+ socket.on("close", () => this._onClose());
84
+ socket.on("end", () => this._onClose());
85
+ socket.on("error", () => this._onClose());
80
86
  this._run().catch(() => this._socket.end());
81
87
  }
82
88
  async _run() {
83
- (0, _assert.assert)(await this._authenticate());
84
- const {
85
- command,
86
- host,
87
- port
88
- } = await this._parseRequest();
89
- if (command !== SocksCommand.CONNECT) {
90
- this._writeBytes(Buffer.from([0x05, SocksReply.CommandNotSupported, 0x00,
91
- // RSV
92
- 0x01,
93
- // IPv4
94
- 0x00, 0x00, 0x00, 0x00,
95
- // Address
96
- 0x00, 0x00 // Port
89
+ (0, import_assert.assert)(await this._authenticate());
90
+ const { command, host, port } = await this._parseRequest();
91
+ if (command !== 1 /* CONNECT */) {
92
+ this._writeBytes(Buffer.from([
93
+ 5,
94
+ 7 /* CommandNotSupported */,
95
+ 0,
96
+ // RSV
97
+ 1,
98
+ // IPv4
99
+ 0,
100
+ 0,
101
+ 0,
102
+ 0,
103
+ // Address
104
+ 0,
105
+ 0
106
+ // Port
97
107
  ]));
98
108
  return;
99
109
  }
100
- this._socket.off('data', this._boundOnData);
101
- this._client.onSocketRequested({
102
- uid: this._uid,
103
- host,
104
- port
105
- });
110
+ this._socket.off("data", this._boundOnData);
111
+ this._client.onSocketRequested({ uid: this._uid, host, port });
106
112
  }
107
113
  async _authenticate() {
108
- // Request:
109
- // +----+----------+----------+
110
- // |VER | NMETHODS | METHODS |
111
- // +----+----------+----------+
112
- // | 1 | 1 | 1 to 255 |
113
- // +----+----------+----------+
114
-
115
- // Response:
116
- // +----+--------+
117
- // |VER | METHOD |
118
- // +----+--------+
119
- // | 1 | 1 |
120
- // +----+--------+
121
-
122
114
  const version = await this._readByte();
123
- (0, _assert.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
115
+ (0, import_assert.assert)(version === 5, "The VER field must be set to x05 for this version of the protocol, was " + version);
124
116
  const nMethods = await this._readByte();
125
- (0, _assert.assert)(nMethods, 'No authentication methods specified');
117
+ (0, import_assert.assert)(nMethods, "No authentication methods specified");
126
118
  const methods = await this._readBytes(nMethods);
127
119
  for (const method of methods) {
128
120
  if (method === 0) {
@@ -130,43 +122,30 @@ class SocksConnection {
130
122
  return true;
131
123
  }
132
124
  }
133
- this._writeBytes(Buffer.from([version, SocksAuth.NO_ACCEPTABLE_METHODS]));
125
+ this._writeBytes(Buffer.from([version, 255 /* NO_ACCEPTABLE_METHODS */]));
134
126
  return false;
135
127
  }
136
128
  async _parseRequest() {
137
- // Request.
138
- // +----+-----+-------+------+----------+----------+
139
- // |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
140
- // +----+-----+-------+------+----------+----------+
141
- // | 1 | 1 | X'00' | 1 | Variable | 2 |
142
- // +----+-----+-------+------+----------+----------+
143
-
144
- // Response.
145
- // +----+-----+-------+------+----------+----------+
146
- // |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
147
- // +----+-----+-------+------+----------+----------+
148
- // | 1 | 1 | X'00' | 1 | Variable | 2 |
149
- // +----+-----+-------+------+----------+----------+
150
-
151
129
  const version = await this._readByte();
152
- (0, _assert.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
130
+ (0, import_assert.assert)(version === 5, "The VER field must be set to x05 for this version of the protocol, was " + version);
153
131
  const command = await this._readByte();
154
- await this._readByte(); // skip reserved.
132
+ await this._readByte();
155
133
  const addressType = await this._readByte();
156
- let host = '';
134
+ let host = "";
157
135
  switch (addressType) {
158
- case SocksAddressType.IPv4:
159
- host = (await this._readBytes(4)).join('.');
136
+ case 1 /* IPv4 */:
137
+ host = (await this._readBytes(4)).join(".");
160
138
  break;
161
- case SocksAddressType.FqName:
139
+ case 3 /* FqName */:
162
140
  const length = await this._readByte();
163
141
  host = (await this._readBytes(length)).toString();
164
142
  break;
165
- case SocksAddressType.IPv6:
143
+ case 4 /* IPv6 */:
166
144
  const bytes = await this._readBytes(16);
167
145
  const tokens = [];
168
- for (let i = 0; i < 8; ++i) tokens.push(bytes.readUInt16BE(i * 2).toString(16));
169
- host = tokens.join(':');
146
+ for (let i = 0; i < 8; ++i)
147
+ tokens.push(bytes.readUInt16BE(i * 2).toString(16));
148
+ host = tokens.join(":");
170
149
  break;
171
150
  }
172
151
  const port = (await this._readBytes(2)).readUInt16BE(0);
@@ -185,60 +164,67 @@ class SocksConnection {
185
164
  }
186
165
  async _readBytes(length) {
187
166
  this._fence = this._offset + length;
188
- if (!this._buffer || this._buffer.length < this._fence) await new Promise(f => this._fenceCallback = f);
167
+ if (!this._buffer || this._buffer.length < this._fence)
168
+ await new Promise((f) => this._fenceCallback = f);
189
169
  this._offset += length;
190
170
  return this._buffer.slice(this._offset - length, this._offset);
191
171
  }
192
172
  _writeBytes(buffer) {
193
- if (this._socket.writable) this._socket.write(buffer);
173
+ if (this._socket.writable)
174
+ this._socket.write(buffer);
194
175
  }
195
176
  _onClose() {
196
- this._client.onSocketClosed({
197
- uid: this._uid
198
- });
177
+ this._client.onSocketClosed({ uid: this._uid });
199
178
  }
200
179
  _onData(buffer) {
201
180
  this._buffer = Buffer.concat([this._buffer, buffer]);
202
181
  if (this._fenceCallback && this._buffer.length >= this._fence) {
203
182
  const callback = this._fenceCallback;
204
- this._fenceCallback = undefined;
183
+ this._fenceCallback = void 0;
205
184
  callback();
206
185
  }
207
186
  }
208
187
  socketConnected(host, port) {
209
- this._writeBytes(Buffer.from([0x05, SocksReply.Succeeded, 0x00,
210
- // RSV
211
- ...ipToSocksAddress(host),
212
- // ATYP, Address
213
- port >> 8, port & 0xFF // Port
188
+ this._writeBytes(Buffer.from([
189
+ 5,
190
+ 0 /* Succeeded */,
191
+ 0,
192
+ // RSV
193
+ ...ipToSocksAddress(host),
194
+ // ATYP, Address
195
+ port >> 8,
196
+ port & 255
197
+ // Port
214
198
  ]));
215
- this._socket.on('data', data => this._client.onSocketData({
216
- uid: this._uid,
217
- data
218
- }));
199
+ this._socket.on("data", (data) => this._client.onSocketData({ uid: this._uid, data }));
219
200
  }
220
201
  socketFailed(errorCode) {
221
- const buffer = Buffer.from([0x05, 0, 0x00,
222
- // RSV
223
- ...ipToSocksAddress('0.0.0.0'),
224
- // ATYP, Address
225
- 0, 0 // Port
202
+ const buffer = Buffer.from([
203
+ 5,
204
+ 0,
205
+ 0,
206
+ // RSV
207
+ ...ipToSocksAddress("0.0.0.0"),
208
+ // ATYP, Address
209
+ 0,
210
+ 0
211
+ // Port
226
212
  ]);
227
213
  switch (errorCode) {
228
- case 'ENOENT':
229
- case 'ENOTFOUND':
230
- case 'ETIMEDOUT':
231
- case 'EHOSTUNREACH':
232
- buffer[1] = SocksReply.HostUnreachable;
214
+ case "ENOENT":
215
+ case "ENOTFOUND":
216
+ case "ETIMEDOUT":
217
+ case "EHOSTUNREACH":
218
+ buffer[1] = 4 /* HostUnreachable */;
233
219
  break;
234
- case 'ENETUNREACH':
235
- buffer[1] = SocksReply.NetworkUnreachable;
220
+ case "ENETUNREACH":
221
+ buffer[1] = 3 /* NetworkUnreachable */;
236
222
  break;
237
- case 'ECONNREFUSED':
238
- buffer[1] = SocksReply.ConnectionRefused;
223
+ case "ECONNREFUSED":
224
+ buffer[1] = 5 /* ConnectionRefused */;
239
225
  break;
240
- case 'ERULESET':
241
- buffer[1] = SocksReply.NotAllowedByRuleSet;
226
+ case "ERULESET":
227
+ buffer[1] = 2 /* NotAllowedByRuleSet */;
242
228
  break;
243
229
  }
244
230
  this._writeBytes(buffer);
@@ -255,100 +241,108 @@ class SocksConnection {
255
241
  }
256
242
  }
257
243
  function hexToNumber(hex) {
258
- // Note: parseInt has a few issues including ignoring trailing characters and allowing leading 0x.
259
244
  return [...hex].reduce((value, digit) => {
260
245
  const code = digit.charCodeAt(0);
261
246
  if (code >= 48 && code <= 57)
262
- // 0..9
263
247
  return value + code;
264
248
  if (code >= 97 && code <= 102)
265
- // a..f
266
249
  return value + (code - 97) + 10;
267
250
  if (code >= 65 && code <= 70)
268
- // A..F
269
251
  return value + (code - 65) + 10;
270
- throw new Error('Invalid IPv6 token ' + hex);
252
+ throw new Error("Invalid IPv6 token " + hex);
271
253
  }, 0);
272
254
  }
273
255
  function ipToSocksAddress(address) {
274
- if (_net.default.isIPv4(address)) {
275
- return [0x01,
276
- // IPv4
277
- ...address.split('.', 4).map(t => +t & 0xFF) // Address
256
+ if (import_net.default.isIPv4(address)) {
257
+ return [
258
+ 1,
259
+ // IPv4
260
+ ...address.split(".", 4).map((t) => +t & 255)
261
+ // Address
278
262
  ];
279
263
  }
280
- if (_net.default.isIPv6(address)) {
281
- const result = [0x04]; // IPv6
282
- const tokens = address.split(':', 8);
283
- while (tokens.length < 8) tokens.unshift('');
264
+ if (import_net.default.isIPv6(address)) {
265
+ const result = [4];
266
+ const tokens = address.split(":", 8);
267
+ while (tokens.length < 8)
268
+ tokens.unshift("");
284
269
  for (const token of tokens) {
285
270
  const value = hexToNumber(token);
286
- result.push(value >> 8 & 0xFF, value & 0xFF); // Big-endian
271
+ result.push(value >> 8 & 255, value & 255);
287
272
  }
288
273
  return result;
289
274
  }
290
- throw new Error('Only IPv4 and IPv6 addresses are supported');
275
+ throw new Error("Only IPv4 and IPv6 addresses are supported");
291
276
  }
292
277
  function starMatchToRegex(pattern) {
293
- const source = pattern.split('*').map(s => {
294
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
295
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
296
- }).join('.*');
297
- return new RegExp('^' + source + '$');
278
+ const source = pattern.split("*").map((s) => {
279
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
280
+ }).join(".*");
281
+ return new RegExp("^" + source + "$");
298
282
  }
299
-
300
- // This follows "Proxy bypass rules" syntax without implicit and negative rules.
301
- // https://source.chromium.org/chromium/chromium/src/+/main:net/docs/proxy.md;l=331
302
283
  function parsePattern(pattern) {
303
- if (!pattern) return () => false;
304
- const matchers = pattern.split(',').map(token => {
284
+ if (!pattern)
285
+ return () => false;
286
+ const matchers = pattern.split(",").map((token) => {
305
287
  const match = token.match(/^(.*?)(?::(\d+))?$/);
306
- if (!match) throw new Error(`Unsupported token "${token}" in pattern "${pattern}"`);
307
- const tokenPort = match[2] ? +match[2] : undefined;
308
- const portMatches = port => tokenPort === undefined || tokenPort === port;
288
+ if (!match)
289
+ throw new Error(`Unsupported token "${token}" in pattern "${pattern}"`);
290
+ const tokenPort = match[2] ? +match[2] : void 0;
291
+ const portMatches = (port) => tokenPort === void 0 || tokenPort === port;
309
292
  let tokenHost = match[1];
310
- if (tokenHost === '<loopback>') {
293
+ if (tokenHost === "<loopback>") {
311
294
  return (host, port) => {
312
- if (!portMatches(port)) return false;
313
- return host === 'localhost' || host.endsWith('.localhost') || host === '127.0.0.1' || host === '[::1]';
295
+ if (!portMatches(port))
296
+ return false;
297
+ return host === "localhost" || host.endsWith(".localhost") || host === "127.0.0.1" || host === "[::1]";
314
298
  };
315
299
  }
316
- if (tokenHost === '*') return (host, port) => portMatches(port);
317
- if (_net.default.isIPv4(tokenHost) || _net.default.isIPv6(tokenHost)) return (host, port) => host === tokenHost && portMatches(port);
318
- if (tokenHost[0] === '.') tokenHost = '*' + tokenHost;
300
+ if (tokenHost === "*")
301
+ return (host, port) => portMatches(port);
302
+ if (import_net.default.isIPv4(tokenHost) || import_net.default.isIPv6(tokenHost))
303
+ return (host, port) => host === tokenHost && portMatches(port);
304
+ if (tokenHost[0] === ".")
305
+ tokenHost = "*" + tokenHost;
319
306
  const tokenRegex = starMatchToRegex(tokenHost);
320
307
  return (host, port) => {
321
- if (!portMatches(port)) return false;
322
- if (_net.default.isIPv4(host) || _net.default.isIPv6(host)) return false;
308
+ if (!portMatches(port))
309
+ return false;
310
+ if (import_net.default.isIPv4(host) || import_net.default.isIPv6(host))
311
+ return false;
323
312
  return !!host.match(tokenRegex);
324
313
  };
325
314
  });
326
- return (host, port) => matchers.some(matcher => matcher(host, port));
315
+ return (host, port) => matchers.some((matcher) => matcher(host, port));
327
316
  }
328
- class SocksProxy extends _events.default {
317
+ class SocksProxy extends import_events.default {
329
318
  constructor() {
330
319
  super();
331
- this._server = void 0;
332
- this._connections = new Map();
333
- this._sockets = new Set();
320
+ this._connections = /* @__PURE__ */ new Map();
321
+ this._sockets = /* @__PURE__ */ new Set();
334
322
  this._closed = false;
335
- this._port = void 0;
336
323
  this._patternMatcher = () => false;
337
- this._directSockets = new Map();
338
- this._server = new _net.default.Server(socket => {
339
- const uid = (0, _crypto.createGuid)();
324
+ this._directSockets = /* @__PURE__ */ new Map();
325
+ this._server = new import_net.default.Server((socket) => {
326
+ const uid = (0, import_crypto.createGuid)();
340
327
  const connection = new SocksConnection(uid, socket, this);
341
328
  this._connections.set(uid, connection);
342
329
  });
343
- this._server.on('connection', socket => {
330
+ this._server.on("connection", (socket) => {
344
331
  if (this._closed) {
345
332
  socket.destroy();
346
333
  return;
347
334
  }
348
335
  this._sockets.add(socket);
349
- socket.once('close', () => this._sockets.delete(socket));
336
+ socket.once("close", () => this._sockets.delete(socket));
350
337
  });
351
338
  }
339
+ static {
340
+ this.Events = {
341
+ SocksRequested: "socksRequested",
342
+ SocksData: "socksData",
343
+ SocksClosed: "socksClosed"
344
+ };
345
+ }
352
346
  setPattern(pattern) {
353
347
  try {
354
348
  this._patternMatcher = parsePattern(pattern);
@@ -358,49 +352,44 @@ class SocksProxy extends _events.default {
358
352
  }
359
353
  async _handleDirect(request) {
360
354
  try {
361
- var _this$_connections$ge4;
362
- const socket = await (0, _happyEyeballs.createSocket)(request.host, request.port);
363
- socket.on('data', data => {
364
- var _this$_connections$ge;
365
- return (_this$_connections$ge = this._connections.get(request.uid)) === null || _this$_connections$ge === void 0 ? void 0 : _this$_connections$ge.sendData(data);
366
- });
367
- socket.on('error', error => {
368
- var _this$_connections$ge2;
369
- (_this$_connections$ge2 = this._connections.get(request.uid)) === null || _this$_connections$ge2 === void 0 || _this$_connections$ge2.error(error.message);
355
+ const socket = await (0, import_happyEyeballs.createSocket)(request.host, request.port);
356
+ socket.on("data", (data) => this._connections.get(request.uid)?.sendData(data));
357
+ socket.on("error", (error) => {
358
+ this._connections.get(request.uid)?.error(error.message);
370
359
  this._directSockets.delete(request.uid);
371
360
  });
372
- socket.on('end', () => {
373
- var _this$_connections$ge3;
374
- (_this$_connections$ge3 = this._connections.get(request.uid)) === null || _this$_connections$ge3 === void 0 || _this$_connections$ge3.end();
361
+ socket.on("end", () => {
362
+ this._connections.get(request.uid)?.end();
375
363
  this._directSockets.delete(request.uid);
376
364
  });
377
365
  const localAddress = socket.localAddress;
378
366
  const localPort = socket.localPort;
379
367
  this._directSockets.set(request.uid, socket);
380
- (_this$_connections$ge4 = this._connections.get(request.uid)) === null || _this$_connections$ge4 === void 0 || _this$_connections$ge4.socketConnected(localAddress, localPort);
368
+ this._connections.get(request.uid)?.socketConnected(localAddress, localPort);
381
369
  } catch (error) {
382
- var _this$_connections$ge5;
383
- (_this$_connections$ge5 = this._connections.get(request.uid)) === null || _this$_connections$ge5 === void 0 || _this$_connections$ge5.socketFailed(error.code);
370
+ this._connections.get(request.uid)?.socketFailed(error.code);
384
371
  }
385
372
  }
386
373
  port() {
387
374
  return this._port;
388
375
  }
389
376
  async listen(port, hostname) {
390
- return new Promise(f => {
377
+ return new Promise((f) => {
391
378
  this._server.listen(port, hostname, () => {
392
- const port = this._server.address().port;
393
- this._port = port;
394
- f(port);
379
+ const port2 = this._server.address().port;
380
+ this._port = port2;
381
+ f(port2);
395
382
  });
396
383
  });
397
384
  }
398
385
  async close() {
399
- if (this._closed) return;
386
+ if (this._closed)
387
+ return;
400
388
  this._closed = true;
401
- for (const socket of this._sockets) socket.destroy();
389
+ for (const socket of this._sockets)
390
+ socket.destroy();
402
391
  this._sockets.clear();
403
- await new Promise(f => this._server.close(f));
392
+ await new Promise((f) => this._server.close(f));
404
393
  }
405
394
  onSocketRequested(payload) {
406
395
  if (!this._patternMatcher(payload.host, payload.port)) {
@@ -426,145 +415,97 @@ class SocksProxy extends _events.default {
426
415
  }
427
416
  this.emit(SocksProxy.Events.SocksClosed, payload);
428
417
  }
429
- socketConnected({
430
- uid,
431
- host,
432
- port
433
- }) {
434
- var _this$_connections$ge6;
435
- (_this$_connections$ge6 = this._connections.get(uid)) === null || _this$_connections$ge6 === void 0 || _this$_connections$ge6.socketConnected(host, port);
436
- }
437
- socketFailed({
438
- uid,
439
- errorCode
440
- }) {
441
- var _this$_connections$ge7;
442
- (_this$_connections$ge7 = this._connections.get(uid)) === null || _this$_connections$ge7 === void 0 || _this$_connections$ge7.socketFailed(errorCode);
443
- }
444
- sendSocketData({
445
- uid,
446
- data
447
- }) {
448
- var _this$_connections$ge8;
449
- (_this$_connections$ge8 = this._connections.get(uid)) === null || _this$_connections$ge8 === void 0 || _this$_connections$ge8.sendData(data);
450
- }
451
- sendSocketEnd({
452
- uid
453
- }) {
454
- var _this$_connections$ge9;
455
- (_this$_connections$ge9 = this._connections.get(uid)) === null || _this$_connections$ge9 === void 0 || _this$_connections$ge9.end();
456
- }
457
- sendSocketError({
458
- uid,
459
- error
460
- }) {
461
- var _this$_connections$ge10;
462
- (_this$_connections$ge10 = this._connections.get(uid)) === null || _this$_connections$ge10 === void 0 || _this$_connections$ge10.error(error);
418
+ socketConnected({ uid, host, port }) {
419
+ this._connections.get(uid)?.socketConnected(host, port);
420
+ }
421
+ socketFailed({ uid, errorCode }) {
422
+ this._connections.get(uid)?.socketFailed(errorCode);
423
+ }
424
+ sendSocketData({ uid, data }) {
425
+ this._connections.get(uid)?.sendData(data);
426
+ }
427
+ sendSocketEnd({ uid }) {
428
+ this._connections.get(uid)?.end();
429
+ }
430
+ sendSocketError({ uid, error }) {
431
+ this._connections.get(uid)?.error(error);
463
432
  }
464
433
  }
465
- exports.SocksProxy = SocksProxy;
466
- SocksProxy.Events = {
467
- SocksRequested: 'socksRequested',
468
- SocksData: 'socksData',
469
- SocksClosed: 'socksClosed'
470
- };
471
- class SocksProxyHandler extends _events.default {
434
+ class SocksProxyHandler extends import_events.default {
472
435
  constructor(pattern, redirectPortForTest) {
473
436
  super();
474
- this._sockets = new Map();
437
+ this._sockets = /* @__PURE__ */ new Map();
475
438
  this._patternMatcher = () => false;
476
- this._redirectPortForTest = void 0;
477
439
  this._patternMatcher = parsePattern(pattern);
478
440
  this._redirectPortForTest = redirectPortForTest;
479
441
  }
442
+ static {
443
+ this.Events = {
444
+ SocksConnected: "socksConnected",
445
+ SocksData: "socksData",
446
+ SocksError: "socksError",
447
+ SocksFailed: "socksFailed",
448
+ SocksEnd: "socksEnd"
449
+ };
450
+ }
480
451
  cleanup() {
481
- for (const uid of this._sockets.keys()) this.socketClosed({
482
- uid
483
- });
452
+ for (const uid of this._sockets.keys())
453
+ this.socketClosed({ uid });
484
454
  }
485
- async socketRequested({
486
- uid,
487
- host,
488
- port
489
- }) {
490
- _debugLogger.debugLogger.log('socks', `[${uid}] => request ${host}:${port}`);
455
+ async socketRequested({ uid, host, port }) {
456
+ import_debugLogger.debugLogger.log("socks", `[${uid}] => request ${host}:${port}`);
491
457
  if (!this._patternMatcher(host, port)) {
492
- const payload = {
493
- uid,
494
- errorCode: 'ERULESET'
495
- };
496
- _debugLogger.debugLogger.log('socks', `[${uid}] <= pattern error ${payload.errorCode}`);
458
+ const payload = { uid, errorCode: "ERULESET" };
459
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= pattern error ${payload.errorCode}`);
497
460
  this.emit(SocksProxyHandler.Events.SocksFailed, payload);
498
461
  return;
499
462
  }
500
- if (host === 'local.playwright') host = 'localhost';
463
+ if (host === "local.playwright")
464
+ host = "localhost";
501
465
  try {
502
- if (this._redirectPortForTest) port = this._redirectPortForTest;
503
- const socket = await (0, _happyEyeballs.createSocket)(host, port);
504
- socket.on('data', data => {
505
- const payload = {
506
- uid,
507
- data
508
- };
509
- this.emit(SocksProxyHandler.Events.SocksData, payload);
466
+ if (this._redirectPortForTest)
467
+ port = this._redirectPortForTest;
468
+ const socket = await (0, import_happyEyeballs.createSocket)(host, port);
469
+ socket.on("data", (data) => {
470
+ const payload2 = { uid, data };
471
+ this.emit(SocksProxyHandler.Events.SocksData, payload2);
510
472
  });
511
- socket.on('error', error => {
512
- const payload = {
513
- uid,
514
- error: error.message
515
- };
516
- _debugLogger.debugLogger.log('socks', `[${uid}] <= network socket error ${payload.error}`);
517
- this.emit(SocksProxyHandler.Events.SocksError, payload);
473
+ socket.on("error", (error) => {
474
+ const payload2 = { uid, error: error.message };
475
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= network socket error ${payload2.error}`);
476
+ this.emit(SocksProxyHandler.Events.SocksError, payload2);
518
477
  this._sockets.delete(uid);
519
478
  });
520
- socket.on('end', () => {
521
- const payload = {
522
- uid
523
- };
524
- _debugLogger.debugLogger.log('socks', `[${uid}] <= network socket closed`);
525
- this.emit(SocksProxyHandler.Events.SocksEnd, payload);
479
+ socket.on("end", () => {
480
+ const payload2 = { uid };
481
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= network socket closed`);
482
+ this.emit(SocksProxyHandler.Events.SocksEnd, payload2);
526
483
  this._sockets.delete(uid);
527
484
  });
528
485
  const localAddress = socket.localAddress;
529
486
  const localPort = socket.localPort;
530
487
  this._sockets.set(uid, socket);
531
- const payload = {
532
- uid,
533
- host: localAddress,
534
- port: localPort
535
- };
536
- _debugLogger.debugLogger.log('socks', `[${uid}] <= connected to network ${payload.host}:${payload.port}`);
488
+ const payload = { uid, host: localAddress, port: localPort };
489
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= connected to network ${payload.host}:${payload.port}`);
537
490
  this.emit(SocksProxyHandler.Events.SocksConnected, payload);
538
491
  } catch (error) {
539
- const payload = {
540
- uid,
541
- errorCode: error.code
542
- };
543
- _debugLogger.debugLogger.log('socks', `[${uid}] <= connect error ${payload.errorCode}`);
492
+ const payload = { uid, errorCode: error.code };
493
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= connect error ${payload.errorCode}`);
544
494
  this.emit(SocksProxyHandler.Events.SocksFailed, payload);
545
495
  }
546
496
  }
547
- sendSocketData({
548
- uid,
549
- data
550
- }) {
551
- var _this$_sockets$get;
552
- (_this$_sockets$get = this._sockets.get(uid)) === null || _this$_sockets$get === void 0 || _this$_sockets$get.write(data);
553
- }
554
- socketClosed({
555
- uid
556
- }) {
557
- var _this$_sockets$get2;
558
- _debugLogger.debugLogger.log('socks', `[${uid}] <= browser socket closed`);
559
- (_this$_sockets$get2 = this._sockets.get(uid)) === null || _this$_sockets$get2 === void 0 || _this$_sockets$get2.destroy();
497
+ sendSocketData({ uid, data }) {
498
+ this._sockets.get(uid)?.write(data);
499
+ }
500
+ socketClosed({ uid }) {
501
+ import_debugLogger.debugLogger.log("socks", `[${uid}] <= browser socket closed`);
502
+ this._sockets.get(uid)?.destroy();
560
503
  this._sockets.delete(uid);
561
504
  }
562
505
  }
563
- exports.SocksProxyHandler = SocksProxyHandler;
564
- SocksProxyHandler.Events = {
565
- SocksConnected: 'socksConnected',
566
- SocksData: 'socksData',
567
- SocksError: 'socksError',
568
- SocksFailed: 'socksFailed',
569
- SocksEnd: 'socksEnd'
570
- };
506
+ // Annotate the CommonJS export names for ESM import in node:
507
+ 0 && (module.exports = {
508
+ SocksProxy,
509
+ SocksProxyHandler,
510
+ parsePattern
511
+ });