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,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hmacSha256Hook = exports.hmacSha512Hook = exports.aes256CtrDecryptHook = exports.aes256CtrEncryptHook = exports.aes256CbcDecryptHook = exports.aes256CbcEncryptHook = void 0;
7
+ exports.makeAES256Hook = makeAES256Hook;
8
+ exports.randomHook = randomHook;
9
+ exports.sha256Hook = sha256Hook;
10
+ exports.makeHmacHook = makeHmacHook;
11
+ exports.signRsaSha256Hook = signRsaSha256Hook;
12
+
13
+ const crypto = require("crypto");
14
+
15
+ function makeAES256Hook(method, mode) {
16
+ return function (key, iv, input, output) {
17
+ let result;
18
+
19
+ try {
20
+ const cipher = crypto[method](mode, key, iv);
21
+ cipher.setAutoPadding(false);
22
+ result = cipher.update(input);
23
+ const final = cipher.final();
24
+
25
+ if (final.length > 0) {
26
+ result = Buffer.concat([result, final]);
27
+ }
28
+ } catch (e) {
29
+ return e;
30
+ }
31
+
32
+ result.copy(output);
33
+ return result.length;
34
+ };
35
+ }
36
+
37
+ function randomHook(buffer, count) {
38
+ try {
39
+ crypto.randomFillSync(buffer, 0, count);
40
+ } catch (e) {
41
+ return e;
42
+ }
43
+
44
+ return count;
45
+ }
46
+
47
+ function sha256Hook(input, output) {
48
+ let result;
49
+
50
+ try {
51
+ result = crypto.createHash('sha256').update(input).digest();
52
+ } catch (e) {
53
+ return e;
54
+ }
55
+
56
+ result.copy(output);
57
+ return result.length;
58
+ }
59
+
60
+ function makeHmacHook(algorithm) {
61
+ return (key, input, output) => {
62
+ let result;
63
+
64
+ try {
65
+ result = crypto.createHmac(algorithm, key).update(input).digest();
66
+ } catch (e) {
67
+ return e;
68
+ }
69
+
70
+ result.copy(output);
71
+ return result.length;
72
+ };
73
+ }
74
+
75
+ function signRsaSha256Hook(key, input, output) {
76
+ let result;
77
+
78
+ try {
79
+ const signer = crypto.createSign('sha256WithRSAEncryption');
80
+ const privateKey = Buffer.from(`-----BEGIN PRIVATE KEY-----\n${key.toString('base64')}\n-----END PRIVATE KEY-----\n`);
81
+ result = signer.update(input).end().sign(privateKey);
82
+ } catch (e) {
83
+ return e;
84
+ }
85
+
86
+ result.copy(output);
87
+ return result.length;
88
+ }
89
+
90
+ exports.aes256CbcEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-cbc');
91
+ exports.aes256CbcDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-cbc');
92
+ exports.aes256CtrEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-ctr');
93
+ exports.aes256CtrDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-ctr');
94
+ exports.hmacSha512Hook = makeHmacHook('sha512');
95
+ exports.hmacSha256Hook = makeHmacHook('sha256');
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MongoCryptKMSRequestNetworkTimeoutError = exports.MongoCryptAzureKMSRequestError = exports.MongoCryptCreateEncryptedCollectionError = exports.MongoCryptCreateDataKeyError = exports.MongoCryptInvalidArgumentError = exports.MongoCryptError = void 0;
7
+
8
+ const error_1 = require("../error");
9
+ /**
10
+ * @public
11
+ * An error indicating that something went wrong specifically with MongoDB Client Encryption
12
+ */
13
+
14
+
15
+ class MongoCryptError extends error_1.MongoError {
16
+ /**
17
+ * **Do not use this constructor!**
18
+ *
19
+ * Meant for internal use only.
20
+ *
21
+ * @remarks
22
+ * This class is only meant to be constructed within the driver. This constructor is
23
+ * not subject to semantic versioning compatibility guarantees and may change at any time.
24
+ *
25
+ * @public
26
+ **/
27
+ constructor(message, options = {}) {
28
+ super(message, options);
29
+ }
30
+
31
+ get name() {
32
+ return 'MongoCryptError';
33
+ }
34
+
35
+ }
36
+
37
+ exports.MongoCryptError = MongoCryptError;
38
+ /**
39
+ * @public
40
+ *
41
+ * An error indicating an invalid argument was provided to an encryption API.
42
+ */
43
+
44
+ class MongoCryptInvalidArgumentError extends MongoCryptError {
45
+ /**
46
+ * **Do not use this constructor!**
47
+ *
48
+ * Meant for internal use only.
49
+ *
50
+ * @remarks
51
+ * This class is only meant to be constructed within the driver. This constructor is
52
+ * not subject to semantic versioning compatibility guarantees and may change at any time.
53
+ *
54
+ * @public
55
+ **/
56
+ constructor(message) {
57
+ super(message);
58
+ }
59
+
60
+ get name() {
61
+ return 'MongoCryptInvalidArgumentError';
62
+ }
63
+
64
+ }
65
+
66
+ exports.MongoCryptInvalidArgumentError = MongoCryptInvalidArgumentError;
67
+ /**
68
+ * @public
69
+ * An error indicating that `ClientEncryption.createEncryptedCollection()` failed to create data keys
70
+ */
71
+
72
+ class MongoCryptCreateDataKeyError extends MongoCryptError {
73
+ /**
74
+ * **Do not use this constructor!**
75
+ *
76
+ * Meant for internal use only.
77
+ *
78
+ * @remarks
79
+ * This class is only meant to be constructed within the driver. This constructor is
80
+ * not subject to semantic versioning compatibility guarantees and may change at any time.
81
+ *
82
+ * @public
83
+ **/
84
+ constructor(encryptedFields, {
85
+ cause
86
+ }) {
87
+ super(`Unable to complete creating data keys: ${cause.message}`, {
88
+ cause
89
+ });
90
+ this.encryptedFields = encryptedFields;
91
+ }
92
+
93
+ get name() {
94
+ return 'MongoCryptCreateDataKeyError';
95
+ }
96
+
97
+ }
98
+
99
+ exports.MongoCryptCreateDataKeyError = MongoCryptCreateDataKeyError;
100
+ /**
101
+ * @public
102
+ * An error indicating that `ClientEncryption.createEncryptedCollection()` failed to create a collection
103
+ */
104
+
105
+ class MongoCryptCreateEncryptedCollectionError extends MongoCryptError {
106
+ /**
107
+ * **Do not use this constructor!**
108
+ *
109
+ * Meant for internal use only.
110
+ *
111
+ * @remarks
112
+ * This class is only meant to be constructed within the driver. This constructor is
113
+ * not subject to semantic versioning compatibility guarantees and may change at any time.
114
+ *
115
+ * @public
116
+ **/
117
+ constructor(encryptedFields, {
118
+ cause
119
+ }) {
120
+ super(`Unable to create collection: ${cause.message}`, {
121
+ cause
122
+ });
123
+ this.encryptedFields = encryptedFields;
124
+ }
125
+
126
+ get name() {
127
+ return 'MongoCryptCreateEncryptedCollectionError';
128
+ }
129
+
130
+ }
131
+
132
+ exports.MongoCryptCreateEncryptedCollectionError = MongoCryptCreateEncryptedCollectionError;
133
+ /**
134
+ * @public
135
+ * An error indicating that mongodb-client-encryption failed to auto-refresh Azure KMS credentials.
136
+ */
137
+
138
+ class MongoCryptAzureKMSRequestError extends MongoCryptError {
139
+ /**
140
+ * **Do not use this constructor!**
141
+ *
142
+ * Meant for internal use only.
143
+ *
144
+ * @remarks
145
+ * This class is only meant to be constructed within the driver. This constructor is
146
+ * not subject to semantic versioning compatibility guarantees and may change at any time.
147
+ *
148
+ * @public
149
+ **/
150
+ constructor(message, body) {
151
+ super(message);
152
+ this.body = body;
153
+ }
154
+
155
+ get name() {
156
+ return 'MongoCryptAzureKMSRequestError';
157
+ }
158
+
159
+ }
160
+
161
+ exports.MongoCryptAzureKMSRequestError = MongoCryptAzureKMSRequestError;
162
+ /** @public */
163
+
164
+ class MongoCryptKMSRequestNetworkTimeoutError extends MongoCryptError {
165
+ get name() {
166
+ return 'MongoCryptKMSRequestNetworkTimeoutError';
167
+ }
168
+
169
+ }
170
+
171
+ exports.MongoCryptKMSRequestNetworkTimeoutError = MongoCryptKMSRequestNetworkTimeoutError;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MongocryptdManager = void 0;
7
+
8
+ const error_1 = require("../error");
9
+ /**
10
+ * @internal
11
+ * An internal class that handles spawning a mongocryptd.
12
+ */
13
+
14
+
15
+ class MongocryptdManager {
16
+ constructor(extraOptions = {}) {
17
+ this.spawnPath = '';
18
+ this.spawnArgs = [];
19
+ this.uri = typeof extraOptions.mongocryptdURI === 'string' && extraOptions.mongocryptdURI.length > 0 ? extraOptions.mongocryptdURI : MongocryptdManager.DEFAULT_MONGOCRYPTD_URI;
20
+ this.bypassSpawn = !!extraOptions.mongocryptdBypassSpawn;
21
+
22
+ if (Object.hasOwn(extraOptions, 'mongocryptdSpawnPath') && extraOptions.mongocryptdSpawnPath) {
23
+ this.spawnPath = extraOptions.mongocryptdSpawnPath;
24
+ }
25
+
26
+ if (Object.hasOwn(extraOptions, 'mongocryptdSpawnArgs') && Array.isArray(extraOptions.mongocryptdSpawnArgs)) {
27
+ this.spawnArgs = this.spawnArgs.concat(extraOptions.mongocryptdSpawnArgs);
28
+ }
29
+
30
+ if (this.spawnArgs.filter(arg => typeof arg === 'string').every(arg => arg.indexOf('--idleShutdownTimeoutSecs') < 0)) {
31
+ this.spawnArgs.push('--idleShutdownTimeoutSecs', '60');
32
+ }
33
+ }
34
+ /**
35
+ * Will check to see if a mongocryptd is up. If it is not up, it will attempt
36
+ * to spawn a mongocryptd in a detached process, and then wait for it to be up.
37
+ */
38
+
39
+
40
+ async spawn() {
41
+ const cmdName = this.spawnPath || 'mongocryptd'; // eslint-disable-next-line @typescript-eslint/no-require-imports
42
+
43
+ const {
44
+ spawn
45
+ } = require('child_process'); // Spawned with stdio: ignore and detached: true
46
+ // to ensure child can outlive parent.
47
+
48
+
49
+ this._child = spawn(cmdName, this.spawnArgs, {
50
+ stdio: 'ignore',
51
+ detached: true
52
+ });
53
+
54
+ this._child.on('error', () => {// From the FLE spec:
55
+ // "The stdout and stderr of the spawned process MUST not be exposed in the driver
56
+ // (e.g. redirect to /dev/null). Users can pass the argument --logpath to
57
+ // extraOptions.mongocryptdSpawnArgs if they need to inspect mongocryptd logs.
58
+ // If spawning is necessary, the driver MUST spawn mongocryptd whenever server
59
+ // selection on the MongoClient to mongocryptd fails. If the MongoClient fails to
60
+ // connect after spawning, the server selection error is propagated to the user."
61
+ // The AutoEncrypter and MongoCryptdManager should work together to spawn
62
+ // mongocryptd whenever necessary. Additionally, the `mongocryptd` intentionally
63
+ // shuts down after 60s and gets respawned when necessary. We rely on server
64
+ // selection timeouts when connecting to the `mongocryptd` to inform users that something
65
+ // has been configured incorrectly. For those reasons, we suppress stderr from
66
+ // the `mongocryptd` process and immediately unref the process.
67
+ }); // unref child to remove handle from event loop
68
+
69
+
70
+ this._child.unref();
71
+ }
72
+ /**
73
+ * @returns the result of `fn` or rejects with an error.
74
+ */
75
+
76
+
77
+ async withRespawn(fn) {
78
+ try {
79
+ const result = await fn();
80
+ return result;
81
+ } catch (err) {
82
+ // If we are not bypassing spawning, then we should retry once on a MongoTimeoutError (server selection error)
83
+ const shouldSpawn = err instanceof error_1.MongoNetworkTimeoutError && !this.bypassSpawn;
84
+
85
+ if (!shouldSpawn) {
86
+ throw err;
87
+ }
88
+ }
89
+
90
+ await this.spawn();
91
+ const result = await fn();
92
+ return result;
93
+ }
94
+
95
+ }
96
+
97
+ exports.MongocryptdManager = MongocryptdManager;
98
+ MongocryptdManager.DEFAULT_MONGOCRYPTD_URI = 'mongodb://localhost:27020';
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.loadAWSCredentials = loadAWSCredentials;
7
+
8
+ const aws_temporary_credentials_1 = require("../../cmap/auth/aws_temporary_credentials");
9
+ /**
10
+ * @internal
11
+ */
12
+
13
+
14
+ async function loadAWSCredentials(kmsProviders, provider) {
15
+ const credentialProvider = new aws_temporary_credentials_1.AWSSDKCredentialProvider(provider); // We shouldn't ever receive a response from the AWS SDK that doesn't have a `SecretAccessKey`
16
+ // or `AccessKeyId`. However, TS says these fields are optional. We provide empty strings
17
+ // and let libmongocrypt error if we're unable to fetch the required keys.
18
+
19
+ const {
20
+ SecretAccessKey = '',
21
+ AccessKeyId = '',
22
+ Token
23
+ } = await credentialProvider.getCredentials();
24
+ const aws = {
25
+ secretAccessKey: SecretAccessKey,
26
+ accessKeyId: AccessKeyId
27
+ }; // the AWS session token is only required for temporary credentials so only attach it to the
28
+ // result if it's present in the response from the aws sdk
29
+
30
+ Token != null && (aws.sessionToken = Token);
31
+ return { ...kmsProviders,
32
+ aws
33
+ };
34
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tokenCache = exports.AzureCredentialCache = exports.AZURE_BASE_URL = void 0;
7
+ exports.addAzureParams = addAzureParams;
8
+ exports.prepareRequest = prepareRequest;
9
+ exports.fetchAzureKMSToken = fetchAzureKMSToken;
10
+ exports.loadAzureCredentials = loadAzureCredentials;
11
+
12
+ const error_1 = require("../../error");
13
+
14
+ const utils_1 = require("../../utils");
15
+
16
+ const errors_1 = require("../errors");
17
+
18
+ const MINIMUM_TOKEN_REFRESH_IN_MILLISECONDS = 6000;
19
+ /** Base URL for getting Azure tokens. */
20
+
21
+ exports.AZURE_BASE_URL = 'http://169.254.169.254/metadata/identity/oauth2/token?';
22
+ /**
23
+ * @internal
24
+ */
25
+
26
+ class AzureCredentialCache {
27
+ constructor() {
28
+ this.cachedToken = null;
29
+ }
30
+
31
+ async getToken() {
32
+ if (this.cachedToken == null || this.needsRefresh(this.cachedToken)) {
33
+ this.cachedToken = await this._getToken();
34
+ }
35
+
36
+ return {
37
+ accessToken: this.cachedToken.accessToken
38
+ };
39
+ }
40
+
41
+ needsRefresh(token) {
42
+ const timeUntilExpirationMS = token.expiresOnTimestamp - Date.now();
43
+ return timeUntilExpirationMS <= MINIMUM_TOKEN_REFRESH_IN_MILLISECONDS;
44
+ }
45
+ /**
46
+ * exposed for testing
47
+ */
48
+
49
+
50
+ resetCache() {
51
+ this.cachedToken = null;
52
+ }
53
+ /**
54
+ * exposed for testing
55
+ */
56
+
57
+
58
+ _getToken() {
59
+ return fetchAzureKMSToken();
60
+ }
61
+
62
+ }
63
+
64
+ exports.AzureCredentialCache = AzureCredentialCache;
65
+ /** @internal */
66
+
67
+ exports.tokenCache = new AzureCredentialCache();
68
+ /** @internal */
69
+
70
+ async function parseResponse(response) {
71
+ const {
72
+ status,
73
+ body: rawBody
74
+ } = response;
75
+
76
+ const body = (() => {
77
+ try {
78
+ return JSON.parse(rawBody);
79
+ } catch {
80
+ throw new errors_1.MongoCryptAzureKMSRequestError('Malformed JSON body in GET request.');
81
+ }
82
+ })();
83
+
84
+ if (status !== 200) {
85
+ throw new errors_1.MongoCryptAzureKMSRequestError('Unable to complete request.', body);
86
+ }
87
+
88
+ if (!body.access_token) {
89
+ throw new errors_1.MongoCryptAzureKMSRequestError('Malformed response body - missing field `access_token`.');
90
+ }
91
+
92
+ if (!body.expires_in) {
93
+ throw new errors_1.MongoCryptAzureKMSRequestError('Malformed response body - missing field `expires_in`.');
94
+ }
95
+
96
+ const expiresInMS = Number(body.expires_in) * 1000;
97
+
98
+ if (Number.isNaN(expiresInMS)) {
99
+ throw new errors_1.MongoCryptAzureKMSRequestError('Malformed response body - unable to parse int from `expires_in` field.');
100
+ }
101
+
102
+ return {
103
+ accessToken: body.access_token,
104
+ expiresOnTimestamp: Date.now() + expiresInMS
105
+ };
106
+ }
107
+ /**
108
+ * @internal
109
+ * Get the Azure endpoint URL.
110
+ */
111
+
112
+
113
+ function addAzureParams(url, resource, username) {
114
+ url.searchParams.append('api-version', '2018-02-01');
115
+ url.searchParams.append('resource', resource);
116
+
117
+ if (username) {
118
+ url.searchParams.append('client_id', username);
119
+ }
120
+
121
+ return url;
122
+ }
123
+ /**
124
+ * @internal
125
+ *
126
+ * parses any options provided by prose tests to `fetchAzureKMSToken` and merges them with
127
+ * the default values for headers and the request url.
128
+ */
129
+
130
+
131
+ function prepareRequest(options) {
132
+ const url = new URL(options.url?.toString() ?? exports.AZURE_BASE_URL);
133
+ addAzureParams(url, 'https://vault.azure.net');
134
+ const headers = { ...options.headers,
135
+ 'Content-Type': 'application/json',
136
+ Metadata: true
137
+ };
138
+ return {
139
+ headers,
140
+ url
141
+ };
142
+ }
143
+ /**
144
+ * @internal
145
+ *
146
+ * `AzureKMSRequestOptions` allows prose tests to modify the http request sent to the idms
147
+ * servers. This is required to simulate different server conditions. No options are expected to
148
+ * be set outside of tests.
149
+ *
150
+ * exposed for CSFLE
151
+ * [prose test 18](https://github.com/mongodb/specifications/tree/master/source/client-side-encryption/tests#azure-imds-credentials)
152
+ */
153
+
154
+
155
+ async function fetchAzureKMSToken(options = {}) {
156
+ const {
157
+ headers,
158
+ url
159
+ } = prepareRequest(options);
160
+
161
+ try {
162
+ const response = await (0, utils_1.get)(url, {
163
+ headers
164
+ });
165
+ return await parseResponse(response);
166
+ } catch (error) {
167
+ if (error instanceof error_1.MongoNetworkTimeoutError) {
168
+ throw new errors_1.MongoCryptAzureKMSRequestError(`[Azure KMS] ${error.message}`);
169
+ }
170
+
171
+ throw error;
172
+ }
173
+ }
174
+ /**
175
+ * @internal
176
+ *
177
+ * @throws Will reject with a `MongoCryptError` if the http request fails or the http response is malformed.
178
+ */
179
+
180
+
181
+ async function loadAzureCredentials(kmsProviders) {
182
+ const azure = await exports.tokenCache.getToken();
183
+ return { ...kmsProviders,
184
+ azure
185
+ };
186
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.loadGCPCredentials = loadGCPCredentials;
7
+
8
+ const deps_1 = require("../../deps");
9
+ /** @internal */
10
+
11
+
12
+ async function loadGCPCredentials(kmsProviders) {
13
+ const gcpMetadata = (0, deps_1.getGcpMetadata)();
14
+
15
+ if ('kModuleError' in gcpMetadata) {
16
+ return kmsProviders;
17
+ }
18
+
19
+ const {
20
+ access_token: accessToken
21
+ } = await gcpMetadata.instance({
22
+ property: 'service-accounts/default/token'
23
+ });
24
+ return { ...kmsProviders,
25
+ gcp: {
26
+ accessToken
27
+ }
28
+ };
29
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isEmptyCredentials = isEmptyCredentials;
7
+ exports.refreshKMSCredentials = refreshKMSCredentials;
8
+
9
+ const aws_1 = require("./aws");
10
+
11
+ const azure_1 = require("./azure");
12
+
13
+ const gcp_1 = require("./gcp");
14
+ /**
15
+ * Auto credential fetching should only occur when the provider is defined on the kmsProviders map
16
+ * and the settings are an empty object.
17
+ *
18
+ * This is distinct from a nullish provider key.
19
+ *
20
+ * @internal - exposed for testing purposes only
21
+ */
22
+
23
+
24
+ function isEmptyCredentials(providerName, kmsProviders) {
25
+ const provider = kmsProviders[providerName];
26
+
27
+ if (provider == null) {
28
+ return false;
29
+ }
30
+
31
+ return typeof provider === 'object' && Object.keys(provider).length === 0;
32
+ }
33
+ /**
34
+ * Load cloud provider credentials for the user provided KMS providers.
35
+ * Credentials will only attempt to get loaded if they do not exist
36
+ * and no existing credentials will get overwritten.
37
+ *
38
+ * @internal
39
+ */
40
+
41
+
42
+ async function refreshKMSCredentials(kmsProviders, credentialProviders) {
43
+ let finalKMSProviders = kmsProviders;
44
+
45
+ if (isEmptyCredentials('aws', kmsProviders)) {
46
+ finalKMSProviders = await (0, aws_1.loadAWSCredentials)(finalKMSProviders, credentialProviders?.aws);
47
+ }
48
+
49
+ if (isEmptyCredentials('gcp', kmsProviders)) {
50
+ finalKMSProviders = await (0, gcp_1.loadGCPCredentials)(finalKMSProviders);
51
+ }
52
+
53
+ if (isEmptyCredentials('azure', kmsProviders)) {
54
+ finalKMSProviders = await (0, azure_1.loadAzureCredentials)(finalKMSProviders);
55
+ }
56
+
57
+ return finalKMSProviders;
58
+ }