oxygen-cli 1.40.1 → 1.40.2-beta.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 (441) hide show
  1. package/CHANGELOG.md +1742 -1742
  2. package/LICENSE +672 -672
  3. package/README.md +37 -37
  4. package/build/core/OxygenCore.js +1 -1
  5. package/build/core/OxygenEvents.js +1 -1
  6. package/build/core/OxygenModule.js +1 -1
  7. package/build/core/OxygenService.js +1 -1
  8. package/build/core/OxygenSubModule.js +1 -1
  9. package/build/core/WebDriverModule.js +1 -1
  10. package/build/core/utils.js +1 -1
  11. package/build/errors/HookError.js +1 -1
  12. package/build/errors/ModuleError.js +1 -1
  13. package/build/errors/ModuleUnavailableError.js +1 -1
  14. package/build/errors/OxygenError.js +1 -1
  15. package/build/errors/ScriptNotFound.js +1 -1
  16. package/build/errors/helper.js +2 -1
  17. package/build/index.js +1 -1
  18. package/build/lib/cli-util.js +5 -1
  19. package/build/lib/debugger.js +1 -1
  20. package/build/lib/img-merge.js +1 -1
  21. package/build/lib/launcher.js +1 -1
  22. package/build/lib/logger.js +43 -43
  23. package/build/lib/moduleRequire.js +1 -1
  24. package/build/lib/parallel-launcher.js +1 -1
  25. package/build/lib/param-manager.js +1 -1
  26. package/build/lib/param-reader-csv.js +1 -1
  27. package/build/lib/param-reader-excel.js +1 -1
  28. package/build/lib/param-reader-json.js +1 -1
  29. package/build/lib/text-to-image.js +1 -1
  30. package/build/lib/util.js +1 -1
  31. package/build/model/case-result.js +1 -1
  32. package/build/model/failure.js +1 -1
  33. package/build/model/status.js +1 -1
  34. package/build/model/step-result.js +1 -1
  35. package/build/model/suite-result.js +1 -1
  36. package/build/model/test-result.js +1 -1
  37. package/build/model/testcase.js +1 -1
  38. package/build/model/testsuite.js +1 -1
  39. package/build/ox_modules/index.js +9 -1
  40. package/build/ox_modules/module-assert.js +37 -37
  41. package/build/ox_modules/module-date.js +24 -24
  42. package/build/ox_modules/module-db.js +52 -52
  43. package/build/ox_modules/module-email.js +59 -59
  44. package/build/ox_modules/module-eyes.js +34 -34
  45. package/build/ox_modules/module-http/ntlm-util.js +10 -10
  46. package/build/ox_modules/module-http/ntlm.js +15 -15
  47. package/build/ox_modules/module-http.js +132 -132
  48. package/build/ox_modules/module-log.js +27 -27
  49. package/build/ox_modules/module-mailinator.js +87 -87
  50. package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
  51. package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
  52. package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
  53. package/build/ox_modules/module-mob/commands/assertText.js +21 -21
  54. package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
  55. package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
  56. package/build/ox_modules/module-mob/commands/back.js +16 -16
  57. package/build/ox_modules/module-mob/commands/clear.js +19 -19
  58. package/build/ox_modules/module-mob/commands/click.js +17 -17
  59. package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
  60. package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
  61. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
  62. package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
  63. package/build/ox_modules/module-mob/commands/debug.js +16 -16
  64. package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
  65. package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
  66. package/build/ox_modules/module-mob/commands/execute.js +21 -21
  67. package/build/ox_modules/module-mob/commands/findElement.js +20 -20
  68. package/build/ox_modules/module-mob/commands/findElements.js +23 -23
  69. package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
  70. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
  71. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
  72. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
  73. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
  74. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
  75. package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
  76. package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
  77. package/build/ox_modules/module-mob/commands/getSource.js +16 -16
  78. package/build/ox_modules/module-mob/commands/getText.js +18 -18
  79. package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
  80. package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
  81. package/build/ox_modules/module-mob/commands/getValue.js +18 -18
  82. package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
  83. package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
  84. package/build/ox_modules/module-mob/commands/index.js +1 -1
  85. package/build/ox_modules/module-mob/commands/installApp.js +16 -16
  86. package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
  87. package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
  88. package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
  89. package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
  90. package/build/ox_modules/module-mob/commands/isExist.js +19 -19
  91. package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
  92. package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
  93. package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
  94. package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
  95. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
  96. package/build/ox_modules/module-mob/commands/open.js +17 -17
  97. package/build/ox_modules/module-mob/commands/pause.js +16 -16
  98. package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
  99. package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
  100. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
  101. package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
  102. package/build/ox_modules/module-mob/commands/select.js +24 -24
  103. package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
  104. package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
  105. package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
  106. package/build/ox_modules/module-mob/commands/setContext.js +16 -16
  107. package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
  108. package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
  109. package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
  110. package/build/ox_modules/module-mob/commands/shake.js +16 -16
  111. package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
  112. package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
  113. package/build/ox_modules/module-mob/commands/swipe.js +20 -20
  114. package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
  115. package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
  116. package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
  117. package/build/ox_modules/module-mob/commands/tap.js +17 -17
  118. package/build/ox_modules/module-mob/commands/type.js +20 -20
  119. package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
  120. package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
  121. package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
  122. package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
  123. package/build/ox_modules/module-mob.js +74 -74
  124. package/build/ox_modules/module-mongo.js +302 -0
  125. package/build/ox_modules/module-pdf.js +35 -35
  126. package/build/ox_modules/module-proxy.js +77 -77
  127. package/build/ox_modules/module-serial.js +55 -55
  128. package/build/ox_modules/module-shell.js +25 -25
  129. package/build/ox_modules/module-soap.js +72 -72
  130. package/build/ox_modules/module-twilio.js +41 -41
  131. package/build/ox_modules/module-utils.js +91 -91
  132. package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
  133. package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
  134. package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
  135. package/build/ox_modules/module-web/commands/assertExist.js +17 -17
  136. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
  137. package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
  138. package/build/ox_modules/module-web/commands/assertText.js +21 -21
  139. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
  140. package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
  141. package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
  142. package/build/ox_modules/module-web/commands/assertValue.js +20 -20
  143. package/build/ox_modules/module-web/commands/back.js +16 -16
  144. package/build/ox_modules/module-web/commands/clear.js +18 -18
  145. package/build/ox_modules/module-web/commands/click.js +25 -25
  146. package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
  147. package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
  148. package/build/ox_modules/module-web/commands/debug.js +15 -15
  149. package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
  150. package/build/ox_modules/module-web/commands/deselect.js +22 -22
  151. package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
  152. package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
  153. package/build/ox_modules/module-web/commands/execute.js +24 -24
  154. package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
  155. package/build/ox_modules/module-web/commands/findElement.js +19 -19
  156. package/build/ox_modules/module-web/commands/findElements.js +22 -22
  157. package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
  158. package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
  159. package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
  160. package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
  161. package/build/ox_modules/module-web/commands/getCookies.js +13 -13
  162. package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
  163. package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
  164. package/build/ox_modules/module-web/commands/getHTML.js +17 -17
  165. package/build/ox_modules/module-web/commands/getSource.js +16 -16
  166. package/build/ox_modules/module-web/commands/getText.js +18 -18
  167. package/build/ox_modules/module-web/commands/getTitle.js +12 -12
  168. package/build/ox_modules/module-web/commands/getUrl.js +16 -16
  169. package/build/ox_modules/module-web/commands/getValue.js +18 -18
  170. package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
  171. package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
  172. package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
  173. package/build/ox_modules/module-web/commands/index.js +1 -1
  174. package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
  175. package/build/ox_modules/module-web/commands/isChecked.js +18 -18
  176. package/build/ox_modules/module-web/commands/isExist.js +19 -19
  177. package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
  178. package/build/ox_modules/module-web/commands/isSelected.js +23 -23
  179. package/build/ox_modules/module-web/commands/isVisible.js +19 -19
  180. package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
  181. package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
  182. package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
  183. package/build/ox_modules/module-web/commands/mock.js +20 -20
  184. package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
  185. package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
  186. package/build/ox_modules/module-web/commands/newWindow.js +16 -16
  187. package/build/ox_modules/module-web/commands/open.js +16 -16
  188. package/build/ox_modules/module-web/commands/pause.js +15 -15
  189. package/build/ox_modules/module-web/commands/point.js +21 -21
  190. package/build/ox_modules/module-web/commands/pointJS.js +15 -15
  191. package/build/ox_modules/module-web/commands/refresh.js +15 -15
  192. package/build/ox_modules/module-web/commands/rightClick.js +17 -17
  193. package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
  194. package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
  195. package/build/ox_modules/module-web/commands/select.js +23 -23
  196. package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
  197. package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
  198. package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
  199. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
  200. package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
  201. package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
  202. package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
  203. package/build/ox_modules/module-web/commands/type.js +20 -20
  204. package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
  205. package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
  206. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
  207. package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
  208. package/build/ox_modules/module-web/commands/verifyText.js +21 -21
  209. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
  210. package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
  211. package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
  212. package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
  213. package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
  214. package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
  215. package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
  216. package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
  217. package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
  218. package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
  219. package/build/ox_modules/module-web/commands/waitForText.js +20 -20
  220. package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
  221. package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
  222. package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
  223. package/build/ox_modules/module-web.js +94 -94
  224. package/build/ox_modules/module-win/commands/assertText.js +17 -17
  225. package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
  226. package/build/ox_modules/module-win/commands/assertValue.js +14 -14
  227. package/build/ox_modules/module-win/commands/back.js +11 -11
  228. package/build/ox_modules/module-win/commands/clear.js +13 -13
  229. package/build/ox_modules/module-win/commands/click.js +13 -13
  230. package/build/ox_modules/module-win/commands/clickLong.js +14 -14
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
  232. package/build/ox_modules/module-win/commands/findElement.js +15 -15
  233. package/build/ox_modules/module-win/commands/findElements.js +15 -15
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
  236. package/build/ox_modules/module-win/commands/getLocation.js +14 -14
  237. package/build/ox_modules/module-win/commands/getSource.js +12 -12
  238. package/build/ox_modules/module-win/commands/getText.js +14 -14
  239. package/build/ox_modules/module-win/commands/getValue.js +14 -14
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
  241. package/build/ox_modules/module-win/commands/index.js +1 -1
  242. package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
  243. package/build/ox_modules/module-win/commands/isChecked.js +14 -14
  244. package/build/ox_modules/module-win/commands/isClickable.js +14 -14
  245. package/build/ox_modules/module-win/commands/isExist.js +15 -15
  246. package/build/ox_modules/module-win/commands/isSelected.js +14 -14
  247. package/build/ox_modules/module-win/commands/isVisible.js +15 -15
  248. package/build/ox_modules/module-win/commands/open.js +13 -13
  249. package/build/ox_modules/module-win/commands/pause.js +12 -12
  250. package/build/ox_modules/module-win/commands/rightClick.js +13 -13
  251. package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
  252. package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
  253. package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
  255. package/build/ox_modules/module-win/commands/tap.js +13 -13
  256. package/build/ox_modules/module-win/commands/type.js +16 -16
  257. package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
  260. package/build/ox_modules/module-win.js +47 -47
  261. package/build/ox_modules/utils.js +8 -8
  262. package/build/ox_reporters/excel/template.json +48 -48
  263. package/build/ox_reporters/html/index.ejs +163 -163
  264. package/build/ox_reporters/html/summary.ejs +77 -77
  265. package/build/ox_reporters/html/tests-details.ejs +134 -134
  266. package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
  267. package/build/ox_reporters/reporter-excel.js +1 -1
  268. package/build/ox_reporters/reporter-html.js +1 -1
  269. package/build/ox_reporters/reporter-json.js +1 -1
  270. package/build/ox_reporters/reporter-junit.js +1 -1
  271. package/build/ox_reporters/reporter-pdf.js +1 -1
  272. package/build/ox_reporters/reporter-rp.js +1 -1
  273. package/build/ox_reporters/reporter-xml.js +1 -1
  274. package/build/ox_services/service-devtools/submodule-network.js +1 -1
  275. package/build/ox_services/service-devtools.js +1 -1
  276. package/build/reporter/FileReporterBase.js +1 -1
  277. package/build/reporter/ReportAggregator.js +13 -5
  278. package/build/reporter/ReporterBase.js +1 -1
  279. package/build/reporter/WebSocketReporter.js +1 -1
  280. package/build/runners/WorkerProcess.js +1 -1
  281. package/build/runners/cucumber/CucumberEventListener.js +1 -1
  282. package/build/runners/cucumber/CucumberReporter.js +1 -1
  283. package/build/runners/cucumber/CucumberWorker.js +1 -1
  284. package/build/runners/cucumber/index.js +1 -1
  285. package/build/runners/cucumber/worker.js +1 -1
  286. package/build/runners/index.js +1 -1
  287. package/build/runners/oxygen/OxygenWorker.js +1 -1
  288. package/build/runners/oxygen/index.js +1 -1
  289. package/build/runners/oxygen/worker.js +1 -1
  290. package/config/default.json +6 -6
  291. package/log.txt +1614 -0
  292. package/package.json +139 -137
  293. package/reports/2025-06-08_231627/report.html +440 -0
  294. package/reports/2025-06-09_223615/report.html +440 -0
  295. package/transpiled/mongodb/etc/prepare.js +18 -0
  296. package/transpiled/mongodb/lib/admin.js +182 -0
  297. package/transpiled/mongodb/lib/beta.js +26 -0
  298. package/transpiled/mongodb/lib/bson.js +220 -0
  299. package/transpiled/mongodb/lib/bulk/common.js +1041 -0
  300. package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
  301. package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
  302. package/transpiled/mongodb/lib/change_stream.js +517 -0
  303. package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
  304. package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
  305. package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
  306. package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
  307. package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
  308. package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
  309. package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
  310. package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
  311. package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
  312. package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
  313. package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
  314. package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
  315. package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
  316. package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
  317. package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
  318. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
  319. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
  320. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
  321. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
  322. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
  323. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
  324. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
  325. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
  326. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
  327. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
  328. package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
  329. package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
  330. package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
  331. package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
  332. package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
  333. package/transpiled/mongodb/lib/cmap/commands.js +605 -0
  334. package/transpiled/mongodb/lib/cmap/connect.js +418 -0
  335. package/transpiled/mongodb/lib/cmap/connection.js +673 -0
  336. package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
  337. package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
  338. package/transpiled/mongodb/lib/cmap/errors.js +128 -0
  339. package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
  340. package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
  341. package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
  342. package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
  343. package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
  344. package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
  345. package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
  346. package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
  347. package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
  348. package/transpiled/mongodb/lib/collection.js +852 -0
  349. package/transpiled/mongodb/lib/connection_string.js +1452 -0
  350. package/transpiled/mongodb/lib/constants.js +162 -0
  351. package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
  352. package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
  353. package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
  354. package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
  355. package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
  356. package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
  357. package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
  358. package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
  359. package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
  360. package/transpiled/mongodb/lib/db.js +467 -0
  361. package/transpiled/mongodb/lib/deps.js +174 -0
  362. package/transpiled/mongodb/lib/encrypter.js +129 -0
  363. package/transpiled/mongodb/lib/error.js +1550 -0
  364. package/transpiled/mongodb/lib/explain.js +122 -0
  365. package/transpiled/mongodb/lib/gridfs/download.js +369 -0
  366. package/transpiled/mongodb/lib/gridfs/index.js +240 -0
  367. package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
  368. package/transpiled/mongodb/lib/index.js +975 -0
  369. package/transpiled/mongodb/lib/mongo_client.js +626 -0
  370. package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
  371. package/transpiled/mongodb/lib/mongo_logger.js +812 -0
  372. package/transpiled/mongodb/lib/mongo_types.js +71 -0
  373. package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
  374. package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
  375. package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
  376. package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
  377. package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
  378. package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
  379. package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
  380. package/transpiled/mongodb/lib/operations/collections.js +49 -0
  381. package/transpiled/mongodb/lib/operations/command.js +102 -0
  382. package/transpiled/mongodb/lib/operations/count.js +60 -0
  383. package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
  384. package/transpiled/mongodb/lib/operations/delete.js +134 -0
  385. package/transpiled/mongodb/lib/operations/distinct.js +77 -0
  386. package/transpiled/mongodb/lib/operations/drop.js +102 -0
  387. package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
  388. package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
  389. package/transpiled/mongodb/lib/operations/find.js +197 -0
  390. package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
  391. package/transpiled/mongodb/lib/operations/get_more.js +84 -0
  392. package/transpiled/mongodb/lib/operations/indexes.js +197 -0
  393. package/transpiled/mongodb/lib/operations/insert.js +138 -0
  394. package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
  395. package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
  396. package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
  397. package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
  398. package/transpiled/mongodb/lib/operations/operation.js +88 -0
  399. package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
  400. package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
  401. package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
  402. package/transpiled/mongodb/lib/operations/rename.js +48 -0
  403. package/transpiled/mongodb/lib/operations/run_command.js +64 -0
  404. package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
  405. package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
  406. package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
  407. package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
  408. package/transpiled/mongodb/lib/operations/stats.js +39 -0
  409. package/transpiled/mongodb/lib/operations/update.js +218 -0
  410. package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
  411. package/transpiled/mongodb/lib/read_concern.js +92 -0
  412. package/transpiled/mongodb/lib/read_preference.js +215 -0
  413. package/transpiled/mongodb/lib/resource_management.js +74 -0
  414. package/transpiled/mongodb/lib/sdam/common.js +53 -0
  415. package/transpiled/mongodb/lib/sdam/events.js +177 -0
  416. package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
  417. package/transpiled/mongodb/lib/sdam/server.js +463 -0
  418. package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
  419. package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
  420. package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
  421. package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
  422. package/transpiled/mongodb/lib/sdam/topology.js +833 -0
  423. package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
  424. package/transpiled/mongodb/lib/sessions.js +988 -0
  425. package/transpiled/mongodb/lib/sort.js +123 -0
  426. package/transpiled/mongodb/lib/timeout.js +349 -0
  427. package/transpiled/mongodb/lib/transactions.js +149 -0
  428. package/transpiled/mongodb/lib/utils.js +1502 -0
  429. package/transpiled/mongodb/lib/write_concern.js +115 -0
  430. package/types/index.d.ts +70 -70
  431. package/types/module-eyes.d.ts +39 -39
  432. package/types/module-http.d.ts +163 -163
  433. package/types/module-log.d.ts +34 -34
  434. package/types/module-mob.d.ts +966 -966
  435. package/types/module-pdf.d.ts +40 -40
  436. package/types/module-proxy.d.ts +100 -100
  437. package/types/module-shell.d.ts +24 -24
  438. package/types/module-utils.d.ts +99 -99
  439. package/types/module-web.d.ts +1053 -1053
  440. package/types/module-win.d.ts +352 -352
  441. package/types/oxygen.d.ts +53 -53
