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,240 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GridFSBucket = void 0;
7
+
8
+ const error_1 = require("../error");
9
+
10
+ const mongo_types_1 = require("../mongo_types");
11
+
12
+ const timeout_1 = require("../timeout");
13
+
14
+ const utils_1 = require("../utils");
15
+
16
+ const write_concern_1 = require("../write_concern");
17
+
18
+ const download_1 = require("./download");
19
+
20
+ const upload_1 = require("./upload");
21
+
22
+ const DEFAULT_GRIDFS_BUCKET_OPTIONS = {
23
+ bucketName: 'fs',
24
+ chunkSizeBytes: 255 * 1024
25
+ };
26
+ /**
27
+ * Constructor for a streaming GridFS interface
28
+ * @public
29
+ */
30
+
31
+ class GridFSBucket extends mongo_types_1.TypedEventEmitter {
32
+ constructor(db, options) {
33
+ super();
34
+ this.on('error', utils_1.noop);
35
+ this.setMaxListeners(0);
36
+ const privateOptions = (0, utils_1.resolveOptions)(db, { ...DEFAULT_GRIDFS_BUCKET_OPTIONS,
37
+ ...options,
38
+ writeConcern: write_concern_1.WriteConcern.fromOptions(options)
39
+ });
40
+ this.s = {
41
+ db,
42
+ options: privateOptions,
43
+ _chunksCollection: db.collection(privateOptions.bucketName + '.chunks'),
44
+ _filesCollection: db.collection(privateOptions.bucketName + '.files'),
45
+ checkedIndexes: false,
46
+ calledOpenUploadStream: false
47
+ };
48
+ }
49
+ /**
50
+ * Returns a writable stream (GridFSBucketWriteStream) for writing
51
+ * buffers to GridFS. The stream's 'id' property contains the resulting
52
+ * file's id.
53
+ *
54
+ * @param filename - The value of the 'filename' key in the files doc
55
+ * @param options - Optional settings.
56
+ */
57
+
58
+
59
+ openUploadStream(filename, options) {
60
+ return new upload_1.GridFSBucketWriteStream(this, filename, {
61
+ timeoutMS: this.s.options.timeoutMS,
62
+ ...options
63
+ });
64
+ }
65
+ /**
66
+ * Returns a writable stream (GridFSBucketWriteStream) for writing
67
+ * buffers to GridFS for a custom file id. The stream's 'id' property contains the resulting
68
+ * file's id.
69
+ */
70
+
71
+
72
+ openUploadStreamWithId(id, filename, options) {
73
+ return new upload_1.GridFSBucketWriteStream(this, filename, {
74
+ timeoutMS: this.s.options.timeoutMS,
75
+ ...options,
76
+ id
77
+ });
78
+ }
79
+ /** Returns a readable stream (GridFSBucketReadStream) for streaming file data from GridFS. */
80
+
81
+
82
+ openDownloadStream(id, options) {
83
+ return new download_1.GridFSBucketReadStream(this.s._chunksCollection, this.s._filesCollection, this.s.options.readPreference, {
84
+ _id: id
85
+ }, {
86
+ timeoutMS: this.s.options.timeoutMS,
87
+ ...options
88
+ });
89
+ }
90
+ /**
91
+ * Deletes a file with the given id
92
+ *
93
+ * @param id - The id of the file doc
94
+ */
95
+
96
+
97
+ async delete(id, options) {
98
+ const {
99
+ timeoutMS
100
+ } = (0, utils_1.resolveOptions)(this.s.db, options);
101
+ let timeoutContext = undefined;
102
+
103
+ if (timeoutMS) {
104
+ timeoutContext = new timeout_1.CSOTTimeoutContext({
105
+ timeoutMS,
106
+ serverSelectionTimeoutMS: this.s.db.client.s.options.serverSelectionTimeoutMS
107
+ });
108
+ }
109
+
110
+ const {
111
+ deletedCount
112
+ } = await this.s._filesCollection.deleteOne({
113
+ _id: id
114
+ }, {
115
+ timeoutMS: timeoutContext?.remainingTimeMS
116
+ });
117
+ const remainingTimeMS = timeoutContext?.remainingTimeMS;
118
+ if (remainingTimeMS != null && remainingTimeMS <= 0) throw new error_1.MongoOperationTimeoutError(`Timed out after ${timeoutMS}ms`); // Delete orphaned chunks before returning FileNotFound
119
+
120
+ await this.s._chunksCollection.deleteMany({
121
+ files_id: id
122
+ }, {
123
+ timeoutMS: remainingTimeMS
124
+ });
125
+
126
+ if (deletedCount === 0) {
127
+ // TODO(NODE-3483): Replace with more appropriate error
128
+ // Consider creating new error MongoGridFSFileNotFoundError
129
+ throw new error_1.MongoRuntimeError(`File not found for id ${id}`);
130
+ }
131
+ }
132
+ /** Convenience wrapper around find on the files collection */
133
+
134
+
135
+ find(filter = {}, options = {}) {
136
+ return this.s._filesCollection.find(filter, options);
137
+ }
138
+ /**
139
+ * Returns a readable stream (GridFSBucketReadStream) for streaming the
140
+ * file with the given name from GridFS. If there are multiple files with
141
+ * the same name, this will stream the most recent file with the given name
142
+ * (as determined by the `uploadDate` field). You can set the `revision`
143
+ * option to change this behavior.
144
+ */
145
+
146
+
147
+ openDownloadStreamByName(filename, options) {
148
+ let sort = {
149
+ uploadDate: -1
150
+ };
151
+ let skip = undefined;
152
+
153
+ if (options && options.revision != null) {
154
+ if (options.revision >= 0) {
155
+ sort = {
156
+ uploadDate: 1
157
+ };
158
+ skip = options.revision;
159
+ } else {
160
+ skip = -options.revision - 1;
161
+ }
162
+ }
163
+
164
+ return new download_1.GridFSBucketReadStream(this.s._chunksCollection, this.s._filesCollection, this.s.options.readPreference, {
165
+ filename
166
+ }, {
167
+ timeoutMS: this.s.options.timeoutMS,
168
+ ...options,
169
+ sort,
170
+ skip
171
+ });
172
+ }
173
+ /**
174
+ * Renames the file with the given _id to the given string
175
+ *
176
+ * @param id - the id of the file to rename
177
+ * @param filename - new name for the file
178
+ */
179
+
180
+
181
+ async rename(id, filename, options) {
182
+ const filter = {
183
+ _id: id
184
+ };
185
+ const update = {
186
+ $set: {
187
+ filename
188
+ }
189
+ };
190
+ const {
191
+ matchedCount
192
+ } = await this.s._filesCollection.updateOne(filter, update, options);
193
+
194
+ if (matchedCount === 0) {
195
+ throw new error_1.MongoRuntimeError(`File with id ${id} not found`);
196
+ }
197
+ }
198
+ /** Removes this bucket's files collection, followed by its chunks collection. */
199
+
200
+
201
+ async drop(options) {
202
+ const {
203
+ timeoutMS
204
+ } = (0, utils_1.resolveOptions)(this.s.db, options);
205
+ let timeoutContext = undefined;
206
+
207
+ if (timeoutMS) {
208
+ timeoutContext = new timeout_1.CSOTTimeoutContext({
209
+ timeoutMS,
210
+ serverSelectionTimeoutMS: this.s.db.client.s.options.serverSelectionTimeoutMS
211
+ });
212
+ }
213
+
214
+ if (timeoutContext) {
215
+ await this.s._filesCollection.drop({
216
+ timeoutMS: timeoutContext.remainingTimeMS
217
+ });
218
+ const remainingTimeMS = timeoutContext.getRemainingTimeMSOrThrow(`Timed out after ${timeoutMS}ms`);
219
+ await this.s._chunksCollection.drop({
220
+ timeoutMS: remainingTimeMS
221
+ });
222
+ } else {
223
+ await this.s._filesCollection.drop();
224
+ await this.s._chunksCollection.drop();
225
+ }
226
+ }
227
+
228
+ }
229
+
230
+ exports.GridFSBucket = GridFSBucket;
231
+ /**
232
+ * When the first call to openUploadStream is made, the upload stream will
233
+ * check to see if it needs to create the proper indexes on the chunks and
234
+ * files collections. This event is fired either when 1) it determines that
235
+ * no index creation is necessary, 2) when it successfully creates the
236
+ * necessary indexes.
237
+ * @event
238
+ */
239
+
240
+ GridFSBucket.INDEX = 'index';
@@ -0,0 +1,446 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GridFSBucketWriteStream = void 0;
7
+
8
+ const stream_1 = require("stream");
9
+
10
+ const bson_1 = require("../bson");
11
+
12
+ const abstract_cursor_1 = require("../cursor/abstract_cursor");
13
+
14
+ const error_1 = require("../error");
15
+
16
+ const timeout_1 = require("../timeout");
17
+
18
+ const utils_1 = require("../utils");
19
+
20
+ const write_concern_1 = require("./../write_concern");
21
+ /**
22
+ * A writable stream that enables you to write buffers to GridFS.
23
+ *
24
+ * Do not instantiate this class directly. Use `openUploadStream()` instead.
25
+ * @public
26
+ */
27
+
28
+
29
+ class GridFSBucketWriteStream extends stream_1.Writable {
30
+ /**
31
+ * @param bucket - Handle for this stream's corresponding bucket
32
+ * @param filename - The value of the 'filename' key in the files doc
33
+ * @param options - Optional settings.
34
+ * @internal
35
+ */
36
+ constructor(bucket, filename, options) {
37
+ super();
38
+ /**
39
+ * The document containing information about the inserted file.
40
+ * This property is defined _after_ the finish event has been emitted.
41
+ * It will remain `null` if an error occurs.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * fs.createReadStream('file.txt')
46
+ * .pipe(bucket.openUploadStream('file.txt'))
47
+ * .on('finish', function () {
48
+ * console.log(this.gridFSFile)
49
+ * })
50
+ * ```
51
+ */
52
+
53
+ this.gridFSFile = null;
54
+ options = options ?? {};
55
+ this.bucket = bucket;
56
+ this.chunks = bucket.s._chunksCollection;
57
+ this.filename = filename;
58
+ this.files = bucket.s._filesCollection;
59
+ this.options = options;
60
+ this.writeConcern = write_concern_1.WriteConcern.fromOptions(options) || bucket.s.options.writeConcern; // Signals the write is all done
61
+
62
+ this.done = false;
63
+ this.id = options.id ? options.id : new bson_1.ObjectId(); // properly inherit the default chunksize from parent
64
+
65
+ this.chunkSizeBytes = options.chunkSizeBytes || this.bucket.s.options.chunkSizeBytes;
66
+ this.bufToStore = Buffer.alloc(this.chunkSizeBytes);
67
+ this.length = 0;
68
+ this.n = 0;
69
+ this.pos = 0;
70
+ this.state = {
71
+ streamEnd: false,
72
+ outstandingRequests: 0,
73
+ errored: false,
74
+ aborted: false
75
+ };
76
+ if (options.timeoutMS != null) this.timeoutContext = new timeout_1.CSOTTimeoutContext({
77
+ timeoutMS: options.timeoutMS,
78
+ serverSelectionTimeoutMS: (0, utils_1.resolveTimeoutOptions)(this.bucket.s.db.client, {}).serverSelectionTimeoutMS
79
+ });
80
+ }
81
+ /**
82
+ * @internal
83
+ *
84
+ * The stream is considered constructed when the indexes are done being created
85
+ */
86
+
87
+
88
+ _construct(callback) {
89
+ if (!this.bucket.s.calledOpenUploadStream) {
90
+ this.bucket.s.calledOpenUploadStream = true;
91
+ checkIndexes(this).then(() => {
92
+ this.bucket.s.checkedIndexes = true;
93
+ this.bucket.emit('index');
94
+ callback();
95
+ }, error => {
96
+ if (error instanceof error_1.MongoOperationTimeoutError) {
97
+ return handleError(this, error, callback);
98
+ }
99
+
100
+ (0, utils_1.squashError)(error);
101
+ callback();
102
+ });
103
+ } else {
104
+ return process.nextTick(callback);
105
+ }
106
+ }
107
+ /**
108
+ * @internal
109
+ * Write a buffer to the stream.
110
+ *
111
+ * @param chunk - Buffer to write
112
+ * @param encoding - Optional encoding for the buffer
113
+ * @param callback - Function to call when the chunk was added to the buffer, or if the entire chunk was persisted to MongoDB if this chunk caused a flush.
114
+ */
115
+
116
+
117
+ _write(chunk, encoding, callback) {
118
+ doWrite(this, chunk, encoding, callback);
119
+ }
120
+ /** @internal */
121
+
122
+
123
+ _final(callback) {
124
+ if (this.state.streamEnd) {
125
+ return process.nextTick(callback);
126
+ }
127
+
128
+ this.state.streamEnd = true;
129
+ writeRemnant(this, callback);
130
+ }
131
+ /**
132
+ * Places this write stream into an aborted state (all future writes fail)
133
+ * and deletes all chunks that have already been written.
134
+ */
135
+
136
+
137
+ async abort() {
138
+ if (this.state.streamEnd) {
139
+ // TODO(NODE-3485): Replace with MongoGridFSStreamClosed
140
+ throw new error_1.MongoAPIError('Cannot abort a stream that has already completed');
141
+ }
142
+
143
+ if (this.state.aborted) {
144
+ // TODO(NODE-3485): Replace with MongoGridFSStreamClosed
145
+ throw new error_1.MongoAPIError('Cannot call abort() on a stream twice');
146
+ }
147
+
148
+ this.state.aborted = true;
149
+ const remainingTimeMS = this.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${this.timeoutContext?.timeoutMS}ms`);
150
+ await this.chunks.deleteMany({
151
+ files_id: this.id
152
+ }, {
153
+ timeoutMS: remainingTimeMS
154
+ });
155
+ }
156
+
157
+ }
158
+
159
+ exports.GridFSBucketWriteStream = GridFSBucketWriteStream;
160
+
161
+ function handleError(stream, error, callback) {
162
+ if (stream.state.errored) {
163
+ process.nextTick(callback);
164
+ return;
165
+ }
166
+
167
+ stream.state.errored = true;
168
+ process.nextTick(callback, error);
169
+ }
170
+
171
+ function createChunkDoc(filesId, n, data) {
172
+ return {
173
+ _id: new bson_1.ObjectId(),
174
+ files_id: filesId,
175
+ n,
176
+ data
177
+ };
178
+ }
179
+
180
+ async function checkChunksIndex(stream) {
181
+ const index = {
182
+ files_id: 1,
183
+ n: 1
184
+ };
185
+ let remainingTimeMS;
186
+ remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`);
187
+ let indexes;
188
+
189
+ try {
190
+ indexes = await stream.chunks.listIndexes({
191
+ timeoutMode: remainingTimeMS != null ? abstract_cursor_1.CursorTimeoutMode.LIFETIME : undefined,
192
+ timeoutMS: remainingTimeMS
193
+ }).toArray();
194
+ } catch (error) {
195
+ if (error instanceof error_1.MongoError && error.code === error_1.MONGODB_ERROR_CODES.NamespaceNotFound) {
196
+ indexes = [];
197
+ } else {
198
+ throw error;
199
+ }
200
+ }
201
+
202
+ const hasChunksIndex = !!indexes.find(index => {
203
+ const keys = Object.keys(index.key);
204
+
205
+ if (keys.length === 2 && index.key.files_id === 1 && index.key.n === 1) {
206
+ return true;
207
+ }
208
+
209
+ return false;
210
+ });
211
+
212
+ if (!hasChunksIndex) {
213
+ remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`);
214
+ await stream.chunks.createIndex(index, { ...stream.writeConcern,
215
+ background: true,
216
+ unique: true,
217
+ timeoutMS: remainingTimeMS
218
+ });
219
+ }
220
+ }
221
+
222
+ function checkDone(stream, callback) {
223
+ if (stream.done) {
224
+ return process.nextTick(callback);
225
+ }
226
+
227
+ if (stream.state.streamEnd && stream.state.outstandingRequests === 0 && !stream.state.errored) {
228
+ // Set done so we do not trigger duplicate createFilesDoc
229
+ stream.done = true; // Create a new files doc
230
+
231
+ const gridFSFile = createFilesDoc(stream.id, stream.length, stream.chunkSizeBytes, stream.filename, stream.options.contentType, stream.options.aliases, stream.options.metadata);
232
+
233
+ if (isAborted(stream, callback)) {
234
+ return;
235
+ }
236
+
237
+ const remainingTimeMS = stream.timeoutContext?.remainingTimeMS;
238
+
239
+ if (remainingTimeMS != null && remainingTimeMS <= 0) {
240
+ return handleError(stream, new error_1.MongoOperationTimeoutError(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`), callback);
241
+ }
242
+
243
+ stream.files.insertOne(gridFSFile, {
244
+ writeConcern: stream.writeConcern,
245
+ timeoutMS: remainingTimeMS
246
+ }).then(() => {
247
+ stream.gridFSFile = gridFSFile;
248
+ callback();
249
+ }, error => {
250
+ return handleError(stream, error, callback);
251
+ });
252
+ return;
253
+ }
254
+
255
+ process.nextTick(callback);
256
+ }
257
+
258
+ async function checkIndexes(stream) {
259
+ let remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`);
260
+ const doc = await stream.files.findOne({}, {
261
+ projection: {
262
+ _id: 1
263
+ },
264
+ timeoutMS: remainingTimeMS
265
+ });
266
+
267
+ if (doc != null) {
268
+ // If at least one document exists assume the collection has the required index
269
+ return;
270
+ }
271
+
272
+ const index = {
273
+ filename: 1,
274
+ uploadDate: 1
275
+ };
276
+ let indexes;
277
+ remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`);
278
+ const listIndexesOptions = {
279
+ timeoutMode: remainingTimeMS != null ? abstract_cursor_1.CursorTimeoutMode.LIFETIME : undefined,
280
+ timeoutMS: remainingTimeMS
281
+ };
282
+
283
+ try {
284
+ indexes = await stream.files.listIndexes(listIndexesOptions).toArray();
285
+ } catch (error) {
286
+ if (error instanceof error_1.MongoError && error.code === error_1.MONGODB_ERROR_CODES.NamespaceNotFound) {
287
+ indexes = [];
288
+ } else {
289
+ throw error;
290
+ }
291
+ }
292
+
293
+ const hasFileIndex = !!indexes.find(index => {
294
+ const keys = Object.keys(index.key);
295
+
296
+ if (keys.length === 2 && index.key.filename === 1 && index.key.uploadDate === 1) {
297
+ return true;
298
+ }
299
+
300
+ return false;
301
+ });
302
+
303
+ if (!hasFileIndex) {
304
+ remainingTimeMS = stream.timeoutContext?.getRemainingTimeMSOrThrow(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`);
305
+ await stream.files.createIndex(index, {
306
+ background: false,
307
+ timeoutMS: remainingTimeMS
308
+ });
309
+ }
310
+
311
+ await checkChunksIndex(stream);
312
+ }
313
+
314
+ function createFilesDoc(_id, length, chunkSize, filename, contentType, aliases, metadata) {
315
+ const ret = {
316
+ _id,
317
+ length,
318
+ chunkSize,
319
+ uploadDate: new Date(),
320
+ filename
321
+ };
322
+
323
+ if (contentType) {
324
+ ret.contentType = contentType;
325
+ }
326
+
327
+ if (aliases) {
328
+ ret.aliases = aliases;
329
+ }
330
+
331
+ if (metadata) {
332
+ ret.metadata = metadata;
333
+ }
334
+
335
+ return ret;
336
+ }
337
+
338
+ function doWrite(stream, chunk, encoding, callback) {
339
+ if (isAborted(stream, callback)) {
340
+ return;
341
+ }
342
+
343
+ const inputBuf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding);
344
+ stream.length += inputBuf.length; // Input is small enough to fit in our buffer
345
+
346
+ if (stream.pos + inputBuf.length < stream.chunkSizeBytes) {
347
+ inputBuf.copy(stream.bufToStore, stream.pos);
348
+ stream.pos += inputBuf.length;
349
+ process.nextTick(callback);
350
+ return;
351
+ } // Otherwise, buffer is too big for current chunk, so we need to flush
352
+ // to MongoDB.
353
+
354
+
355
+ let inputBufRemaining = inputBuf.length;
356
+ let spaceRemaining = stream.chunkSizeBytes - stream.pos;
357
+ let numToCopy = Math.min(spaceRemaining, inputBuf.length);
358
+ let outstandingRequests = 0;
359
+
360
+ while (inputBufRemaining > 0) {
361
+ const inputBufPos = inputBuf.length - inputBufRemaining;
362
+ inputBuf.copy(stream.bufToStore, stream.pos, inputBufPos, inputBufPos + numToCopy);
363
+ stream.pos += numToCopy;
364
+ spaceRemaining -= numToCopy;
365
+ let doc;
366
+
367
+ if (spaceRemaining === 0) {
368
+ doc = createChunkDoc(stream.id, stream.n, Buffer.from(stream.bufToStore));
369
+ const remainingTimeMS = stream.timeoutContext?.remainingTimeMS;
370
+
371
+ if (remainingTimeMS != null && remainingTimeMS <= 0) {
372
+ return handleError(stream, new error_1.MongoOperationTimeoutError(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`), callback);
373
+ }
374
+
375
+ ++stream.state.outstandingRequests;
376
+ ++outstandingRequests;
377
+
378
+ if (isAborted(stream, callback)) {
379
+ return;
380
+ }
381
+
382
+ stream.chunks.insertOne(doc, {
383
+ writeConcern: stream.writeConcern,
384
+ timeoutMS: remainingTimeMS
385
+ }).then(() => {
386
+ --stream.state.outstandingRequests;
387
+ --outstandingRequests;
388
+
389
+ if (!outstandingRequests) {
390
+ checkDone(stream, callback);
391
+ }
392
+ }, error => {
393
+ return handleError(stream, error, callback);
394
+ });
395
+ spaceRemaining = stream.chunkSizeBytes;
396
+ stream.pos = 0;
397
+ ++stream.n;
398
+ }
399
+
400
+ inputBufRemaining -= numToCopy;
401
+ numToCopy = Math.min(spaceRemaining, inputBufRemaining);
402
+ }
403
+ }
404
+
405
+ function writeRemnant(stream, callback) {
406
+ // Buffer is empty, so don't bother to insert
407
+ if (stream.pos === 0) {
408
+ return checkDone(stream, callback);
409
+ } // Create a new buffer to make sure the buffer isn't bigger than it needs
410
+ // to be.
411
+
412
+
413
+ const remnant = Buffer.alloc(stream.pos);
414
+ stream.bufToStore.copy(remnant, 0, 0, stream.pos);
415
+ const doc = createChunkDoc(stream.id, stream.n, remnant); // If the stream was aborted, do not write remnant
416
+
417
+ if (isAborted(stream, callback)) {
418
+ return;
419
+ }
420
+
421
+ const remainingTimeMS = stream.timeoutContext?.remainingTimeMS;
422
+
423
+ if (remainingTimeMS != null && remainingTimeMS <= 0) {
424
+ return handleError(stream, new error_1.MongoOperationTimeoutError(`Upload timed out after ${stream.timeoutContext?.timeoutMS}ms`), callback);
425
+ }
426
+
427
+ ++stream.state.outstandingRequests;
428
+ stream.chunks.insertOne(doc, {
429
+ writeConcern: stream.writeConcern,
430
+ timeoutMS: remainingTimeMS
431
+ }).then(() => {
432
+ --stream.state.outstandingRequests;
433
+ checkDone(stream, callback);
434
+ }, error => {
435
+ return handleError(stream, error, callback);
436
+ });
437
+ }
438
+
439
+ function isAborted(stream, callback) {
440
+ if (stream.state.aborted) {
441
+ process.nextTick(callback, new error_1.MongoAPIError('Stream has been aborted'));
442
+ return true;
443
+ }
444
+
445
+ return false;
446
+ }