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,463 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Server = void 0;
7
+
8
+ const connection_1 = require("../cmap/connection");
9
+
10
+ const connection_pool_1 = require("../cmap/connection_pool");
11
+
12
+ const errors_1 = require("../cmap/errors");
13
+
14
+ const constants_1 = require("../constants");
15
+
16
+ const error_1 = require("../error");
17
+
18
+ const mongo_types_1 = require("../mongo_types");
19
+
20
+ const transactions_1 = require("../transactions");
21
+
22
+ const utils_1 = require("../utils");
23
+
24
+ const write_concern_1 = require("../write_concern");
25
+
26
+ const common_1 = require("./common");
27
+
28
+ const monitor_1 = require("./monitor");
29
+
30
+ const server_description_1 = require("./server_description");
31
+
32
+ const stateTransition = (0, utils_1.makeStateMachine)({
33
+ [common_1.STATE_CLOSED]: [common_1.STATE_CLOSED, common_1.STATE_CONNECTING],
34
+ [common_1.STATE_CONNECTING]: [common_1.STATE_CONNECTING, common_1.STATE_CLOSING, common_1.STATE_CONNECTED, common_1.STATE_CLOSED],
35
+ [common_1.STATE_CONNECTED]: [common_1.STATE_CONNECTED, common_1.STATE_CLOSING, common_1.STATE_CLOSED],
36
+ [common_1.STATE_CLOSING]: [common_1.STATE_CLOSING, common_1.STATE_CLOSED]
37
+ });
38
+ /** @internal */
39
+
40
+ class Server extends mongo_types_1.TypedEventEmitter {
41
+ /**
42
+ * Create a server
43
+ */
44
+ constructor(topology, description, options) {
45
+ super();
46
+ this.on('error', utils_1.noop);
47
+ this.serverApi = options.serverApi;
48
+ const poolOptions = {
49
+ hostAddress: description.hostAddress,
50
+ ...options
51
+ };
52
+ this.topology = topology;
53
+ this.pool = new connection_pool_1.ConnectionPool(this, poolOptions);
54
+ this.s = {
55
+ description,
56
+ options,
57
+ state: common_1.STATE_CLOSED,
58
+ operationCount: 0
59
+ };
60
+
61
+ for (const event of [...constants_1.CMAP_EVENTS, ...constants_1.APM_EVENTS]) {
62
+ this.pool.on(event, e => this.emit(event, e));
63
+ }
64
+
65
+ this.pool.on(connection_1.Connection.CLUSTER_TIME_RECEIVED, clusterTime => {
66
+ this.clusterTime = clusterTime;
67
+ });
68
+
69
+ if (this.loadBalanced) {
70
+ this.monitor = null; // monitoring is disabled in load balancing mode
71
+
72
+ return;
73
+ } // create the monitor
74
+
75
+
76
+ this.monitor = new monitor_1.Monitor(this, this.s.options);
77
+
78
+ for (const event of constants_1.HEARTBEAT_EVENTS) {
79
+ this.monitor.on(event, e => this.emit(event, e));
80
+ }
81
+
82
+ this.monitor.on('resetServer', error => markServerUnknown(this, error));
83
+ this.monitor.on(Server.SERVER_HEARTBEAT_SUCCEEDED, event => {
84
+ this.emit(Server.DESCRIPTION_RECEIVED, new server_description_1.ServerDescription(this.description.hostAddress, event.reply, {
85
+ roundTripTime: this.monitor?.roundTripTime,
86
+ minRoundTripTime: this.monitor?.minRoundTripTime
87
+ }));
88
+
89
+ if (this.s.state === common_1.STATE_CONNECTING) {
90
+ stateTransition(this, common_1.STATE_CONNECTED);
91
+ this.emit(Server.CONNECT, this);
92
+ }
93
+ });
94
+ }
95
+
96
+ get clusterTime() {
97
+ return this.topology.clusterTime;
98
+ }
99
+
100
+ set clusterTime(clusterTime) {
101
+ this.topology.clusterTime = clusterTime;
102
+ }
103
+
104
+ get description() {
105
+ return this.s.description;
106
+ }
107
+
108
+ get name() {
109
+ return this.s.description.address;
110
+ }
111
+
112
+ get autoEncrypter() {
113
+ if (this.s.options && this.s.options.autoEncrypter) {
114
+ return this.s.options.autoEncrypter;
115
+ }
116
+
117
+ return;
118
+ }
119
+
120
+ get loadBalanced() {
121
+ return this.topology.description.type === common_1.TopologyType.LoadBalanced;
122
+ }
123
+ /**
124
+ * Initiate server connect
125
+ */
126
+
127
+
128
+ connect() {
129
+ if (this.s.state !== common_1.STATE_CLOSED) {
130
+ return;
131
+ }
132
+
133
+ stateTransition(this, common_1.STATE_CONNECTING); // If in load balancer mode we automatically set the server to
134
+ // a load balancer. It never transitions out of this state and
135
+ // has no monitor.
136
+
137
+ if (!this.loadBalanced) {
138
+ this.monitor?.connect();
139
+ } else {
140
+ stateTransition(this, common_1.STATE_CONNECTED);
141
+ this.emit(Server.CONNECT, this);
142
+ }
143
+ }
144
+
145
+ closeCheckedOutConnections() {
146
+ return this.pool.closeCheckedOutConnections();
147
+ }
148
+ /** Destroy the server connection */
149
+
150
+
151
+ close() {
152
+ if (this.s.state === common_1.STATE_CLOSED) {
153
+ return;
154
+ }
155
+
156
+ stateTransition(this, common_1.STATE_CLOSING);
157
+
158
+ if (!this.loadBalanced) {
159
+ this.monitor?.close();
160
+ }
161
+
162
+ this.pool.close();
163
+ stateTransition(this, common_1.STATE_CLOSED);
164
+ this.emit('closed');
165
+ }
166
+ /**
167
+ * Immediately schedule monitoring of this server. If there already an attempt being made
168
+ * this will be a no-op.
169
+ */
170
+
171
+
172
+ requestCheck() {
173
+ if (!this.loadBalanced) {
174
+ this.monitor?.requestCheck();
175
+ }
176
+ }
177
+
178
+ async command(ns, cmd, { ...options
179
+ }, responseType) {
180
+ if (ns.db == null || typeof ns === 'string') {
181
+ throw new error_1.MongoInvalidArgumentError('Namespace must not be a string');
182
+ }
183
+
184
+ if (this.s.state === common_1.STATE_CLOSING || this.s.state === common_1.STATE_CLOSED) {
185
+ throw new error_1.MongoServerClosedError();
186
+ }
187
+
188
+ options.directConnection = this.topology.s.options.directConnection; // There are cases where we need to flag the read preference not to get sent in
189
+ // the command, such as pre-5.0 servers attempting to perform an aggregate write
190
+ // with a non-primary read preference. In this case the effective read preference
191
+ // (primary) is not the same as the provided and must be removed completely.
192
+
193
+ if (options.omitReadPreference) {
194
+ delete options.readPreference;
195
+ }
196
+
197
+ if (this.description.iscryptd) {
198
+ options.omitMaxTimeMS = true;
199
+ }
200
+
201
+ const session = options.session;
202
+ let conn = session?.pinnedConnection;
203
+ this.incrementOperationCount();
204
+
205
+ if (conn == null) {
206
+ try {
207
+ conn = await this.pool.checkOut(options);
208
+
209
+ if (this.loadBalanced && isPinnableCommand(cmd, session)) {
210
+ session?.pin(conn);
211
+ }
212
+ } catch (checkoutError) {
213
+ this.decrementOperationCount();
214
+ if (!(checkoutError instanceof errors_1.PoolClearedError)) this.handleError(checkoutError);
215
+ throw checkoutError;
216
+ }
217
+ }
218
+
219
+ let reauthPromise = null;
220
+
221
+ try {
222
+ try {
223
+ const res = await conn.command(ns, cmd, options, responseType);
224
+ (0, write_concern_1.throwIfWriteConcernError)(res);
225
+ return res;
226
+ } catch (commandError) {
227
+ throw this.decorateCommandError(conn, cmd, options, commandError);
228
+ }
229
+ } catch (operationError) {
230
+ if (operationError instanceof error_1.MongoError && operationError.code === error_1.MONGODB_ERROR_CODES.Reauthenticate) {
231
+ reauthPromise = this.pool.reauthenticate(conn);
232
+ reauthPromise.then(undefined, error => {
233
+ reauthPromise = null;
234
+ (0, utils_1.squashError)(error);
235
+ });
236
+ await (0, utils_1.abortable)(reauthPromise, options);
237
+ reauthPromise = null; // only reachable if reauth succeeds
238
+
239
+ try {
240
+ const res = await conn.command(ns, cmd, options, responseType);
241
+ (0, write_concern_1.throwIfWriteConcernError)(res);
242
+ return res;
243
+ } catch (commandError) {
244
+ throw this.decorateCommandError(conn, cmd, options, commandError);
245
+ }
246
+ } else {
247
+ throw operationError;
248
+ }
249
+ } finally {
250
+ this.decrementOperationCount();
251
+
252
+ if (session?.pinnedConnection !== conn) {
253
+ if (reauthPromise != null) {
254
+ // The reauth promise only exists if it hasn't thrown.
255
+ const checkBackIn = () => {
256
+ this.pool.checkIn(conn);
257
+ };
258
+
259
+ void reauthPromise.then(checkBackIn, checkBackIn);
260
+ } else {
261
+ this.pool.checkIn(conn);
262
+ }
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * Handle SDAM error
268
+ * @internal
269
+ */
270
+
271
+
272
+ handleError(error, connection) {
273
+ if (!(error instanceof error_1.MongoError)) {
274
+ return;
275
+ }
276
+
277
+ const isStaleError = error.connectionGeneration && error.connectionGeneration < this.pool.generation;
278
+
279
+ if (isStaleError) {
280
+ return;
281
+ }
282
+
283
+ const isNetworkNonTimeoutError = error instanceof error_1.MongoNetworkError && !(error instanceof error_1.MongoNetworkTimeoutError);
284
+ const isNetworkTimeoutBeforeHandshakeError = error instanceof error_1.MongoNetworkError && error.beforeHandshake;
285
+ const isAuthHandshakeError = error.hasErrorLabel(error_1.MongoErrorLabel.HandshakeError);
286
+
287
+ if (isNetworkNonTimeoutError || isNetworkTimeoutBeforeHandshakeError || isAuthHandshakeError) {
288
+ // In load balanced mode we never mark the server as unknown and always
289
+ // clear for the specific service id.
290
+ if (!this.loadBalanced) {
291
+ error.addErrorLabel(error_1.MongoErrorLabel.ResetPool);
292
+ markServerUnknown(this, error);
293
+ } else if (connection) {
294
+ this.pool.clear({
295
+ serviceId: connection.serviceId
296
+ });
297
+ }
298
+ } else {
299
+ if ((0, error_1.isSDAMUnrecoverableError)(error)) {
300
+ if (shouldHandleStateChangeError(this, error)) {
301
+ const shouldClearPool = (0, utils_1.maxWireVersion)(this) <= 7 || (0, error_1.isNodeShuttingDownError)(error);
302
+
303
+ if (this.loadBalanced && connection && shouldClearPool) {
304
+ this.pool.clear({
305
+ serviceId: connection.serviceId
306
+ });
307
+ }
308
+
309
+ if (!this.loadBalanced) {
310
+ if (shouldClearPool) {
311
+ error.addErrorLabel(error_1.MongoErrorLabel.ResetPool);
312
+ }
313
+
314
+ markServerUnknown(this, error);
315
+ process.nextTick(() => this.requestCheck());
316
+ }
317
+ }
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Ensure that error is properly decorated and internal state is updated before throwing
323
+ * @internal
324
+ */
325
+
326
+
327
+ decorateCommandError(connection, cmd, options, error) {
328
+ if (typeof error !== 'object' || error == null || !('name' in error)) {
329
+ throw new error_1.MongoRuntimeError('An unexpected error type: ' + typeof error);
330
+ }
331
+
332
+ if (error.name === 'AbortError' && 'cause' in error && error.cause instanceof error_1.MongoError) {
333
+ error = error.cause;
334
+ }
335
+
336
+ if (!(error instanceof error_1.MongoError)) {
337
+ // Node.js or some other error we have not special handling for
338
+ return error;
339
+ }
340
+
341
+ if (connectionIsStale(this.pool, connection)) {
342
+ return error;
343
+ }
344
+
345
+ const session = options?.session;
346
+
347
+ if (error instanceof error_1.MongoNetworkError) {
348
+ if (session && !session.hasEnded && session.serverSession) {
349
+ session.serverSession.isDirty = true;
350
+ } // inActiveTransaction check handles commit and abort.
351
+
352
+
353
+ if (inActiveTransaction(session, cmd) && !error.hasErrorLabel(error_1.MongoErrorLabel.TransientTransactionError)) {
354
+ error.addErrorLabel(error_1.MongoErrorLabel.TransientTransactionError);
355
+ }
356
+
357
+ if ((isRetryableWritesEnabled(this.topology) || (0, transactions_1.isTransactionCommand)(cmd)) && (0, utils_1.supportsRetryableWrites)(this) && !inActiveTransaction(session, cmd)) {
358
+ error.addErrorLabel(error_1.MongoErrorLabel.RetryableWriteError);
359
+ }
360
+ } else {
361
+ if ((isRetryableWritesEnabled(this.topology) || (0, transactions_1.isTransactionCommand)(cmd)) && (0, error_1.needsRetryableWriteLabel)(error, (0, utils_1.maxWireVersion)(this), this.description.type) && !inActiveTransaction(session, cmd)) {
362
+ error.addErrorLabel(error_1.MongoErrorLabel.RetryableWriteError);
363
+ }
364
+ }
365
+
366
+ if (session && session.isPinned && error.hasErrorLabel(error_1.MongoErrorLabel.TransientTransactionError)) {
367
+ session.unpin({
368
+ force: true
369
+ });
370
+ }
371
+
372
+ this.handleError(error, connection);
373
+ return error;
374
+ }
375
+ /**
376
+ * Decrement the operation count, returning the new count.
377
+ */
378
+
379
+
380
+ decrementOperationCount() {
381
+ return this.s.operationCount -= 1;
382
+ }
383
+ /**
384
+ * Increment the operation count, returning the new count.
385
+ */
386
+
387
+
388
+ incrementOperationCount() {
389
+ return this.s.operationCount += 1;
390
+ }
391
+
392
+ }
393
+
394
+ exports.Server = Server;
395
+ /** @event */
396
+
397
+ Server.SERVER_HEARTBEAT_STARTED = constants_1.SERVER_HEARTBEAT_STARTED;
398
+ /** @event */
399
+
400
+ Server.SERVER_HEARTBEAT_SUCCEEDED = constants_1.SERVER_HEARTBEAT_SUCCEEDED;
401
+ /** @event */
402
+
403
+ Server.SERVER_HEARTBEAT_FAILED = constants_1.SERVER_HEARTBEAT_FAILED;
404
+ /** @event */
405
+
406
+ Server.CONNECT = constants_1.CONNECT;
407
+ /** @event */
408
+
409
+ Server.DESCRIPTION_RECEIVED = constants_1.DESCRIPTION_RECEIVED;
410
+ /** @event */
411
+
412
+ Server.CLOSED = constants_1.CLOSED;
413
+ /** @event */
414
+
415
+ Server.ENDED = constants_1.ENDED;
416
+
417
+ function markServerUnknown(server, error) {
418
+ // Load balancer servers can never be marked unknown.
419
+ if (server.loadBalanced) {
420
+ return;
421
+ }
422
+
423
+ if (error instanceof error_1.MongoNetworkError && !(error instanceof error_1.MongoNetworkTimeoutError)) {
424
+ server.monitor?.reset();
425
+ }
426
+
427
+ server.emit(Server.DESCRIPTION_RECEIVED, new server_description_1.ServerDescription(server.description.hostAddress, undefined, {
428
+ error
429
+ }));
430
+ }
431
+
432
+ function isPinnableCommand(cmd, session) {
433
+ if (session) {
434
+ return session.inTransaction() || session.transaction.isCommitted && 'commitTransaction' in cmd || 'aggregate' in cmd || 'find' in cmd || 'getMore' in cmd || 'listCollections' in cmd || 'listIndexes' in cmd || 'bulkWrite' in cmd;
435
+ }
436
+
437
+ return false;
438
+ }
439
+
440
+ function connectionIsStale(pool, connection) {
441
+ if (connection.serviceId) {
442
+ return connection.generation !== pool.serviceGenerations.get(connection.serviceId.toHexString());
443
+ }
444
+
445
+ return connection.generation !== pool.generation;
446
+ }
447
+
448
+ function shouldHandleStateChangeError(server, err) {
449
+ const etv = err.topologyVersion;
450
+ const stv = server.description.topologyVersion;
451
+ return (0, server_description_1.compareTopologyVersion)(stv, etv) < 0;
452
+ }
453
+
454
+ function inActiveTransaction(session, cmd) {
455
+ return session && session.inTransaction() && !(0, transactions_1.isTransactionCommand)(cmd);
456
+ }
457
+ /** this checks the retryWrites option passed down from the client options, it
458
+ * does not check if the server supports retryable writes */
459
+
460
+
461
+ function isRetryableWritesEnabled(topology) {
462
+ return topology.s.options.retryWrites !== false;
463
+ }
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ServerDescription = void 0;
7
+ exports.parseServerType = parseServerType;
8
+ exports.compareTopologyVersion = compareTopologyVersion;
9
+
10
+ const bson_1 = require("../bson");
11
+
12
+ const error_1 = require("../error");
13
+
14
+ const utils_1 = require("../utils");
15
+
16
+ const common_1 = require("./common");
17
+
18
+ const WRITABLE_SERVER_TYPES = new Set([common_1.ServerType.RSPrimary, common_1.ServerType.Standalone, common_1.ServerType.Mongos, common_1.ServerType.LoadBalancer]);
19
+ const DATA_BEARING_SERVER_TYPES = new Set([common_1.ServerType.RSPrimary, common_1.ServerType.RSSecondary, common_1.ServerType.Mongos, common_1.ServerType.Standalone, common_1.ServerType.LoadBalancer]);
20
+ /**
21
+ * The client's view of a single server, based on the most recent hello outcome.
22
+ *
23
+ * Internal type, not meant to be directly instantiated
24
+ * @public
25
+ */
26
+
27
+ class ServerDescription {
28
+ /**
29
+ * Create a ServerDescription
30
+ * @internal
31
+ *
32
+ * @param address - The address of the server
33
+ * @param hello - An optional hello response for this server
34
+ */
35
+ constructor(address, hello, options = {}) {
36
+ if (address == null || address === '') {
37
+ throw new error_1.MongoRuntimeError('ServerDescription must be provided with a non-empty address');
38
+ }
39
+
40
+ this.address = typeof address === 'string' ? utils_1.HostAddress.fromString(address).toString() // Use HostAddress to normalize
41
+ : address.toString();
42
+ this.type = parseServerType(hello, options);
43
+ this.hosts = hello?.hosts?.map(host => host.toLowerCase()) ?? [];
44
+ this.passives = hello?.passives?.map(host => host.toLowerCase()) ?? [];
45
+ this.arbiters = hello?.arbiters?.map(host => host.toLowerCase()) ?? [];
46
+ this.tags = hello?.tags ?? {};
47
+ this.minWireVersion = hello?.minWireVersion ?? 0;
48
+ this.maxWireVersion = hello?.maxWireVersion ?? 0;
49
+ this.roundTripTime = options?.roundTripTime ?? -1;
50
+ this.minRoundTripTime = options?.minRoundTripTime ?? 0;
51
+ this.lastUpdateTime = (0, utils_1.now)();
52
+ this.lastWriteDate = hello?.lastWrite?.lastWriteDate ?? 0; // NOTE: This actually builds the stack string instead of holding onto the getter and all its
53
+ // associated references. This is done to prevent a memory leak.
54
+
55
+ this.error = options.error ?? null;
56
+ this.error?.stack; // TODO(NODE-2674): Preserve int64 sent from MongoDB
57
+
58
+ this.topologyVersion = this.error?.topologyVersion ?? hello?.topologyVersion ?? null;
59
+ this.setName = hello?.setName ?? null;
60
+ this.setVersion = hello?.setVersion ?? null;
61
+ this.electionId = hello?.electionId ?? null;
62
+ this.logicalSessionTimeoutMinutes = hello?.logicalSessionTimeoutMinutes ?? null;
63
+ this.maxMessageSizeBytes = hello?.maxMessageSizeBytes ?? null;
64
+ this.maxWriteBatchSize = hello?.maxWriteBatchSize ?? null;
65
+ this.maxBsonObjectSize = hello?.maxBsonObjectSize ?? null;
66
+ this.primary = hello?.primary ?? null;
67
+ this.me = hello?.me?.toLowerCase() ?? null;
68
+ this.$clusterTime = hello?.$clusterTime ?? null;
69
+ this.iscryptd = Boolean(hello?.iscryptd);
70
+ }
71
+
72
+ get hostAddress() {
73
+ return utils_1.HostAddress.fromString(this.address);
74
+ }
75
+
76
+ get allHosts() {
77
+ return this.hosts.concat(this.arbiters).concat(this.passives);
78
+ }
79
+ /** Is this server available for reads*/
80
+
81
+
82
+ get isReadable() {
83
+ return this.type === common_1.ServerType.RSSecondary || this.isWritable;
84
+ }
85
+ /** Is this server data bearing */
86
+
87
+
88
+ get isDataBearing() {
89
+ return DATA_BEARING_SERVER_TYPES.has(this.type);
90
+ }
91
+ /** Is this server available for writes */
92
+
93
+
94
+ get isWritable() {
95
+ return WRITABLE_SERVER_TYPES.has(this.type);
96
+ }
97
+
98
+ get host() {
99
+ const chopLength = `:${this.port}`.length;
100
+ return this.address.slice(0, -chopLength);
101
+ }
102
+
103
+ get port() {
104
+ const port = this.address.split(':').pop();
105
+ return port ? Number.parseInt(port, 10) : 27017;
106
+ }
107
+ /**
108
+ * Determines if another `ServerDescription` is equal to this one per the rules defined in the SDAM specification.
109
+ * @see https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md
110
+ */
111
+
112
+
113
+ equals(other) {
114
+ // Despite using the comparator that would determine a nullish topologyVersion as greater than
115
+ // for equality we should only always perform direct equality comparison
116
+ const topologyVersionsEqual = this.topologyVersion === other?.topologyVersion || compareTopologyVersion(this.topologyVersion, other?.topologyVersion) === 0;
117
+ const electionIdsEqual = this.electionId != null && other?.electionId != null ? (0, utils_1.compareObjectId)(this.electionId, other.electionId) === 0 : this.electionId === other?.electionId;
118
+ return other != null && other.iscryptd === this.iscryptd && (0, utils_1.errorStrictEqual)(this.error, other.error) && this.type === other.type && this.minWireVersion === other.minWireVersion && (0, utils_1.arrayStrictEqual)(this.hosts, other.hosts) && tagsStrictEqual(this.tags, other.tags) && this.setName === other.setName && this.setVersion === other.setVersion && electionIdsEqual && this.primary === other.primary && this.logicalSessionTimeoutMinutes === other.logicalSessionTimeoutMinutes && topologyVersionsEqual;
119
+ }
120
+
121
+ }
122
+
123
+ exports.ServerDescription = ServerDescription; // Parses a `hello` message and determines the server type
124
+
125
+ function parseServerType(hello, options) {
126
+ if (options?.loadBalanced) {
127
+ return common_1.ServerType.LoadBalancer;
128
+ }
129
+
130
+ if (!hello || !hello.ok) {
131
+ return common_1.ServerType.Unknown;
132
+ }
133
+
134
+ if (hello.isreplicaset) {
135
+ return common_1.ServerType.RSGhost;
136
+ }
137
+
138
+ if (hello.msg && hello.msg === 'isdbgrid') {
139
+ return common_1.ServerType.Mongos;
140
+ }
141
+
142
+ if (hello.setName) {
143
+ if (hello.hidden) {
144
+ return common_1.ServerType.RSOther;
145
+ } else if (hello.isWritablePrimary) {
146
+ return common_1.ServerType.RSPrimary;
147
+ } else if (hello.secondary) {
148
+ return common_1.ServerType.RSSecondary;
149
+ } else if (hello.arbiterOnly) {
150
+ return common_1.ServerType.RSArbiter;
151
+ } else {
152
+ return common_1.ServerType.RSOther;
153
+ }
154
+ }
155
+
156
+ return common_1.ServerType.Standalone;
157
+ }
158
+
159
+ function tagsStrictEqual(tags, tags2) {
160
+ const tagsKeys = Object.keys(tags);
161
+ const tags2Keys = Object.keys(tags2);
162
+ return tagsKeys.length === tags2Keys.length && tagsKeys.every(key => tags2[key] === tags[key]);
163
+ }
164
+ /**
165
+ * Compares two topology versions.
166
+ *
167
+ * 1. If the response topologyVersion is unset or the ServerDescription's
168
+ * topologyVersion is null, the client MUST assume the response is more recent.
169
+ * 1. If the response's topologyVersion.processId is not equal to the
170
+ * ServerDescription's, the client MUST assume the response is more recent.
171
+ * 1. If the response's topologyVersion.processId is equal to the
172
+ * ServerDescription's, the client MUST use the counter field to determine
173
+ * which topologyVersion is more recent.
174
+ *
175
+ * ```ts
176
+ * currentTv < newTv === -1
177
+ * currentTv === newTv === 0
178
+ * currentTv > newTv === 1
179
+ * ```
180
+ */
181
+
182
+
183
+ function compareTopologyVersion(currentTv, newTv) {
184
+ if (currentTv == null || newTv == null) {
185
+ return -1;
186
+ }
187
+
188
+ if (!currentTv.processId.equals(newTv.processId)) {
189
+ return -1;
190
+ } // TODO(NODE-2674): Preserve int64 sent from MongoDB
191
+
192
+
193
+ const currentCounter = typeof currentTv.counter === 'bigint' ? bson_1.Long.fromBigInt(currentTv.counter) : bson_1.Long.isLong(currentTv.counter) ? currentTv.counter : bson_1.Long.fromNumber(currentTv.counter);
194
+ const newCounter = typeof newTv.counter === 'bigint' ? bson_1.Long.fromBigInt(newTv.counter) : bson_1.Long.isLong(newTv.counter) ? newTv.counter : bson_1.Long.fromNumber(newTv.counter);
195
+ return currentCounter.compare(newCounter);
196
+ }