dsh-remote 0.8.46 → 0.8.48

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 (391) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +361 -361
  3. package/README.md +368 -368
  4. package/cordis.patch.yml +9 -9
  5. package/lib/binding.js +172 -172
  6. package/lib/client.js +3637 -3637
  7. package/lib/credential.js +177 -177
  8. package/lib/deploy-tasks.js +142 -142
  9. package/lib/errors.js +87 -87
  10. package/lib/file-reference.js +457 -457
  11. package/lib/forwards.js +258 -258
  12. package/lib/hostkey.js +108 -108
  13. package/lib/http-transport.js +196 -196
  14. package/lib/ignore.js +202 -156
  15. package/lib/index.js +3779 -3747
  16. package/lib/openssh.js +838 -838
  17. package/lib/paths.js +225 -225
  18. package/lib/pool.js +757 -757
  19. package/lib/registry.js +95 -95
  20. package/lib/remote-fs.js +148 -143
  21. package/lib/routes-fs.js +233 -233
  22. package/lib/search.js +235 -230
  23. package/lib/sftp-surface.js +76 -76
  24. package/lib/sshconfig.js +454 -454
  25. package/lib/sync.js +275 -275
  26. package/lib/tasks.js +95 -95
  27. package/lib/telemetry.js +213 -213
  28. package/lib/update.js +472 -472
  29. package/lib/web-attach.js +850 -850
  30. package/lib/web-deploy-skill.js +205 -205
  31. package/lib/web-deploy.js +694 -694
  32. package/node_modules/asn1/Jenkinsfile +65 -0
  33. package/node_modules/asn1/LICENSE +19 -0
  34. package/node_modules/asn1/README.md +50 -0
  35. package/node_modules/asn1/lib/ber/errors.js +13 -0
  36. package/node_modules/asn1/lib/ber/index.js +27 -0
  37. package/node_modules/asn1/lib/ber/reader.js +262 -0
  38. package/node_modules/asn1/lib/ber/types.js +36 -0
  39. package/node_modules/asn1/lib/ber/writer.js +317 -0
  40. package/node_modules/asn1/lib/index.js +20 -0
  41. package/node_modules/asn1/package.json +31 -0
  42. package/node_modules/bcrypt-pbkdf/CONTRIBUTING.md +13 -0
  43. package/node_modules/bcrypt-pbkdf/LICENSE +66 -0
  44. package/node_modules/bcrypt-pbkdf/README.md +45 -0
  45. package/node_modules/bcrypt-pbkdf/index.js +556 -0
  46. package/node_modules/bcrypt-pbkdf/package.json +15 -0
  47. package/node_modules/buildcheck/.eslintrc.js +5 -0
  48. package/node_modules/buildcheck/.github/workflows/ci.yml +88 -0
  49. package/node_modules/buildcheck/.github/workflows/lint.yml +27 -0
  50. package/node_modules/buildcheck/.npmignore +3 -0
  51. package/node_modules/buildcheck/LICENSE +19 -0
  52. package/node_modules/buildcheck/README.md +106 -0
  53. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  54. package/node_modules/buildcheck/lib/findvs.js +361 -0
  55. package/node_modules/buildcheck/lib/index.js +738 -0
  56. package/node_modules/buildcheck/package.json +36 -0
  57. package/node_modules/buildcheck/test/test.js +8 -0
  58. package/node_modules/cpu-features/.eslintrc.js +5 -0
  59. package/node_modules/cpu-features/.github/workflows/ci.yml +74 -0
  60. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  61. package/node_modules/cpu-features/LICENSE +19 -0
  62. package/node_modules/cpu-features/README.md +59 -0
  63. package/node_modules/cpu-features/binding.gyp +16 -0
  64. package/node_modules/cpu-features/buildcheck.js +32 -0
  65. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  66. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  67. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  68. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  69. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  70. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  71. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  72. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  73. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  74. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  75. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  76. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  77. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  78. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  79. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  80. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  81. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  82. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  83. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  84. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  85. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  86. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  87. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  88. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  89. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  90. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  91. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  92. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  93. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  94. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  95. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  96. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  97. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  98. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  99. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  100. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  101. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  102. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  103. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +105 -0
  104. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  105. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  106. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  107. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  108. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  109. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  110. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  111. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  112. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  113. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  114. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  115. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  116. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  117. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  118. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  119. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  120. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  121. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  122. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  123. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  124. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  125. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  126. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  127. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  128. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  129. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  130. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  131. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  132. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  133. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  134. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  135. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  136. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  137. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  138. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  139. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  140. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  141. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  142. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  143. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  144. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  145. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  146. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  147. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  148. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  149. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  150. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  151. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  152. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  153. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  154. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  155. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  156. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  157. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  158. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  159. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  160. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  161. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  162. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  163. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  164. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  165. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  166. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  167. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  168. package/node_modules/cpu-features/lib/index.js +5 -0
  169. package/node_modules/cpu-features/package.json +40 -0
  170. package/node_modules/cpu-features/src/binding.cc +151 -0
  171. package/node_modules/cpu-features/test/test.js +12 -0
  172. package/node_modules/nan/.github/workflows/ci.yml +46 -0
  173. package/node_modules/nan/.pre-commit-config.yaml +8 -0
  174. package/node_modules/nan/CHANGELOG.md +605 -0
  175. package/node_modules/nan/CMakeLists.txt +138 -0
  176. package/node_modules/nan/LICENSE.md +9 -0
  177. package/node_modules/nan/README.md +457 -0
  178. package/node_modules/nan/doc/asyncworker.md +146 -0
  179. package/node_modules/nan/doc/buffers.md +54 -0
  180. package/node_modules/nan/doc/callback.md +76 -0
  181. package/node_modules/nan/doc/converters.md +41 -0
  182. package/node_modules/nan/doc/errors.md +226 -0
  183. package/node_modules/nan/doc/json.md +62 -0
  184. package/node_modules/nan/doc/maybe_types.md +583 -0
  185. package/node_modules/nan/doc/methods.md +689 -0
  186. package/node_modules/nan/doc/new.md +147 -0
  187. package/node_modules/nan/doc/node_misc.md +123 -0
  188. package/node_modules/nan/doc/object_wrappers.md +263 -0
  189. package/node_modules/nan/doc/persistent.md +296 -0
  190. package/node_modules/nan/doc/scopes.md +73 -0
  191. package/node_modules/nan/doc/script.md +58 -0
  192. package/node_modules/nan/doc/string_bytes.md +81 -0
  193. package/node_modules/nan/doc/v8_internals.md +211 -0
  194. package/node_modules/nan/doc/v8_misc.md +85 -0
  195. package/node_modules/nan/include_dirs.js +1 -0
  196. package/node_modules/nan/nan.h +3202 -0
  197. package/node_modules/nan/nan_callbacks.h +141 -0
  198. package/node_modules/nan/nan_callbacks_12_inl.h +730 -0
  199. package/node_modules/nan/nan_callbacks_pre_12_inl.h +528 -0
  200. package/node_modules/nan/nan_converters.h +72 -0
  201. package/node_modules/nan/nan_converters_43_inl.h +68 -0
  202. package/node_modules/nan/nan_converters_pre_43_inl.h +42 -0
  203. package/node_modules/nan/nan_define_own_property_helper.h +29 -0
  204. package/node_modules/nan/nan_implementation_12_inl.h +446 -0
  205. package/node_modules/nan/nan_implementation_pre_12_inl.h +263 -0
  206. package/node_modules/nan/nan_json.h +166 -0
  207. package/node_modules/nan/nan_maybe_43_inl.h +360 -0
  208. package/node_modules/nan/nan_maybe_pre_43_inl.h +268 -0
  209. package/node_modules/nan/nan_new.h +340 -0
  210. package/node_modules/nan/nan_object_wrap.h +156 -0
  211. package/node_modules/nan/nan_persistent_12_inl.h +132 -0
  212. package/node_modules/nan/nan_persistent_pre_12_inl.h +242 -0
  213. package/node_modules/nan/nan_private.h +73 -0
  214. package/node_modules/nan/nan_scriptorigin.h +97 -0
  215. package/node_modules/nan/nan_string_bytes.h +305 -0
  216. package/node_modules/nan/nan_typedarray_contents.h +96 -0
  217. package/node_modules/nan/nan_weak.h +453 -0
  218. package/node_modules/nan/package.json +38 -0
  219. package/node_modules/nan/tools/1to2.js +412 -0
  220. package/node_modules/nan/tools/README.md +14 -0
  221. package/node_modules/nan/tools/package.json +19 -0
  222. package/node_modules/safer-buffer/LICENSE +21 -0
  223. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  224. package/node_modules/safer-buffer/Readme.md +156 -0
  225. package/node_modules/safer-buffer/dangerous.js +58 -0
  226. package/node_modules/safer-buffer/package.json +34 -0
  227. package/node_modules/safer-buffer/safer.js +77 -0
  228. package/node_modules/safer-buffer/tests.js +406 -0
  229. package/node_modules/ssh2/.eslintignore +4 -0
  230. package/node_modules/ssh2/.eslintrc.js +5 -0
  231. package/node_modules/ssh2/.github/workflows/ci.yml +110 -0
  232. package/node_modules/ssh2/.github/workflows/lint.yml +27 -0
  233. package/node_modules/ssh2/LICENSE +19 -0
  234. package/node_modules/ssh2/README.md +1529 -0
  235. package/node_modules/ssh2/SFTP.md +413 -0
  236. package/node_modules/ssh2/examples/server-chat.js +238 -0
  237. package/node_modules/ssh2/examples/sftp-server-download-only.js +134 -0
  238. package/node_modules/ssh2/install.js +27 -0
  239. package/node_modules/ssh2/lib/Channel.js +295 -0
  240. package/node_modules/ssh2/lib/agent.js +1123 -0
  241. package/node_modules/ssh2/lib/client.js +2176 -0
  242. package/node_modules/ssh2/lib/http-agents.js +84 -0
  243. package/node_modules/ssh2/lib/index.js +44 -0
  244. package/node_modules/ssh2/lib/keygen.js +582 -0
  245. package/node_modules/ssh2/lib/protocol/Protocol.js +2136 -0
  246. package/node_modules/ssh2/lib/protocol/SFTP.js +4052 -0
  247. package/node_modules/ssh2/lib/protocol/constants.js +356 -0
  248. package/node_modules/ssh2/lib/protocol/crypto/binding.gyp +23 -0
  249. package/node_modules/ssh2/lib/protocol/crypto/poly1305.js +43 -0
  250. package/node_modules/ssh2/lib/protocol/crypto/src/binding.cc +2300 -0
  251. package/node_modules/ssh2/lib/protocol/crypto.js +1602 -0
  252. package/node_modules/ssh2/lib/protocol/handlers.js +16 -0
  253. package/node_modules/ssh2/lib/protocol/handlers.misc.js +1285 -0
  254. package/node_modules/ssh2/lib/protocol/kex.js +1908 -0
  255. package/node_modules/ssh2/lib/protocol/keyParser.js +1484 -0
  256. package/node_modules/ssh2/lib/protocol/node-fs-compat.js +115 -0
  257. package/node_modules/ssh2/lib/protocol/utils.js +356 -0
  258. package/node_modules/ssh2/lib/protocol/zlib.js +255 -0
  259. package/node_modules/ssh2/lib/server.js +1380 -0
  260. package/node_modules/ssh2/lib/utils.js +336 -0
  261. package/node_modules/ssh2/package.json +49 -0
  262. package/node_modules/ssh2/test/common.js +316 -0
  263. package/node_modules/ssh2/test/fixtures/bad_rsa_private_key +26 -0
  264. package/node_modules/ssh2/test/fixtures/https_cert.pem +33 -0
  265. package/node_modules/ssh2/test/fixtures/https_key.pem +52 -0
  266. package/node_modules/ssh2/test/fixtures/id_dsa +12 -0
  267. package/node_modules/ssh2/test/fixtures/id_ecdsa +5 -0
  268. package/node_modules/ssh2/test/fixtures/id_rsa +15 -0
  269. package/node_modules/ssh2/test/fixtures/id_rsa.ppk +26 -0
  270. package/node_modules/ssh2/test/fixtures/id_rsa_enc +30 -0
  271. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa +21 -0
  272. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub +1 -0
  273. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub.result +7 -0
  274. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.result +7 -0
  275. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc +22 -0
  276. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub +1 -0
  277. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub.result +7 -0
  278. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.result +7 -0
  279. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm +23 -0
  280. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub +1 -0
  281. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub.result +7 -0
  282. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.result +7 -0
  283. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa +9 -0
  284. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub +1 -0
  285. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub.result +7 -0
  286. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.result +7 -0
  287. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc +10 -0
  288. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub +1 -0
  289. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub.result +8 -0
  290. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.result +7 -0
  291. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm +10 -0
  292. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub +1 -0
  293. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub.result +8 -0
  294. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.result +7 -0
  295. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519 +7 -0
  296. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub +1 -0
  297. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub.result +7 -0
  298. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.result +7 -0
  299. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa +27 -0
  300. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub +1 -0
  301. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub.result +7 -0
  302. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.result +7 -0
  303. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc +28 -0
  304. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub +1 -0
  305. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub.result +8 -0
  306. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.result +7 -0
  307. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm +29 -0
  308. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub +1 -0
  309. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub.result +8 -0
  310. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.result +7 -0
  311. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa +12 -0
  312. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub +1 -0
  313. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub.result +7 -0
  314. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.result +7 -0
  315. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc +15 -0
  316. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub +1 -0
  317. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub.result +8 -0
  318. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.result +7 -0
  319. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa +5 -0
  320. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub +1 -0
  321. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub.result +7 -0
  322. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.result +7 -0
  323. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc +8 -0
  324. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub +1 -0
  325. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub.result +8 -0
  326. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.result +7 -0
  327. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa +27 -0
  328. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub +1 -0
  329. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub.result +7 -0
  330. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.result +7 -0
  331. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc +30 -0
  332. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub +1 -0
  333. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub.result +8 -0
  334. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.result +7 -0
  335. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256 +54 -0
  336. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub +1 -0
  337. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub.result +6 -0
  338. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.result +6 -0
  339. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc +17 -0
  340. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc.result +7 -0
  341. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa +26 -0
  342. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa.result +7 -0
  343. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc +18 -0
  344. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc.result +7 -0
  345. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub +9 -0
  346. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub.result +7 -0
  347. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub +10 -0
  348. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub.result +7 -0
  349. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub +11 -0
  350. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub.result +7 -0
  351. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub +11 -0
  352. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub.result +7 -0
  353. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub +8 -0
  354. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub.result +7 -0
  355. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub +13 -0
  356. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub.result +7 -0
  357. package/node_modules/ssh2/test/fixtures/openssh_new_rsa +27 -0
  358. package/node_modules/ssh2/test/fixtures/ssh_host_dsa_key +12 -0
  359. package/node_modules/ssh2/test/fixtures/ssh_host_ecdsa_key +5 -0
  360. package/node_modules/ssh2/test/fixtures/ssh_host_rsa_key +15 -0
  361. package/node_modules/ssh2/test/test-exec.js +578 -0
  362. package/node_modules/ssh2/test/test-integration-openssh.js +486 -0
  363. package/node_modules/ssh2/test/test-keygen.js +60 -0
  364. package/node_modules/ssh2/test/test-misc-client-server.js +1460 -0
  365. package/node_modules/ssh2/test/test-openssh.js +261 -0
  366. package/node_modules/ssh2/test/test-protocol-crypto.js +631 -0
  367. package/node_modules/ssh2/test/test-protocol-keyparser.js +177 -0
  368. package/node_modules/ssh2/test/test-server-hostkeys.js +138 -0
  369. package/node_modules/ssh2/test/test-sftp.js +842 -0
  370. package/node_modules/ssh2/test/test-shell.js +109 -0
  371. package/node_modules/ssh2/test/test-userauth-agent-openssh.js +110 -0
  372. package/node_modules/ssh2/test/test-userauth-agent.js +171 -0
  373. package/node_modules/ssh2/test/test-userauth.js +611 -0
  374. package/node_modules/ssh2/test/test-worker-imports.js +25 -0
  375. package/node_modules/ssh2/test/test.js +20 -0
  376. package/node_modules/ssh2/util/build_pagent.bat +2 -0
  377. package/node_modules/ssh2/util/pagent.c +88 -0
  378. package/node_modules/ssh2/util/pagent.exe +0 -0
  379. package/node_modules/tweetnacl/.npmignore +4 -0
  380. package/node_modules/tweetnacl/AUTHORS.md +28 -0
  381. package/node_modules/tweetnacl/CHANGELOG.md +221 -0
  382. package/node_modules/tweetnacl/LICENSE +24 -0
  383. package/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  384. package/node_modules/tweetnacl/README.md +459 -0
  385. package/node_modules/tweetnacl/nacl-fast.js +2388 -0
  386. package/node_modules/tweetnacl/nacl-fast.min.js +2 -0
  387. package/node_modules/tweetnacl/nacl.d.ts +98 -0
  388. package/node_modules/tweetnacl/nacl.js +1175 -0
  389. package/node_modules/tweetnacl/nacl.min.js +1 -0
  390. package/node_modules/tweetnacl/package.json +58 -0
  391. package/package.json +96 -89