@@ -0,0 +1,688 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ConnectionPool = exports.PoolState = void 0;
7
+
8
+ const timers_1 = require("timers");
9
+
10
+ const constants_1 = require("../constants");
11
+
12
+ const error_1 = require("../error");
13
+
14
+ const mongo_types_1 = require("../mongo_types");
15
+
16
+ const timeout_1 = require("../timeout");
17
+
18
+ const utils_1 = require("../utils");
19
+
20
+ const connect_1 = require("./connect");
21
+
22
+ const connection_1 = require("./connection");
23
+
24
+ const connection_pool_events_1 = require("./connection_pool_events");
25
+
26
+ const errors_1 = require("./errors");
27
+
28
+ const metrics_1 = require("./metrics");
29
+ /** @internal */
30
+
31
+
32
+ exports.PoolState = Object.freeze({
33
+ paused: 'paused',
34
+ ready: 'ready',
35
+ closed: 'closed'
36
+ });
37
+ /**
38
+ * A pool of connections which dynamically resizes, and emit events related to pool activity
39
+ * @internal
40
+ */
41
+
42
+ class ConnectionPool extends mongo_types_1.TypedEventEmitter {
43
+ constructor(server, options) {
44
+ super();
45
+ this.on('error', utils_1.noop);
46
+ this.options = Object.freeze({
47
+ connectionType: connection_1.Connection,
48
+ ...options,
49
+ maxPoolSize: options.maxPoolSize ?? 100,
50
+ minPoolSize: options.minPoolSize ?? 0,
51
+ maxConnecting: options.maxConnecting ?? 2,
52
+ maxIdleTimeMS: options.maxIdleTimeMS ?? 0,
53
+ waitQueueTimeoutMS: options.waitQueueTimeoutMS ?? 0,
54
+ minPoolSizeCheckFrequencyMS: options.minPoolSizeCheckFrequencyMS ?? 100,
55
+ autoEncrypter: options.autoEncrypter
56
+ });
57
+
58
+ if (this.options.minPoolSize > this.options.maxPoolSize) {
59
+ throw new error_1.MongoInvalidArgumentError('Connection pool minimum size must not be greater than maximum pool size');
60
+ }
61
+
62
+ this.poolState = exports.PoolState.paused;
63
+ this.server = server;
64
+ this.connections = new utils_1.List();
65
+ this.pending = 0;
66
+ this.checkedOut = new Set();
67
+ this.minPoolSizeTimer = undefined;
68
+ this.generation = 0;
69
+ this.serviceGenerations = new Map();
70
+ this.connectionCounter = (0, utils_1.makeCounter)(1);
71
+ this.cancellationToken = new mongo_types_1.CancellationToken();
72
+ this.cancellationToken.setMaxListeners(Infinity);
73
+ this.waitQueue = new utils_1.List();
74
+ this.metrics = new metrics_1.ConnectionPoolMetrics();
75
+ this.processingWaitQueue = false;
76
+ this.mongoLogger = this.server.topology.client?.mongoLogger;
77
+ this.component = 'connection';
78
+ process.nextTick(() => {
79
+ this.emitAndLog(ConnectionPool.CONNECTION_POOL_CREATED, new connection_pool_events_1.ConnectionPoolCreatedEvent(this));
80
+ });
81
+ }
82
+ /** The address of the endpoint the pool is connected to */
83
+
84
+
85
+ get address() {
86
+ return this.options.hostAddress.toString();
87
+ }
88
+ /**
89
+ * Check if the pool has been closed
90
+ *
91
+ * TODO(NODE-3263): We can remove this property once shell no longer needs it
92
+ */
93
+
94
+
95
+ get closed() {
96
+ return this.poolState === exports.PoolState.closed;
97
+ }
98
+ /** An integer expressing how many total connections (available + pending + in use) the pool currently has */
99
+
100
+
101
+ get totalConnectionCount() {
102
+ return this.availableConnectionCount + this.pendingConnectionCount + this.currentCheckedOutCount;
103
+ }
104
+ /** An integer expressing how many connections are currently available in the pool. */
105
+
106
+
107
+ get availableConnectionCount() {
108
+ return this.connections.length;
109
+ }
110
+
111
+ get pendingConnectionCount() {
112
+ return this.pending;
113
+ }
114
+
115
+ get currentCheckedOutCount() {
116
+ return this.checkedOut.size;
117
+ }
118
+
119
+ get waitQueueSize() {
120
+ return this.waitQueue.length;
121
+ }
122
+
123
+ get loadBalanced() {
124
+ return this.options.loadBalanced;
125
+ }
126
+
127
+ get serverError() {
128
+ return this.server.description.error;
129
+ }
130
+ /**
131
+ * This is exposed ONLY for use in mongosh, to enable
132
+ * killing all connections if a user quits the shell with
133
+ * operations in progress.
134
+ *
135
+ * This property may be removed as a part of NODE-3263.
136
+ */
137
+
138
+
139
+ get checkedOutConnections() {
140
+ return this.checkedOut;
141
+ }
142
+ /**
143
+ * Get the metrics information for the pool when a wait queue timeout occurs.
144
+ */
145
+
146
+
147
+ waitQueueErrorMetrics() {
148
+ return this.metrics.info(this.options.maxPoolSize);
149
+ }
150
+ /**
151
+ * Set the pool state to "ready"
152
+ */
153
+
154
+
155
+ ready() {
156
+ if (this.poolState !== exports.PoolState.paused) {
157
+ return;
158
+ }
159
+
160
+ this.poolState = exports.PoolState.ready;
161
+ this.emitAndLog(ConnectionPool.CONNECTION_POOL_READY, new connection_pool_events_1.ConnectionPoolReadyEvent(this));
162
+ (0, timers_1.clearTimeout)(this.minPoolSizeTimer);
163
+ this.ensureMinPoolSize();
164
+ }
165
+ /**
166
+ * Check a connection out of this pool. The connection will continue to be tracked, but no reference to it
167
+ * will be held by the pool. This means that if a connection is checked out it MUST be checked back in or
168
+ * explicitly destroyed by the new owner.
169
+ */
170
+
171
+
172
+ async checkOut(options) {
173
+ const checkoutTime = (0, utils_1.now)();
174
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECK_OUT_STARTED, new connection_pool_events_1.ConnectionCheckOutStartedEvent(this));
175
+ const {
176
+ promise,
177
+ resolve,
178
+ reject
179
+ } = (0, utils_1.promiseWithResolvers)();
180
+ const timeout = options.timeoutContext.connectionCheckoutTimeout;
181
+ const waitQueueMember = {
182
+ resolve,
183
+ reject,
184
+ cancelled: false,
185
+ checkoutTime
186
+ };
187
+ const abortListener = (0, utils_1.addAbortListener)(options.signal, function () {
188
+ waitQueueMember.cancelled = true;
189
+ reject(this.reason);
190
+ });
191
+ this.waitQueue.push(waitQueueMember);
192
+ process.nextTick(() => this.processWaitQueue());
193
+
194
+ try {
195
+ timeout?.throwIfExpired();
196
+ return await (timeout ? Promise.race([promise, timeout]) : promise);
197
+ } catch (error) {
198
+ if (timeout_1.TimeoutError.is(error)) {
199
+ timeout?.clear();
200
+ waitQueueMember.cancelled = true;
201
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECK_OUT_FAILED, new connection_pool_events_1.ConnectionCheckOutFailedEvent(this, 'timeout', waitQueueMember.checkoutTime));
202
+ const timeoutError = new errors_1.WaitQueueTimeoutError(this.loadBalanced ? this.waitQueueErrorMetrics() : 'Timed out while checking out a connection from connection pool', this.address);
203
+
204
+ if (options.timeoutContext.csotEnabled()) {
205
+ throw new error_1.MongoOperationTimeoutError('Timed out during connection checkout', {
206
+ cause: timeoutError
207
+ });
208
+ }
209
+
210
+ throw timeoutError;
211
+ }
212
+
213
+ throw error;
214
+ } finally {
215
+ abortListener?.[utils_1.kDispose]();
216
+ timeout?.clear();
217
+ }
218
+ }
219
+ /**
220
+ * Check a connection into the pool.
221
+ *
222
+ * @param connection - The connection to check in
223
+ */
224
+
225
+
226
+ checkIn(connection) {
227
+ if (!this.checkedOut.has(connection)) {
228
+ return;
229
+ }
230
+
231
+ const poolClosed = this.closed;
232
+ const stale = this.connectionIsStale(connection);
233
+ const willDestroy = !!(poolClosed || stale || connection.closed);
234
+
235
+ if (!willDestroy) {
236
+ connection.markAvailable();
237
+ this.connections.unshift(connection);
238
+ }
239
+
240
+ this.checkedOut.delete(connection);
241
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECKED_IN, new connection_pool_events_1.ConnectionCheckedInEvent(this, connection));
242
+
243
+ if (willDestroy) {
244
+ const reason = connection.closed ? 'error' : poolClosed ? 'poolClosed' : 'stale';
245
+ this.destroyConnection(connection, reason);
246
+ }
247
+
248
+ process.nextTick(() => this.processWaitQueue());
249
+ }
250
+ /**
251
+ * Clear the pool
252
+ *
253
+ * Pool reset is handled by incrementing the pool's generation count. Any existing connection of a
254
+ * previous generation will eventually be pruned during subsequent checkouts.
255
+ */
256
+
257
+
258
+ clear(options = {}) {
259
+ if (this.closed) {
260
+ return;
261
+ } // handle load balanced case
262
+
263
+
264
+ if (this.loadBalanced) {
265
+ const {
266
+ serviceId
267
+ } = options;
268
+
269
+ if (!serviceId) {
270
+ throw new error_1.MongoRuntimeError('ConnectionPool.clear() called in load balanced mode with no serviceId.');
271
+ }
272
+
273
+ const sid = serviceId.toHexString();
274
+ const generation = this.serviceGenerations.get(sid); // Only need to worry if the generation exists, since it should
275
+ // always be there but typescript needs the check.
276
+
277
+ if (generation == null) {
278
+ throw new error_1.MongoRuntimeError('Service generations are required in load balancer mode.');
279
+ } else {
280
+ // Increment the generation for the service id.
281
+ this.serviceGenerations.set(sid, generation + 1);
282
+ }
283
+
284
+ this.emitAndLog(ConnectionPool.CONNECTION_POOL_CLEARED, new connection_pool_events_1.ConnectionPoolClearedEvent(this, {
285
+ serviceId
286
+ }));
287
+ return;
288
+ } // handle non load-balanced case
289
+
290
+
291
+ const interruptInUseConnections = options.interruptInUseConnections ?? false;
292
+ const oldGeneration = this.generation;
293
+ this.generation += 1;
294
+ const alreadyPaused = this.poolState === exports.PoolState.paused;
295
+ this.poolState = exports.PoolState.paused;
296
+ this.clearMinPoolSizeTimer();
297
+
298
+ if (!alreadyPaused) {
299
+ this.emitAndLog(ConnectionPool.CONNECTION_POOL_CLEARED, new connection_pool_events_1.ConnectionPoolClearedEvent(this, {
300
+ interruptInUseConnections
301
+ }));
302
+ }
303
+
304
+ if (interruptInUseConnections) {
305
+ process.nextTick(() => this.interruptInUseConnections(oldGeneration));
306
+ }
307
+
308
+ this.processWaitQueue();
309
+ }
310
+ /**
311
+ * Closes all stale in-use connections in the pool with a resumable PoolClearedOnNetworkError.
312
+ *
313
+ * Only connections where `connection.generation <= minGeneration` are killed.
314
+ */
315
+
316
+
317
+ interruptInUseConnections(minGeneration) {
318
+ for (const connection of this.checkedOut) {
319
+ if (connection.generation <= minGeneration) {
320
+ connection.onError(new errors_1.PoolClearedOnNetworkError(this));
321
+ }
322
+ }
323
+ }
324
+ /** For MongoClient.close() procedures */
325
+
326
+
327
+ closeCheckedOutConnections() {
328
+ for (const conn of this.checkedOut) {
329
+ conn.onError(new error_1.MongoClientClosedError());
330
+ }
331
+ }
332
+ /** Close the pool */
333
+
334
+
335
+ close() {
336
+ if (this.closed) {
337
+ return;
338
+ } // immediately cancel any in-flight connections
339
+
340
+
341
+ this.cancellationToken.emit('cancel'); // end the connection counter
342
+
343
+ if (typeof this.connectionCounter.return === 'function') {
344
+ this.connectionCounter.return(undefined);
345
+ }
346
+
347
+ this.poolState = exports.PoolState.closed;
348
+ this.clearMinPoolSizeTimer();
349
+ this.processWaitQueue();
350
+
351
+ for (const conn of this.connections) {
352
+ this.emitAndLog(ConnectionPool.CONNECTION_CLOSED, new connection_pool_events_1.ConnectionClosedEvent(this, conn, 'poolClosed'));
353
+ conn.destroy();
354
+ }
355
+
356
+ this.connections.clear();
357
+ this.emitAndLog(ConnectionPool.CONNECTION_POOL_CLOSED, new connection_pool_events_1.ConnectionPoolClosedEvent(this));
358
+ }
359
+ /**
360
+ * @internal
361
+ * Reauthenticate a connection
362
+ */
363
+
364
+
365
+ async reauthenticate(connection) {
366
+ const authContext = connection.authContext;
367
+
368
+ if (!authContext) {
369
+ throw new error_1.MongoRuntimeError('No auth context found on connection.');
370
+ }
371
+
372
+ const credentials = authContext.credentials;
373
+
374
+ if (!credentials) {
375
+ throw new error_1.MongoMissingCredentialsError('Connection is missing credentials when asked to reauthenticate');
376
+ }
377
+
378
+ const resolvedCredentials = credentials.resolveAuthMechanism(connection.hello);
379
+ const provider = this.server.topology.client.s.authProviders.getOrCreateProvider(resolvedCredentials.mechanism, resolvedCredentials.mechanismProperties);
380
+
381
+ if (!provider) {
382
+ throw new error_1.MongoMissingCredentialsError(`Reauthenticate failed due to no auth provider for ${credentials.mechanism}`);
383
+ }
384
+
385
+ await provider.reauth(authContext);
386
+ return;
387
+ }
388
+ /** Clear the min pool size timer */
389
+
390
+
391
+ clearMinPoolSizeTimer() {
392
+ const minPoolSizeTimer = this.minPoolSizeTimer;
393
+
394
+ if (minPoolSizeTimer) {
395
+ (0, timers_1.clearTimeout)(minPoolSizeTimer);
396
+ }
397
+ }
398
+
399
+ destroyConnection(connection, reason) {
400
+ this.emitAndLog(ConnectionPool.CONNECTION_CLOSED, new connection_pool_events_1.ConnectionClosedEvent(this, connection, reason)); // destroy the connection
401
+
402
+ connection.destroy();
403
+ }
404
+
405
+ connectionIsStale(connection) {
406
+ const serviceId = connection.serviceId;
407
+
408
+ if (this.loadBalanced && serviceId) {
409
+ const sid = serviceId.toHexString();
410
+ const generation = this.serviceGenerations.get(sid);
411
+ return connection.generation !== generation;
412
+ }
413
+
414
+ return connection.generation !== this.generation;
415
+ }
416
+
417
+ connectionIsIdle(connection) {
418
+ return !!(this.options.maxIdleTimeMS && connection.idleTime > this.options.maxIdleTimeMS);
419
+ }
420
+ /**
421
+ * Destroys a connection if the connection is perished.
422
+ *
423
+ * @returns `true` if the connection was destroyed, `false` otherwise.
424
+ */
425
+
426
+
427
+ destroyConnectionIfPerished(connection) {
428
+ const isStale = this.connectionIsStale(connection);
429
+ const isIdle = this.connectionIsIdle(connection);
430
+
431
+ if (!isStale && !isIdle && !connection.closed) {
432
+ return false;
433
+ }
434
+
435
+ const reason = connection.closed ? 'error' : isStale ? 'stale' : 'idle';
436
+ this.destroyConnection(connection, reason);
437
+ return true;
438
+ }
439
+
440
+ createConnection(callback) {
441
+ const connectOptions = { ...this.options,
442
+ id: this.connectionCounter.next().value,
443
+ generation: this.generation,
444
+ cancellationToken: this.cancellationToken,
445
+ mongoLogger: this.mongoLogger,
446
+ authProviders: this.server.topology.client.s.authProviders
447
+ };
448
+ this.pending++; // This is our version of a "virtual" no-I/O connection as the spec requires
449
+
450
+ const connectionCreatedTime = (0, utils_1.now)();
451
+ this.emitAndLog(ConnectionPool.CONNECTION_CREATED, new connection_pool_events_1.ConnectionCreatedEvent(this, {
452
+ id: connectOptions.id
453
+ }));
454
+ (0, connect_1.connect)(connectOptions).then(connection => {
455
+ // The pool might have closed since we started trying to create a connection
456
+ if (this.poolState !== exports.PoolState.ready) {
457
+ this.pending--;
458
+ connection.destroy();
459
+ callback(this.closed ? new errors_1.PoolClosedError(this) : new errors_1.PoolClearedError(this));
460
+ return;
461
+ } // forward all events from the connection to the pool
462
+
463
+
464
+ for (const event of [...constants_1.APM_EVENTS, connection_1.Connection.CLUSTER_TIME_RECEIVED]) {
465
+ connection.on(event, e => this.emit(event, e));
466
+ }
467
+
468
+ if (this.loadBalanced) {
469
+ connection.on(connection_1.Connection.PINNED, pinType => this.metrics.markPinned(pinType));
470
+ connection.on(connection_1.Connection.UNPINNED, pinType => this.metrics.markUnpinned(pinType));
471
+ const serviceId = connection.serviceId;
472
+
473
+ if (serviceId) {
474
+ let generation;
475
+ const sid = serviceId.toHexString();
476
+
477
+ if (generation = this.serviceGenerations.get(sid)) {
478
+ connection.generation = generation;
479
+ } else {
480
+ this.serviceGenerations.set(sid, 0);
481
+ connection.generation = 0;
482
+ }
483
+ }
484
+ }
485
+
486
+ connection.markAvailable();
487
+ this.emitAndLog(ConnectionPool.CONNECTION_READY, new connection_pool_events_1.ConnectionReadyEvent(this, connection, connectionCreatedTime));
488
+ this.pending--;
489
+ callback(undefined, connection);
490
+ }, error => {
491
+ this.pending--;
492
+ this.server.handleError(error);
493
+ this.emitAndLog(ConnectionPool.CONNECTION_CLOSED, new connection_pool_events_1.ConnectionClosedEvent(this, {
494
+ id: connectOptions.id,
495
+ serviceId: undefined
496
+ }, 'error', // TODO(NODE-5192): Remove this cast
497
+ error));
498
+
499
+ if (error instanceof error_1.MongoNetworkError || error instanceof error_1.MongoServerError) {
500
+ error.connectionGeneration = connectOptions.generation;
501
+ }
502
+
503
+ callback(error ?? new error_1.MongoRuntimeError('Connection creation failed without error'));
504
+ });
505
+ }
506
+
507
+ ensureMinPoolSize() {
508
+ const minPoolSize = this.options.minPoolSize;
509
+
510
+ if (this.poolState !== exports.PoolState.ready || minPoolSize === 0) {
511
+ return;
512
+ }
513
+
514
+ this.connections.prune(connection => this.destroyConnectionIfPerished(connection));
515
+
516
+ if (this.totalConnectionCount < minPoolSize && this.pendingConnectionCount < this.options.maxConnecting) {
517
+ // NOTE: ensureMinPoolSize should not try to get all the pending
518
+ // connection permits because that potentially delays the availability of
519
+ // the connection to a checkout request
520
+ this.createConnection((err, connection) => {
521
+ if (!err && connection) {
522
+ this.connections.push(connection);
523
+ process.nextTick(() => this.processWaitQueue());
524
+ }
525
+
526
+ if (this.poolState === exports.PoolState.ready) {
527
+ (0, timers_1.clearTimeout)(this.minPoolSizeTimer);
528
+ this.minPoolSizeTimer = (0, timers_1.setTimeout)(() => this.ensureMinPoolSize(), this.options.minPoolSizeCheckFrequencyMS);
529
+ }
530
+ });
531
+ } else {
532
+ (0, timers_1.clearTimeout)(this.minPoolSizeTimer);
533
+ this.minPoolSizeTimer = (0, timers_1.setTimeout)(() => this.ensureMinPoolSize(), this.options.minPoolSizeCheckFrequencyMS);
534
+ }
535
+ }
536
+
537
+ processWaitQueue() {
538
+ if (this.processingWaitQueue) {
539
+ return;
540
+ }
541
+
542
+ this.processingWaitQueue = true;
543
+
544
+ while (this.waitQueueSize) {
545
+ const waitQueueMember = this.waitQueue.first();
546
+
547
+ if (!waitQueueMember) {
548
+ this.waitQueue.shift();
549
+ continue;
550
+ }
551
+
552
+ if (waitQueueMember.cancelled) {
553
+ this.waitQueue.shift();
554
+ continue;
555
+ }
556
+
557
+ if (this.poolState !== exports.PoolState.ready) {
558
+ const reason = this.closed ? 'poolClosed' : 'connectionError';
559
+ const error = this.closed ? new errors_1.PoolClosedError(this) : new errors_1.PoolClearedError(this);
560
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECK_OUT_FAILED, new connection_pool_events_1.ConnectionCheckOutFailedEvent(this, reason, waitQueueMember.checkoutTime, error));
561
+ this.waitQueue.shift();
562
+ waitQueueMember.reject(error);
563
+ continue;
564
+ }
565
+
566
+ if (!this.availableConnectionCount) {
567
+ break;
568
+ }
569
+
570
+ const connection = this.connections.shift();
571
+
572
+ if (!connection) {
573
+ break;
574
+ }
575
+
576
+ if (!this.destroyConnectionIfPerished(connection)) {
577
+ this.checkedOut.add(connection);
578
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECKED_OUT, new connection_pool_events_1.ConnectionCheckedOutEvent(this, connection, waitQueueMember.checkoutTime));
579
+ this.waitQueue.shift();
580
+ waitQueueMember.resolve(connection);
581
+ }
582
+ }
583
+
584
+ const {
585
+ maxPoolSize,
586
+ maxConnecting
587
+ } = this.options;
588
+
589
+ while (this.waitQueueSize > 0 && this.pendingConnectionCount < maxConnecting && (maxPoolSize === 0 || this.totalConnectionCount < maxPoolSize)) {
590
+ const waitQueueMember = this.waitQueue.shift();
591
+
592
+ if (!waitQueueMember || waitQueueMember.cancelled) {
593
+ continue;
594
+ }
595
+
596
+ this.createConnection((err, connection) => {
597
+ if (waitQueueMember.cancelled) {
598
+ if (!err && connection) {
599
+ this.connections.push(connection);
600
+ }
601
+ } else {
602
+ if (err) {
603
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECK_OUT_FAILED, // TODO(NODE-5192): Remove this cast
604
+ new connection_pool_events_1.ConnectionCheckOutFailedEvent(this, 'connectionError', waitQueueMember.checkoutTime, err));
605
+ waitQueueMember.reject(err);
606
+ } else if (connection) {
607
+ this.checkedOut.add(connection);
608
+ this.emitAndLog(ConnectionPool.CONNECTION_CHECKED_OUT, new connection_pool_events_1.ConnectionCheckedOutEvent(this, connection, waitQueueMember.checkoutTime));
609
+ waitQueueMember.resolve(connection);
610
+ }
611
+ }
612
+
613
+ process.nextTick(() => this.processWaitQueue());
614
+ });
615
+ }
616
+
617
+ this.processingWaitQueue = false;
618
+ }
619
+
620
+ }
621
+
622
+ exports.ConnectionPool = ConnectionPool;
623
+ /**
624
+ * Emitted when the connection pool is created.
625
+ * @event
626
+ */
627
+
628
+ ConnectionPool.CONNECTION_POOL_CREATED = constants_1.CONNECTION_POOL_CREATED;
629
+ /**
630
+ * Emitted once when the connection pool is closed
631
+ * @event
632
+ */
633
+
634
+ ConnectionPool.CONNECTION_POOL_CLOSED = constants_1.CONNECTION_POOL_CLOSED;
635
+ /**
636
+ * Emitted each time the connection pool is cleared and it's generation incremented
637
+ * @event
638
+ */
639
+
640
+ ConnectionPool.CONNECTION_POOL_CLEARED = constants_1.CONNECTION_POOL_CLEARED;
641
+ /**
642
+ * Emitted each time the connection pool is marked ready
643
+ * @event
644
+ */
645
+
646
+ ConnectionPool.CONNECTION_POOL_READY = constants_1.CONNECTION_POOL_READY;
647
+ /**
648
+ * Emitted when a connection is created.
649
+ * @event
650
+ */
651
+
652
+ ConnectionPool.CONNECTION_CREATED = constants_1.CONNECTION_CREATED;
653
+ /**
654
+ * Emitted when a connection becomes established, and is ready to use
655
+ * @event
656
+ */
657
+
658
+ ConnectionPool.CONNECTION_READY = constants_1.CONNECTION_READY;
659
+ /**
660
+ * Emitted when a connection is closed
661
+ * @event
662
+ */
663
+
664
+ ConnectionPool.CONNECTION_CLOSED = constants_1.CONNECTION_CLOSED;
665
+ /**
666
+ * Emitted when an attempt to check out a connection begins
667
+ * @event
668
+ */
669
+
670
+ ConnectionPool.CONNECTION_CHECK_OUT_STARTED = constants_1.CONNECTION_CHECK_OUT_STARTED;
671
+ /**
672
+ * Emitted when an attempt to check out a connection fails
673
+ * @event
674
+ */
675
+
676
+ ConnectionPool.CONNECTION_CHECK_OUT_FAILED = constants_1.CONNECTION_CHECK_OUT_FAILED;
677
+ /**
678
+ * Emitted each time a connection is successfully checked out of the connection pool
679
+ * @event
680
+ */
681
+
682
+ ConnectionPool.CONNECTION_CHECKED_OUT = constants_1.CONNECTION_CHECKED_OUT;
683
+ /**
684
+ * Emitted each time a connection is successfully checked into the connection pool
685
+ * @event
686
+ */
687
+
688
+ ConnectionPool.CONNECTION_CHECKED_IN = constants_1.CONNECTION_CHECKED_IN;