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.
- package/CHANGELOG.md +1742 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +2 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +5 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +9 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-mongo.js +302 -0
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +25 -25
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +1 -1
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +13 -5
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/log.txt +1614 -0
- package/package.json +139 -137
- package/reports/2025-06-08_231627/report.html +440 -0
- package/reports/2025-06-09_223615/report.html +440 -0
- package/transpiled/mongodb/etc/prepare.js +18 -0
- package/transpiled/mongodb/lib/admin.js +182 -0
- package/transpiled/mongodb/lib/beta.js +26 -0
- package/transpiled/mongodb/lib/bson.js +220 -0
- package/transpiled/mongodb/lib/bulk/common.js +1041 -0
- package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
- package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
- package/transpiled/mongodb/lib/change_stream.js +517 -0
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
- package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
- package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
- package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
- package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
- package/transpiled/mongodb/lib/cmap/commands.js +605 -0
- package/transpiled/mongodb/lib/cmap/connect.js +418 -0
- package/transpiled/mongodb/lib/cmap/connection.js +673 -0
- package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
- package/transpiled/mongodb/lib/cmap/errors.js +128 -0
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
- package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
- package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
- package/transpiled/mongodb/lib/collection.js +852 -0
- package/transpiled/mongodb/lib/connection_string.js +1452 -0
- package/transpiled/mongodb/lib/constants.js +162 -0
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
- package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
- package/transpiled/mongodb/lib/db.js +467 -0
- package/transpiled/mongodb/lib/deps.js +174 -0
- package/transpiled/mongodb/lib/encrypter.js +129 -0
- package/transpiled/mongodb/lib/error.js +1550 -0
- package/transpiled/mongodb/lib/explain.js +122 -0
- package/transpiled/mongodb/lib/gridfs/download.js +369 -0
- package/transpiled/mongodb/lib/gridfs/index.js +240 -0
- package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
- package/transpiled/mongodb/lib/index.js +975 -0
- package/transpiled/mongodb/lib/mongo_client.js +626 -0
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
- package/transpiled/mongodb/lib/mongo_logger.js +812 -0
- package/transpiled/mongodb/lib/mongo_types.js +71 -0
- package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
- package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
- package/transpiled/mongodb/lib/operations/collections.js +49 -0
- package/transpiled/mongodb/lib/operations/command.js +102 -0
- package/transpiled/mongodb/lib/operations/count.js +60 -0
- package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
- package/transpiled/mongodb/lib/operations/delete.js +134 -0
- package/transpiled/mongodb/lib/operations/distinct.js +77 -0
- package/transpiled/mongodb/lib/operations/drop.js +102 -0
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
- package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
- package/transpiled/mongodb/lib/operations/find.js +197 -0
- package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
- package/transpiled/mongodb/lib/operations/get_more.js +84 -0
- package/transpiled/mongodb/lib/operations/indexes.js +197 -0
- package/transpiled/mongodb/lib/operations/insert.js +138 -0
- package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
- package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
- package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
- package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
- package/transpiled/mongodb/lib/operations/operation.js +88 -0
- package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
- package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
- package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
- package/transpiled/mongodb/lib/operations/rename.js +48 -0
- package/transpiled/mongodb/lib/operations/run_command.js +64 -0
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
- package/transpiled/mongodb/lib/operations/stats.js +39 -0
- package/transpiled/mongodb/lib/operations/update.js +218 -0
- package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
- package/transpiled/mongodb/lib/read_concern.js +92 -0
- package/transpiled/mongodb/lib/read_preference.js +215 -0
- package/transpiled/mongodb/lib/resource_management.js +74 -0
- package/transpiled/mongodb/lib/sdam/common.js +53 -0
- package/transpiled/mongodb/lib/sdam/events.js +177 -0
- package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
- package/transpiled/mongodb/lib/sdam/server.js +463 -0
- package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
- package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
- package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
- package/transpiled/mongodb/lib/sdam/topology.js +833 -0
- package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
- package/transpiled/mongodb/lib/sessions.js +988 -0
- package/transpiled/mongodb/lib/sort.js +123 -0
- package/transpiled/mongodb/lib/timeout.js +349 -0
- package/transpiled/mongodb/lib/transactions.js +149 -0
- package/transpiled/mongodb/lib/utils.js +1502 -0
- package/transpiled/mongodb/lib/write_concern.js +115 -0
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- 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
|
+
}
|