@@ -0,0 +1,336 @@
1
+ 'use strict';
2
+
3
+ const { SFTP } = require('./protocol/SFTP.js');
4
+
5
+ const MAX_CHANNEL = 2 ** 32 - 1;
6
+
7
+ function onChannelOpenFailure(self, recipient, info, cb) {
8
+ self._chanMgr.remove(recipient);
9
+ if (typeof cb !== 'function')
10
+ return;
11
+
12
+ let err;
13
+ if (info instanceof Error) {
14
+ err = info;
15
+ } else if (typeof info === 'object' && info !== null) {
16
+ err = new Error(`(SSH) Channel open failure: ${info.description}`);
17
+ err.reason = info.reason;
18
+ } else {
19
+ err = new Error(
20
+ '(SSH) Channel open failure: server closed channel unexpectedly'
21
+ );
22
+ err.reason = '';
23
+ }
24
+
25
+ cb(err);
26
+ }
27
+
28
+ function onCHANNEL_CLOSE(self, recipient, channel, err, dead) {
29
+ if (typeof channel === 'function') {
30
+ // We got CHANNEL_CLOSE instead of CHANNEL_OPEN_FAILURE when
31
+ // requesting to open a channel
32
+ onChannelOpenFailure(self, recipient, err, channel);
33
+ return;
34
+ }
35
+
36
+ if (typeof channel !== 'object' || channel === null)
37
+ return;
38
+
39
+ if (channel.incoming && channel.incoming.state === 'closed')
40
+ return;
41
+
42
+ self._chanMgr.remove(recipient);
43
+
44
+ if (channel.server && channel.constructor.name === 'Session')
45
+ return;
46
+
47
+ channel.incoming.state = 'closed';
48
+
49
+ if (channel.readable)
50
+ channel.push(null);
51
+ if (channel.server) {
52
+ if (channel.stderr.writable)
53
+ channel.stderr.end();
54
+ } else if (channel.stderr.readable) {
55
+ channel.stderr.push(null);
56
+ }
57
+
58
+ if (channel.constructor !== SFTP
59
+ && (channel.outgoing.state === 'open'
60
+ || channel.outgoing.state === 'eof')
61
+ && !dead) {
62
+ channel.close();
63
+ }
64
+ if (channel.outgoing.state === 'closing')
65
+ channel.outgoing.state = 'closed';
66
+
67
+ const readState = channel._readableState;
68
+ const writeState = channel._writableState;
69
+ if (writeState && !writeState.ending && !writeState.finished && !dead)
70
+ channel.end();
71
+
72
+ // Take care of any outstanding channel requests
73
+ const chanCallbacks = channel._callbacks;
74
+ channel._callbacks = [];
75
+ for (let i = 0; i < chanCallbacks.length; ++i)
76
+ chanCallbacks[i](true);
77
+
78
+ if (channel.server) {
79
+ if (!channel.readable
80
+ || channel.destroyed
81
+ || (readState && readState.endEmitted)) {
82
+ channel.emit('close');
83
+ } else {
84
+ channel.once('end', () => channel.emit('close'));
85
+ }
86
+ } else {
87
+ let doClose;
88
+ switch (channel.type) {
89
+ case 'direct-streamlocal@openssh.com':
90
+ case 'direct-tcpip':
91
+ doClose = () => channel.emit('close');
92
+ break;
93
+ default: {
94
+ // Align more with node child processes, where the close event gets
95
+ // the same arguments as the exit event
96
+ const exit = channel._exit;
97
+ doClose = () => {
98
+ if (exit.code === null)
99
+ channel.emit('close', exit.code, exit.signal, exit.dump, exit.desc);
100
+ else
101
+ channel.emit('close', exit.code);
102
+ };
103
+ }
104
+ }
105
+ if (!channel.readable
106
+ || channel.destroyed
107
+ || (readState && readState.endEmitted)) {
108
+ doClose();
109
+ } else {
110
+ channel.once('end', doClose);
111
+ }
112
+
113
+ const errReadState = channel.stderr._readableState;
114
+ if (!channel.stderr.readable
115
+ || channel.stderr.destroyed
116
+ || (errReadState && errReadState.endEmitted)) {
117
+ channel.stderr.emit('close');
118
+ } else {
119
+ channel.stderr.once('end', () => channel.stderr.emit('close'));
120
+ }
121
+ }
122
+ }
123
+
124
+ class ChannelManager {
125
+ constructor(client) {
126
+ this._client = client;
127
+ this._channels = {};
128
+ this._cur = -1;
129
+ this._count = 0;
130
+ }
131
+ add(val) {
132
+ // Attempt to reserve an id
133
+
134
+ let id;
135
+ // Optimized paths
136
+ if (this._cur < MAX_CHANNEL) {
137
+ id = ++this._cur;
138
+ } else if (this._count === 0) {
139
+ // Revert and reset back to fast path once we no longer have any channels
140
+ // open
141
+ this._cur = 0;
142
+ id = 0;
143
+ } else {
144
+ // Slower lookup path
145
+
146
+ // This path is triggered we have opened at least MAX_CHANNEL channels
147
+ // while having at least one channel open at any given time, so we have
148
+ // to search for a free id.
149
+ const channels = this._channels;
150
+ for (let i = 0; i < MAX_CHANNEL; ++i) {
151
+ if (channels[i] === undefined) {
152
+ id = i;
153
+ break;
154
+ }
155
+ }
156
+ }
157
+
158
+ if (id === undefined)
159
+ return -1;
160
+
161
+ this._channels[id] = (val || true);
162
+ ++this._count;
163
+
164
+ return id;
165
+ }
166
+ update(id, val) {
167
+ if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))
168
+ throw new Error(`Invalid channel id: ${id}`);
169
+
170
+ if (val && this._channels[id])
171
+ this._channels[id] = val;
172
+ }
173
+ get(id) {
174
+ if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))
175
+ throw new Error(`Invalid channel id: ${id}`);
176
+
177
+ return this._channels[id];
178
+ }
179
+ remove(id) {
180
+ if (typeof id !== 'number' || id < 0 || id >= MAX_CHANNEL || !isFinite(id))
181
+ throw new Error(`Invalid channel id: ${id}`);
182
+
183
+ if (this._channels[id]) {
184
+ delete this._channels[id];
185
+ if (this._count)
186
+ --this._count;
187
+ }
188
+ }
189
+ cleanup(err) {
190
+ const channels = this._channels;
191
+ this._channels = {};
192
+ this._cur = -1;
193
+ this._count = 0;
194
+
195
+ const chanIDs = Object.keys(channels);
196
+ const client = this._client;
197
+ for (let i = 0; i < chanIDs.length; ++i) {
198
+ const id = +chanIDs[i];
199
+ const channel = channels[id];
200
+ onCHANNEL_CLOSE(client, id, channel._channel || channel, err, true);
201
+ }
202
+ }
203
+ }
204
+
205
+ const isRegExp = (() => {
206
+ const toString = Object.prototype.toString;
207
+ return (val) => toString.call(val) === '[object RegExp]';
208
+ })();
209
+
210
+ function generateAlgorithmList(algoList, defaultList, supportedList) {
211
+ if (Array.isArray(algoList) && algoList.length > 0) {
212
+ // Exact list
213
+ for (let i = 0; i < algoList.length; ++i) {
214
+ if (supportedList.indexOf(algoList[i]) === -1)
215
+ throw new Error(`Unsupported algorithm: ${algoList[i]}`);
216
+ }
217
+ return algoList;
218
+ }
219
+
220
+ if (typeof algoList === 'object' && algoList !== null) {
221
+ // Operations based on the default list
222
+ const keys = Object.keys(algoList);
223
+ let list = defaultList;
224
+ for (let i = 0; i < keys.length; ++i) {
225
+ const key = keys[i];
226
+ let val = algoList[key];
227
+ switch (key) {
228
+ case 'append':
229
+ if (!Array.isArray(val))
230
+ val = [val];
231
+ if (Array.isArray(val)) {
232
+ for (let j = 0; j < val.length; ++j) {
233
+ const append = val[j];
234
+ if (typeof append === 'string') {
235
+ if (!append || list.indexOf(append) !== -1)
236
+ continue;
237
+ if (supportedList.indexOf(append) === -1)
238
+ throw new Error(`Unsupported algorithm: ${append}`);
239
+ if (list === defaultList)
240
+ list = list.slice();
241
+ list.push(append);
242
+ } else if (isRegExp(append)) {
243
+ for (let k = 0; k < supportedList.length; ++k) {
244
+ const algo = supportedList[k];
245
+ if (append.test(algo)) {
246
+ if (list.indexOf(algo) !== -1)
247
+ continue;
248
+ if (list === defaultList)
249
+ list = list.slice();
250
+ list.push(algo);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ break;
257
+ case 'prepend':
258
+ if (!Array.isArray(val))
259
+ val = [val];
260
+ if (Array.isArray(val)) {
261
+ for (let j = val.length; j >= 0; --j) {
262
+ const prepend = val[j];
263
+ if (typeof prepend === 'string') {
264
+ if (!prepend || list.indexOf(prepend) !== -1)
265
+ continue;
266
+ if (supportedList.indexOf(prepend) === -1)
267
+ throw new Error(`Unsupported algorithm: ${prepend}`);
268
+ if (list === defaultList)
269
+ list = list.slice();
270
+ list.unshift(prepend);
271
+ } else if (isRegExp(prepend)) {
272
+ for (let k = supportedList.length; k >= 0; --k) {
273
+ const algo = supportedList[k];
274
+ if (prepend.test(algo)) {
275
+ if (list.indexOf(algo) !== -1)
276
+ continue;
277
+ if (list === defaultList)
278
+ list = list.slice();
279
+ list.unshift(algo);
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+ break;
286
+ case 'remove':
287
+ if (!Array.isArray(val))
288
+ val = [val];
289
+ if (Array.isArray(val)) {
290
+ for (let j = 0; j < val.length; ++j) {
291
+ const search = val[j];
292
+ if (typeof search === 'string') {
293
+ if (!search)
294
+ continue;
295
+ const idx = list.indexOf(search);
296
+ if (idx === -1)
297
+ continue;
298
+ if (list === defaultList)
299
+ list = list.slice();
300
+ list.splice(idx, 1);
301
+ } else if (isRegExp(search)) {
302
+ for (let k = 0; k < list.length; ++k) {
303
+ if (search.test(list[k])) {
304
+ if (list === defaultList)
305
+ list = list.slice();
306
+ list.splice(k, 1);
307
+ --k;
308
+ }
309
+ }
310
+ }
311
+ }
312
+ }
313
+ break;
314
+ }
315
+ }
316
+
317
+ return list;
318
+ }
319
+
320
+ return defaultList;
321
+ }
322
+
323
+ module.exports = {
324
+ ChannelManager,
325
+ generateAlgorithmList,
326
+ onChannelOpenFailure,
327
+ onCHANNEL_CLOSE,
328
+ isWritable: (stream) => {
329
+ // XXX: hack to workaround regression in node
330
+ // See: https://github.com/nodejs/node/issues/36029
331
+ return (stream
332
+ && stream.writable
333
+ && stream._readableState
334
+ && stream._readableState.ended === false);
335
+ },
336
+ };
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "ssh2",
3
+ "version": "1.17.0",
4
+ "author": "Brian White <mscdex@mscdex.net>",
5
+ "description": "SSH2 client and server modules written in pure JavaScript for node.js",
6
+ "main": "./lib/index.js",
7
+ "engines": {
8
+ "node": ">=10.16.0"
9
+ },
10
+ "dependencies": {
11
+ "asn1": "^0.2.6",
12
+ "bcrypt-pbkdf": "^1.0.2"
13
+ },
14
+ "devDependencies": {
15
+ "@mscdex/eslint-config": "^1.1.0",
16
+ "eslint": "^7.32.0"
17
+ },
18
+ "optionalDependencies": {
19
+ "cpu-features": "~0.0.10",
20
+ "nan": "^2.23.0"
21
+ },
22
+ "scripts": {
23
+ "install": "node install.js",
24
+ "rebuild": "node install.js",
25
+ "test": "node test/test.js",
26
+ "lint": "eslint --cache --report-unused-disable-directives --ext=.js .eslintrc.js examples lib test",
27
+ "lint:fix": "npm run lint -- --fix"
28
+ },
29
+ "keywords": [
30
+ "ssh",
31
+ "ssh2",
32
+ "sftp",
33
+ "secure",
34
+ "shell",
35
+ "exec",
36
+ "remote",
37
+ "client"
38
+ ],
39
+ "licenses": [
40
+ {
41
+ "type": "MIT",
42
+ "url": "http://github.com/mscdex/ssh2/raw/master/LICENSE"
43
+ }
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "http://github.com/mscdex/ssh2.git"
48
+ }
49
+ }
@@ -0,0 +1,316 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { readFileSync } = require('fs');
5
+ const { join } = require('path');
6
+ const { inspect } = require('util');
7
+
8
+ const Client = require('../lib/client.js');
9
+ const Server = require('../lib/server.js');
10
+ const { parseKey } = require('../lib/protocol/keyParser.js');
11
+
12
+ const mustCallChecks = [];
13
+
14
+ const DEFAULT_TEST_TIMEOUT = 30 * 1000;
15
+
16
+ function noop() {}
17
+
18
+ function runCallChecks(exitCode) {
19
+ if (exitCode !== 0) return;
20
+
21
+ const failed = mustCallChecks.filter((context) => {
22
+ if ('minimum' in context) {
23
+ context.messageSegment = `at least ${context.minimum}`;
24
+ return context.actual < context.minimum;
25
+ }
26
+ context.messageSegment = `exactly ${context.exact}`;
27
+ return context.actual !== context.exact;
28
+ });
29
+
30
+ failed.forEach((context) => {
31
+ console.error('Mismatched %s function calls. Expected %s, actual %d.',
32
+ context.name,
33
+ context.messageSegment,
34
+ context.actual);
35
+ console.error(context.stack.split('\n').slice(2).join('\n'));
36
+ });
37
+
38
+ if (failed.length)
39
+ process.exit(1);
40
+ }
41
+
42
+ function mustCall(fn, exact) {
43
+ return _mustCallInner(fn, exact, 'exact');
44
+ }
45
+
46
+ function mustCallAtLeast(fn, minimum) {
47
+ return _mustCallInner(fn, minimum, 'minimum');
48
+ }
49
+
50
+ function _mustCallInner(fn, criteria = 1, field) {
51
+ if (process._exiting)
52
+ throw new Error('Cannot use common.mustCall*() in process exit handler');
53
+
54
+ if (typeof fn === 'number') {
55
+ criteria = fn;
56
+ fn = noop;
57
+ } else if (fn === undefined) {
58
+ fn = noop;
59
+ }
60
+
61
+ if (typeof criteria !== 'number')
62
+ throw new TypeError(`Invalid ${field} value: ${criteria}`);
63
+
64
+ const context = {
65
+ [field]: criteria,
66
+ actual: 0,
67
+ stack: inspect(new Error()),
68
+ name: fn.name || '<anonymous>'
69
+ };
70
+
71
+ // Add the exit listener only once to avoid listener leak warnings
72
+ if (mustCallChecks.length === 0)
73
+ process.on('exit', runCallChecks);
74
+
75
+ mustCallChecks.push(context);
76
+
77
+ function wrapped(...args) {
78
+ ++context.actual;
79
+ return fn.call(this, ...args);
80
+ }
81
+ // TODO: remove origFn?
82
+ wrapped.origFn = fn;
83
+
84
+ return wrapped;
85
+ }
86
+
87
+ function getCallSite(top) {
88
+ const originalStackFormatter = Error.prepareStackTrace;
89
+ Error.prepareStackTrace = (err, stack) =>
90
+ `${stack[0].getFileName()}:${stack[0].getLineNumber()}`;
91
+ const err = new Error();
92
+ Error.captureStackTrace(err, top);
93
+ // With the V8 Error API, the stack is not formatted until it is accessed
94
+ // eslint-disable-next-line no-unused-expressions
95
+ err.stack;
96
+ Error.prepareStackTrace = originalStackFormatter;
97
+ return err.stack;
98
+ }
99
+
100
+ function mustNotCall(msg) {
101
+ const callSite = getCallSite(mustNotCall);
102
+ return function mustNotCall(...args) {
103
+ args = args.map(inspect).join(', ');
104
+ const argsInfo = (args.length > 0
105
+ ? `\ncalled with arguments: ${args}`
106
+ : '');
107
+ assert.fail(
108
+ `${msg || 'function should not have been called'} at ${callSite}`
109
+ + argsInfo);
110
+ };
111
+ }
112
+
113
+ function setup(title, configs) {
114
+ const {
115
+ client: clientCfg_,
116
+ server: serverCfg_,
117
+ allReady: allReady_,
118
+ timeout: timeout_,
119
+ debug,
120
+ noForceClientReady,
121
+ noForceServerReady,
122
+ noClientError,
123
+ noServerError,
124
+ } = configs;
125
+
126
+ // Make shallow copies of client/server configs to avoid mutating them when
127
+ // multiple tests share the same config object reference
128
+ let clientCfg;
129
+ if (clientCfg_)
130
+ clientCfg = { ...clientCfg_ };
131
+ let serverCfg;
132
+ if (serverCfg_)
133
+ serverCfg = { ...serverCfg_ };
134
+
135
+ let clientClose = false;
136
+ let clientReady = false;
137
+ let serverClose = false;
138
+ let serverReady = false;
139
+ const msg = (text) => {
140
+ return `${title}: ${text}`;
141
+ };
142
+
143
+ const timeout = (typeof timeout_ === 'number'
144
+ ? timeout_
145
+ : DEFAULT_TEST_TIMEOUT);
146
+
147
+ const allReady = (typeof allReady_ === 'function' ? allReady_ : undefined);
148
+
149
+ if (debug) {
150
+ if (clientCfg) {
151
+ clientCfg.debug = (...args) => {
152
+ console.log(`[${title}][CLIENT]`, ...args);
153
+ };
154
+ }
155
+ if (serverCfg) {
156
+ serverCfg.debug = (...args) => {
157
+ console.log(`[${title}][SERVER]`, ...args);
158
+ };
159
+ }
160
+ }
161
+
162
+ let timer;
163
+ let client;
164
+ let clientReadyFn;
165
+ let server;
166
+ let serverReadyFn;
167
+ if (clientCfg) {
168
+ client = new Client();
169
+ if (!noClientError)
170
+ client.on('error', onError);
171
+ clientReadyFn = (noForceClientReady ? onReady : mustCall(onReady));
172
+ client.on('ready', clientReadyFn)
173
+ .on('close', mustCall(onClose));
174
+ } else {
175
+ clientReady = clientClose = true;
176
+ }
177
+
178
+ if (serverCfg) {
179
+ server = new Server(serverCfg);
180
+ if (!noServerError)
181
+ server.on('error', onError);
182
+ serverReadyFn = (noForceServerReady ? onReady : mustCall(onReady));
183
+ server.on('connection', mustCall((conn) => {
184
+ if (!noServerError)
185
+ conn.on('error', onError);
186
+ conn.on('ready', serverReadyFn);
187
+ server.close();
188
+ })).on('close', mustCall(onClose));
189
+ } else {
190
+ serverReady = serverClose = true;
191
+ }
192
+
193
+ function onError(err) {
194
+ const which = (this === client ? 'client' : 'server');
195
+ assert(false, msg(`Unexpected ${which} error: ${err.stack}\n`));
196
+ }
197
+
198
+ function onReady() {
199
+ if (this === client) {
200
+ assert(!clientReady,
201
+ msg('Received multiple ready events for client'));
202
+ clientReady = true;
203
+ } else {
204
+ assert(!serverReady,
205
+ msg('Received multiple ready events for server'));
206
+ serverReady = true;
207
+ }
208
+ clientReady && serverReady && allReady && allReady();
209
+ }
210
+
211
+ function onClose() {
212
+ if (this === client) {
213
+ assert(!clientClose,
214
+ msg('Received multiple close events for client'));
215
+ clientClose = true;
216
+ } else {
217
+ assert(!serverClose,
218
+ msg('Received multiple close events for server'));
219
+ serverClose = true;
220
+ }
221
+ if (clientClose && serverClose)
222
+ clearTimeout(timer);
223
+ }
224
+
225
+ process.nextTick(mustCall(() => {
226
+ function connectClient() {
227
+ if (clientCfg.sock) {
228
+ clientCfg.sock.connect(server.address().port, 'localhost');
229
+ } else {
230
+ clientCfg.host = 'localhost';
231
+ clientCfg.port = server.address().port;
232
+ }
233
+ try {
234
+ client.connect(clientCfg);
235
+ } catch (ex) {
236
+ ex.message = msg(ex.message);
237
+ throw ex;
238
+ }
239
+ }
240
+
241
+ if (server) {
242
+ server.listen(0, 'localhost', mustCall(() => {
243
+ if (timeout >= 0) {
244
+ timer = setTimeout(() => {
245
+ assert(false, msg('Test timed out'));
246
+ }, timeout);
247
+ }
248
+ if (client)
249
+ connectClient();
250
+ }));
251
+ }
252
+ }));
253
+
254
+ return { client, server };
255
+ }
256
+
257
+ const FIXTURES_DIR = join(__dirname, 'fixtures');
258
+ const fixture = (() => {
259
+ const cache = new Map();
260
+ return (file) => {
261
+ const existing = cache.get(file);
262
+ if (existing !== undefined)
263
+ return existing;
264
+
265
+ const result = readFileSync(join(FIXTURES_DIR, file));
266
+ cache.set(file, result);
267
+ return result;
268
+ };
269
+ })();
270
+ const fixtureKey = (() => {
271
+ const cache = new Map();
272
+ return (file, passphrase, bypass) => {
273
+ if (typeof passphrase === 'boolean') {
274
+ bypass = passphrase;
275
+ passphrase = undefined;
276
+ }
277
+ if (typeof bypass !== 'boolean' || !bypass) {
278
+ const existing = cache.get(file);
279
+ if (existing !== undefined)
280
+ return existing;
281
+ }
282
+ const fullPath = join(FIXTURES_DIR, file);
283
+ const raw = fixture(file);
284
+ let key = parseKey(raw, passphrase);
285
+ if (Array.isArray(key))
286
+ key = key[0];
287
+ const result = { key, raw, fullPath };
288
+ cache.set(file, result);
289
+ return result;
290
+ };
291
+ })();
292
+
293
+ function setupSimple(debug, title) {
294
+ const { client, server } = setup(title, {
295
+ client: { username: 'Password User', password: '12345' },
296
+ server: { hostKeys: [ fixtureKey('ssh_host_rsa_key').raw ] },
297
+ debug,
298
+ });
299
+ server.on('connection', mustCall((conn) => {
300
+ conn.on('authentication', mustCall((ctx) => {
301
+ ctx.accept();
302
+ }));
303
+ }));
304
+ return { client, server };
305
+ }
306
+
307
+ module.exports = {
308
+ fixture,
309
+ fixtureKey,
310
+ FIXTURES_DIR,
311
+ mustCall,
312
+ mustCallAtLeast,
313
+ mustNotCall,
314
+ setup,
315
+ setupSimple,
316
+ };