oxygen-cli 1.40.2-beta.1 → 1.40.2
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 +1750 -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 +1 -2
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +1 -5
- package/build/lib/cli.js +1 -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 +1 -9
- 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-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 +52 -33
- 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 +73 -42
- 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 +5 -13
- 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/package.json +137 -139
- 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
- package/build/ox_modules/module-mongo.js +0 -302
- package/log.txt +0 -1614
- package/reports/2025-06-08_231627/report.html +0 -440
- package/reports/2025-06-09_223615/report.html +0 -440
- package/transpiled/mongodb/etc/prepare.js +0 -18
- package/transpiled/mongodb/lib/admin.js +0 -182
- package/transpiled/mongodb/lib/beta.js +0 -26
- package/transpiled/mongodb/lib/bson.js +0 -220
- package/transpiled/mongodb/lib/bulk/common.js +0 -1041
- package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
- package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
- package/transpiled/mongodb/lib/change_stream.js +0 -517
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
- package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
- package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
- package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
- package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
- package/transpiled/mongodb/lib/cmap/commands.js +0 -605
- package/transpiled/mongodb/lib/cmap/connect.js +0 -418
- package/transpiled/mongodb/lib/cmap/connection.js +0 -673
- package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
- package/transpiled/mongodb/lib/cmap/errors.js +0 -128
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
- package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
- package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
- package/transpiled/mongodb/lib/collection.js +0 -852
- package/transpiled/mongodb/lib/connection_string.js +0 -1452
- package/transpiled/mongodb/lib/constants.js +0 -162
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
- package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
- package/transpiled/mongodb/lib/db.js +0 -467
- package/transpiled/mongodb/lib/deps.js +0 -174
- package/transpiled/mongodb/lib/encrypter.js +0 -129
- package/transpiled/mongodb/lib/error.js +0 -1550
- package/transpiled/mongodb/lib/explain.js +0 -122
- package/transpiled/mongodb/lib/gridfs/download.js +0 -369
- package/transpiled/mongodb/lib/gridfs/index.js +0 -240
- package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
- package/transpiled/mongodb/lib/index.js +0 -975
- package/transpiled/mongodb/lib/mongo_client.js +0 -626
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
- package/transpiled/mongodb/lib/mongo_logger.js +0 -812
- package/transpiled/mongodb/lib/mongo_types.js +0 -71
- package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
- package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
- package/transpiled/mongodb/lib/operations/collections.js +0 -49
- package/transpiled/mongodb/lib/operations/command.js +0 -102
- package/transpiled/mongodb/lib/operations/count.js +0 -60
- package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
- package/transpiled/mongodb/lib/operations/delete.js +0 -134
- package/transpiled/mongodb/lib/operations/distinct.js +0 -77
- package/transpiled/mongodb/lib/operations/drop.js +0 -102
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
- package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
- package/transpiled/mongodb/lib/operations/find.js +0 -197
- package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
- package/transpiled/mongodb/lib/operations/get_more.js +0 -84
- package/transpiled/mongodb/lib/operations/indexes.js +0 -197
- package/transpiled/mongodb/lib/operations/insert.js +0 -138
- package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
- package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
- package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
- package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
- package/transpiled/mongodb/lib/operations/operation.js +0 -88
- package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
- package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
- package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
- package/transpiled/mongodb/lib/operations/rename.js +0 -48
- package/transpiled/mongodb/lib/operations/run_command.js +0 -64
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
- package/transpiled/mongodb/lib/operations/stats.js +0 -39
- package/transpiled/mongodb/lib/operations/update.js +0 -218
- package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
- package/transpiled/mongodb/lib/read_concern.js +0 -92
- package/transpiled/mongodb/lib/read_preference.js +0 -215
- package/transpiled/mongodb/lib/resource_management.js +0 -74
- package/transpiled/mongodb/lib/sdam/common.js +0 -53
- package/transpiled/mongodb/lib/sdam/events.js +0 -177
- package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
- package/transpiled/mongodb/lib/sdam/server.js +0 -463
- package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
- package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
- package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
- package/transpiled/mongodb/lib/sdam/topology.js +0 -833
- package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
- package/transpiled/mongodb/lib/sessions.js +0 -988
- package/transpiled/mongodb/lib/sort.js +0 -123
- package/transpiled/mongodb/lib/timeout.js +0 -349
- package/transpiled/mongodb/lib/transactions.js +0 -149
- package/transpiled/mongodb/lib/utils.js +0 -1502
- package/transpiled/mongodb/lib/write_concern.js +0 -115
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.ScramSHA256 = exports.ScramSHA1 = void 0;
|
|
7
|
-
|
|
8
|
-
const saslprep_1 = require("@mongodb-js/saslprep");
|
|
9
|
-
|
|
10
|
-
const crypto = require("crypto");
|
|
11
|
-
|
|
12
|
-
const bson_1 = require("../../bson");
|
|
13
|
-
|
|
14
|
-
const error_1 = require("../../error");
|
|
15
|
-
|
|
16
|
-
const utils_1 = require("../../utils");
|
|
17
|
-
|
|
18
|
-
const auth_provider_1 = require("./auth_provider");
|
|
19
|
-
|
|
20
|
-
const providers_1 = require("./providers");
|
|
21
|
-
|
|
22
|
-
class ScramSHA extends auth_provider_1.AuthProvider {
|
|
23
|
-
constructor(cryptoMethod) {
|
|
24
|
-
super();
|
|
25
|
-
this.cryptoMethod = cryptoMethod || 'sha1';
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async prepare(handshakeDoc, authContext) {
|
|
29
|
-
const cryptoMethod = this.cryptoMethod;
|
|
30
|
-
const credentials = authContext.credentials;
|
|
31
|
-
|
|
32
|
-
if (!credentials) {
|
|
33
|
-
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const nonce = await (0, utils_1.randomBytes)(24); // store the nonce for later use
|
|
37
|
-
|
|
38
|
-
authContext.nonce = nonce;
|
|
39
|
-
const request = { ...handshakeDoc,
|
|
40
|
-
speculativeAuthenticate: { ...makeFirstMessage(cryptoMethod, credentials, nonce),
|
|
41
|
-
db: credentials.source
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
return request;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async auth(authContext) {
|
|
48
|
-
const {
|
|
49
|
-
reauthenticating,
|
|
50
|
-
response
|
|
51
|
-
} = authContext;
|
|
52
|
-
|
|
53
|
-
if (response?.speculativeAuthenticate && !reauthenticating) {
|
|
54
|
-
return await continueScramConversation(this.cryptoMethod, response.speculativeAuthenticate, authContext);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return await executeScram(this.cryptoMethod, authContext);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function cleanUsername(username) {
|
|
63
|
-
return username.replace('=', '=3D').replace(',', '=2C');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function clientFirstMessageBare(username, nonce) {
|
|
67
|
-
// NOTE: This is done b/c Javascript uses UTF-16, but the server is hashing in UTF-8.
|
|
68
|
-
// Since the username is not sasl-prep-d, we need to do this here.
|
|
69
|
-
return Buffer.concat([Buffer.from('n=', 'utf8'), Buffer.from(username, 'utf8'), Buffer.from(',r=', 'utf8'), Buffer.from(nonce.toString('base64'), 'utf8')]);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function makeFirstMessage(cryptoMethod, credentials, nonce) {
|
|
73
|
-
const username = cleanUsername(credentials.username);
|
|
74
|
-
const mechanism = cryptoMethod === 'sha1' ? providers_1.AuthMechanism.MONGODB_SCRAM_SHA1 : providers_1.AuthMechanism.MONGODB_SCRAM_SHA256; // NOTE: This is done b/c Javascript uses UTF-16, but the server is hashing in UTF-8.
|
|
75
|
-
// Since the username is not sasl-prep-d, we need to do this here.
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
saslStart: 1,
|
|
79
|
-
mechanism,
|
|
80
|
-
payload: new bson_1.Binary(Buffer.concat([Buffer.from('n,,', 'utf8'), clientFirstMessageBare(username, nonce)])),
|
|
81
|
-
autoAuthorize: 1,
|
|
82
|
-
options: {
|
|
83
|
-
skipEmptyExchange: true
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async function executeScram(cryptoMethod, authContext) {
|
|
89
|
-
const {
|
|
90
|
-
connection,
|
|
91
|
-
credentials
|
|
92
|
-
} = authContext;
|
|
93
|
-
|
|
94
|
-
if (!credentials) {
|
|
95
|
-
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (!authContext.nonce) {
|
|
99
|
-
throw new error_1.MongoInvalidArgumentError('AuthContext must contain a valid nonce property');
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const nonce = authContext.nonce;
|
|
103
|
-
const db = credentials.source;
|
|
104
|
-
const saslStartCmd = makeFirstMessage(cryptoMethod, credentials, nonce);
|
|
105
|
-
const response = await connection.command((0, utils_1.ns)(`${db}.$cmd`), saslStartCmd, undefined);
|
|
106
|
-
await continueScramConversation(cryptoMethod, response, authContext);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
async function continueScramConversation(cryptoMethod, response, authContext) {
|
|
110
|
-
const connection = authContext.connection;
|
|
111
|
-
const credentials = authContext.credentials;
|
|
112
|
-
|
|
113
|
-
if (!credentials) {
|
|
114
|
-
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (!authContext.nonce) {
|
|
118
|
-
throw new error_1.MongoInvalidArgumentError('Unable to continue SCRAM without valid nonce');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const nonce = authContext.nonce;
|
|
122
|
-
const db = credentials.source;
|
|
123
|
-
const username = cleanUsername(credentials.username);
|
|
124
|
-
const password = credentials.password;
|
|
125
|
-
const processedPassword = cryptoMethod === 'sha256' ? (0, saslprep_1.saslprep)(password) : passwordDigest(username, password);
|
|
126
|
-
const payload = Buffer.isBuffer(response.payload) ? new bson_1.Binary(response.payload) : response.payload;
|
|
127
|
-
const dict = parsePayload(payload);
|
|
128
|
-
const iterations = parseInt(dict.i, 10);
|
|
129
|
-
|
|
130
|
-
if (iterations && iterations < 4096) {
|
|
131
|
-
// TODO(NODE-3483)
|
|
132
|
-
throw new error_1.MongoRuntimeError(`Server returned an invalid iteration count ${iterations}`);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const salt = dict.s;
|
|
136
|
-
const rnonce = dict.r;
|
|
137
|
-
|
|
138
|
-
if (rnonce.startsWith('nonce')) {
|
|
139
|
-
// TODO(NODE-3483)
|
|
140
|
-
throw new error_1.MongoRuntimeError(`Server returned an invalid nonce: ${rnonce}`);
|
|
141
|
-
} // Set up start of proof
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const withoutProof = `c=biws,r=${rnonce}`;
|
|
145
|
-
const saltedPassword = HI(processedPassword, Buffer.from(salt, 'base64'), iterations, cryptoMethod);
|
|
146
|
-
const clientKey = HMAC(cryptoMethod, saltedPassword, 'Client Key');
|
|
147
|
-
const serverKey = HMAC(cryptoMethod, saltedPassword, 'Server Key');
|
|
148
|
-
const storedKey = H(cryptoMethod, clientKey);
|
|
149
|
-
const authMessage = [clientFirstMessageBare(username, nonce), payload.toString('utf8'), withoutProof].join(',');
|
|
150
|
-
const clientSignature = HMAC(cryptoMethod, storedKey, authMessage);
|
|
151
|
-
const clientProof = `p=${xor(clientKey, clientSignature)}`;
|
|
152
|
-
const clientFinal = [withoutProof, clientProof].join(',');
|
|
153
|
-
const serverSignature = HMAC(cryptoMethod, serverKey, authMessage);
|
|
154
|
-
const saslContinueCmd = {
|
|
155
|
-
saslContinue: 1,
|
|
156
|
-
conversationId: response.conversationId,
|
|
157
|
-
payload: new bson_1.Binary(Buffer.from(clientFinal))
|
|
158
|
-
};
|
|
159
|
-
const r = await connection.command((0, utils_1.ns)(`${db}.$cmd`), saslContinueCmd, undefined);
|
|
160
|
-
const parsedResponse = parsePayload(r.payload);
|
|
161
|
-
|
|
162
|
-
if (!compareDigest(Buffer.from(parsedResponse.v, 'base64'), serverSignature)) {
|
|
163
|
-
throw new error_1.MongoRuntimeError('Server returned an invalid signature');
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (r.done !== false) {
|
|
167
|
-
// If the server sends r.done === true we can save one RTT
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
const retrySaslContinueCmd = {
|
|
172
|
-
saslContinue: 1,
|
|
173
|
-
conversationId: r.conversationId,
|
|
174
|
-
payload: Buffer.alloc(0)
|
|
175
|
-
};
|
|
176
|
-
await connection.command((0, utils_1.ns)(`${db}.$cmd`), retrySaslContinueCmd, undefined);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function parsePayload(payload) {
|
|
180
|
-
const payloadStr = payload.toString('utf8');
|
|
181
|
-
const dict = {};
|
|
182
|
-
const parts = payloadStr.split(',');
|
|
183
|
-
|
|
184
|
-
for (let i = 0; i < parts.length; i++) {
|
|
185
|
-
const valueParts = (parts[i].match(/^([^=]*)=(.*)$/) ?? []).slice(1);
|
|
186
|
-
dict[valueParts[0]] = valueParts[1];
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
return dict;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function passwordDigest(username, password) {
|
|
193
|
-
if (typeof username !== 'string') {
|
|
194
|
-
throw new error_1.MongoInvalidArgumentError('Username must be a string');
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (typeof password !== 'string') {
|
|
198
|
-
throw new error_1.MongoInvalidArgumentError('Password must be a string');
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (password.length === 0) {
|
|
202
|
-
throw new error_1.MongoInvalidArgumentError('Password cannot be empty');
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
let md5;
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
md5 = crypto.createHash('md5');
|
|
209
|
-
} catch (err) {
|
|
210
|
-
if (crypto.getFips()) {
|
|
211
|
-
// This error is (slightly) more helpful than what comes from OpenSSL directly, e.g.
|
|
212
|
-
// 'Error: error:060800C8:digital envelope routines:EVP_DigestInit_ex:disabled for FIPS'
|
|
213
|
-
throw new Error('Auth mechanism SCRAM-SHA-1 is not supported in FIPS mode');
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
throw err;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
md5.update(`${username}:mongo:${password}`, 'utf8');
|
|
220
|
-
return md5.digest('hex');
|
|
221
|
-
} // XOR two buffers
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
function xor(a, b) {
|
|
225
|
-
if (!Buffer.isBuffer(a)) {
|
|
226
|
-
a = Buffer.from(a);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (!Buffer.isBuffer(b)) {
|
|
230
|
-
b = Buffer.from(b);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const length = Math.max(a.length, b.length);
|
|
234
|
-
const res = [];
|
|
235
|
-
|
|
236
|
-
for (let i = 0; i < length; i += 1) {
|
|
237
|
-
res.push(a[i] ^ b[i]);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return Buffer.from(res).toString('base64');
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function H(method, text) {
|
|
244
|
-
return crypto.createHash(method).update(text).digest();
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
function HMAC(method, key, text) {
|
|
248
|
-
return crypto.createHmac(method, key).update(text).digest();
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
let _hiCache = {};
|
|
252
|
-
let _hiCacheCount = 0;
|
|
253
|
-
|
|
254
|
-
function _hiCachePurge() {
|
|
255
|
-
_hiCache = {};
|
|
256
|
-
_hiCacheCount = 0;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
const hiLengthMap = {
|
|
260
|
-
sha256: 32,
|
|
261
|
-
sha1: 20
|
|
262
|
-
};
|
|
263
|
-
|
|
264
|
-
function HI(data, salt, iterations, cryptoMethod) {
|
|
265
|
-
// omit the work if already generated
|
|
266
|
-
const key = [data, salt.toString('base64'), iterations].join('_');
|
|
267
|
-
|
|
268
|
-
if (_hiCache[key] != null) {
|
|
269
|
-
return _hiCache[key];
|
|
270
|
-
} // generate the salt
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const saltedData = crypto.pbkdf2Sync(data, salt, iterations, hiLengthMap[cryptoMethod], cryptoMethod); // cache a copy to speed up the next lookup, but prevent unbounded cache growth
|
|
274
|
-
|
|
275
|
-
if (_hiCacheCount >= 200) {
|
|
276
|
-
_hiCachePurge();
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
_hiCache[key] = saltedData;
|
|
280
|
-
_hiCacheCount += 1;
|
|
281
|
-
return saltedData;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function compareDigest(lhs, rhs) {
|
|
285
|
-
if (lhs.length !== rhs.length) {
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
if (typeof crypto.timingSafeEqual === 'function') {
|
|
290
|
-
return crypto.timingSafeEqual(lhs, rhs);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
let result = 0;
|
|
294
|
-
|
|
295
|
-
for (let i = 0; i < lhs.length; i++) {
|
|
296
|
-
result |= lhs[i] ^ rhs[i];
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
return result === 0;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
class ScramSHA1 extends ScramSHA {
|
|
303
|
-
constructor() {
|
|
304
|
-
super('sha1');
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
exports.ScramSHA1 = ScramSHA1;
|
|
310
|
-
|
|
311
|
-
class ScramSHA256 extends ScramSHA {
|
|
312
|
-
constructor() {
|
|
313
|
-
super('sha256');
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
exports.ScramSHA256 = ScramSHA256;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.X509 = void 0;
|
|
7
|
-
|
|
8
|
-
const error_1 = require("../../error");
|
|
9
|
-
|
|
10
|
-
const utils_1 = require("../../utils");
|
|
11
|
-
|
|
12
|
-
const auth_provider_1 = require("./auth_provider");
|
|
13
|
-
|
|
14
|
-
class X509 extends auth_provider_1.AuthProvider {
|
|
15
|
-
async prepare(handshakeDoc, authContext) {
|
|
16
|
-
const {
|
|
17
|
-
credentials
|
|
18
|
-
} = authContext;
|
|
19
|
-
|
|
20
|
-
if (!credentials) {
|
|
21
|
-
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return { ...handshakeDoc,
|
|
25
|
-
speculativeAuthenticate: x509AuthenticateCommand(credentials)
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async auth(authContext) {
|
|
30
|
-
const connection = authContext.connection;
|
|
31
|
-
const credentials = authContext.credentials;
|
|
32
|
-
|
|
33
|
-
if (!credentials) {
|
|
34
|
-
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const response = authContext.response;
|
|
38
|
-
|
|
39
|
-
if (response?.speculativeAuthenticate) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
await connection.command((0, utils_1.ns)('$external.$cmd'), x509AuthenticateCommand(credentials), undefined);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
exports.X509 = X509;
|
|
49
|
-
|
|
50
|
-
function x509AuthenticateCommand(credentials) {
|
|
51
|
-
const command = {
|
|
52
|
-
authenticate: 1,
|
|
53
|
-
mechanism: 'MONGODB-X509'
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
if (credentials.username) {
|
|
57
|
-
command.user = credentials.username;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return command;
|
|
61
|
-
}
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.SENSITIVE_COMMANDS = exports.CommandFailedEvent = exports.CommandSucceededEvent = exports.CommandStartedEvent = void 0;
|
|
7
|
-
|
|
8
|
-
const constants_1 = require("../constants");
|
|
9
|
-
|
|
10
|
-
const utils_1 = require("../utils");
|
|
11
|
-
|
|
12
|
-
const commands_1 = require("./commands");
|
|
13
|
-
/**
|
|
14
|
-
* An event indicating the start of a given command
|
|
15
|
-
* @public
|
|
16
|
-
* @category Event
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class CommandStartedEvent {
|
|
21
|
-
/**
|
|
22
|
-
* Create a started event
|
|
23
|
-
*
|
|
24
|
-
* @internal
|
|
25
|
-
* @param pool - the pool that originated the command
|
|
26
|
-
* @param command - the command
|
|
27
|
-
*/
|
|
28
|
-
constructor(connection, command, serverConnectionId) {
|
|
29
|
-
/** @internal */
|
|
30
|
-
this.name = constants_1.COMMAND_STARTED;
|
|
31
|
-
const cmd = extractCommand(command);
|
|
32
|
-
const commandName = extractCommandName(cmd);
|
|
33
|
-
const {
|
|
34
|
-
address,
|
|
35
|
-
connectionId,
|
|
36
|
-
serviceId
|
|
37
|
-
} = extractConnectionDetails(connection); // TODO: remove in major revision, this is not spec behavior
|
|
38
|
-
|
|
39
|
-
if (exports.SENSITIVE_COMMANDS.has(commandName)) {
|
|
40
|
-
this.commandObj = {};
|
|
41
|
-
this.commandObj[commandName] = true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
this.address = address;
|
|
45
|
-
this.connectionId = connectionId;
|
|
46
|
-
this.serviceId = serviceId;
|
|
47
|
-
this.requestId = command.requestId;
|
|
48
|
-
this.databaseName = command.databaseName;
|
|
49
|
-
this.commandName = commandName;
|
|
50
|
-
this.command = maybeRedact(commandName, cmd, cmd);
|
|
51
|
-
this.serverConnectionId = serverConnectionId;
|
|
52
|
-
}
|
|
53
|
-
/* @internal */
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
get hasServiceId() {
|
|
57
|
-
return !!this.serviceId;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
exports.CommandStartedEvent = CommandStartedEvent;
|
|
63
|
-
/**
|
|
64
|
-
* An event indicating the success of a given command
|
|
65
|
-
* @public
|
|
66
|
-
* @category Event
|
|
67
|
-
*/
|
|
68
|
-
|
|
69
|
-
class CommandSucceededEvent {
|
|
70
|
-
/**
|
|
71
|
-
* Create a succeeded event
|
|
72
|
-
*
|
|
73
|
-
* @internal
|
|
74
|
-
* @param pool - the pool that originated the command
|
|
75
|
-
* @param command - the command
|
|
76
|
-
* @param reply - the reply for this command from the server
|
|
77
|
-
* @param started - a high resolution tuple timestamp of when the command was first sent, to calculate duration
|
|
78
|
-
*/
|
|
79
|
-
constructor(connection, command, reply, started, serverConnectionId) {
|
|
80
|
-
/** @internal */
|
|
81
|
-
this.name = constants_1.COMMAND_SUCCEEDED;
|
|
82
|
-
const cmd = extractCommand(command);
|
|
83
|
-
const commandName = extractCommandName(cmd);
|
|
84
|
-
const {
|
|
85
|
-
address,
|
|
86
|
-
connectionId,
|
|
87
|
-
serviceId
|
|
88
|
-
} = extractConnectionDetails(connection);
|
|
89
|
-
this.address = address;
|
|
90
|
-
this.connectionId = connectionId;
|
|
91
|
-
this.serviceId = serviceId;
|
|
92
|
-
this.requestId = command.requestId;
|
|
93
|
-
this.commandName = commandName;
|
|
94
|
-
this.duration = (0, utils_1.calculateDurationInMs)(started);
|
|
95
|
-
this.reply = maybeRedact(commandName, cmd, extractReply(reply));
|
|
96
|
-
this.serverConnectionId = serverConnectionId;
|
|
97
|
-
}
|
|
98
|
-
/* @internal */
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
get hasServiceId() {
|
|
102
|
-
return !!this.serviceId;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
exports.CommandSucceededEvent = CommandSucceededEvent;
|
|
108
|
-
/**
|
|
109
|
-
* An event indicating the failure of a given command
|
|
110
|
-
* @public
|
|
111
|
-
* @category Event
|
|
112
|
-
*/
|
|
113
|
-
|
|
114
|
-
class CommandFailedEvent {
|
|
115
|
-
/**
|
|
116
|
-
* Create a failure event
|
|
117
|
-
*
|
|
118
|
-
* @internal
|
|
119
|
-
* @param pool - the pool that originated the command
|
|
120
|
-
* @param command - the command
|
|
121
|
-
* @param error - the generated error or a server error response
|
|
122
|
-
* @param started - a high resolution tuple timestamp of when the command was first sent, to calculate duration
|
|
123
|
-
*/
|
|
124
|
-
constructor(connection, command, error, started, serverConnectionId) {
|
|
125
|
-
/** @internal */
|
|
126
|
-
this.name = constants_1.COMMAND_FAILED;
|
|
127
|
-
const cmd = extractCommand(command);
|
|
128
|
-
const commandName = extractCommandName(cmd);
|
|
129
|
-
const {
|
|
130
|
-
address,
|
|
131
|
-
connectionId,
|
|
132
|
-
serviceId
|
|
133
|
-
} = extractConnectionDetails(connection);
|
|
134
|
-
this.address = address;
|
|
135
|
-
this.connectionId = connectionId;
|
|
136
|
-
this.serviceId = serviceId;
|
|
137
|
-
this.requestId = command.requestId;
|
|
138
|
-
this.commandName = commandName;
|
|
139
|
-
this.duration = (0, utils_1.calculateDurationInMs)(started);
|
|
140
|
-
this.failure = maybeRedact(commandName, cmd, error);
|
|
141
|
-
this.serverConnectionId = serverConnectionId;
|
|
142
|
-
}
|
|
143
|
-
/* @internal */
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
get hasServiceId() {
|
|
147
|
-
return !!this.serviceId;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
exports.CommandFailedEvent = CommandFailedEvent;
|
|
153
|
-
/**
|
|
154
|
-
* Commands that we want to redact because of the sensitive nature of their contents
|
|
155
|
-
* @internal
|
|
156
|
-
*/
|
|
157
|
-
|
|
158
|
-
exports.SENSITIVE_COMMANDS = new Set(['authenticate', 'saslStart', 'saslContinue', 'getnonce', 'createUser', 'updateUser', 'copydbgetnonce', 'copydbsaslstart', 'copydb']);
|
|
159
|
-
const HELLO_COMMANDS = new Set(['hello', constants_1.LEGACY_HELLO_COMMAND, constants_1.LEGACY_HELLO_COMMAND_CAMEL_CASE]); // helper methods
|
|
160
|
-
|
|
161
|
-
const extractCommandName = commandDoc => Object.keys(commandDoc)[0];
|
|
162
|
-
|
|
163
|
-
const collectionName = command => command.ns.split('.')[1];
|
|
164
|
-
|
|
165
|
-
const maybeRedact = (commandName, commandDoc, result) => exports.SENSITIVE_COMMANDS.has(commandName) || HELLO_COMMANDS.has(commandName) && commandDoc.speculativeAuthenticate ? {} : result;
|
|
166
|
-
|
|
167
|
-
const LEGACY_FIND_QUERY_MAP = {
|
|
168
|
-
$query: 'filter',
|
|
169
|
-
$orderby: 'sort',
|
|
170
|
-
$hint: 'hint',
|
|
171
|
-
$comment: 'comment',
|
|
172
|
-
$maxScan: 'maxScan',
|
|
173
|
-
$max: 'max',
|
|
174
|
-
$min: 'min',
|
|
175
|
-
$returnKey: 'returnKey',
|
|
176
|
-
$showDiskLoc: 'showRecordId',
|
|
177
|
-
$maxTimeMS: 'maxTimeMS',
|
|
178
|
-
$snapshot: 'snapshot'
|
|
179
|
-
};
|
|
180
|
-
const LEGACY_FIND_OPTIONS_MAP = {
|
|
181
|
-
numberToSkip: 'skip',
|
|
182
|
-
numberToReturn: 'batchSize',
|
|
183
|
-
returnFieldSelector: 'projection'
|
|
184
|
-
};
|
|
185
|
-
/** Extract the actual command from the query, possibly up-converting if it's a legacy format */
|
|
186
|
-
|
|
187
|
-
function extractCommand(command) {
|
|
188
|
-
if (command instanceof commands_1.OpMsgRequest) {
|
|
189
|
-
const cmd = { ...command.command
|
|
190
|
-
}; // For OP_MSG with payload type 1 we need to pull the documents
|
|
191
|
-
// array out of the document sequence for monitoring.
|
|
192
|
-
|
|
193
|
-
if (cmd.ops instanceof commands_1.DocumentSequence) {
|
|
194
|
-
cmd.ops = cmd.ops.documents;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (cmd.nsInfo instanceof commands_1.DocumentSequence) {
|
|
198
|
-
cmd.nsInfo = cmd.nsInfo.documents;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return cmd;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (command.query?.$query) {
|
|
205
|
-
let result;
|
|
206
|
-
|
|
207
|
-
if (command.ns === 'admin.$cmd') {
|
|
208
|
-
// up-convert legacy command
|
|
209
|
-
result = Object.assign({}, command.query.$query);
|
|
210
|
-
} else {
|
|
211
|
-
// up-convert legacy find command
|
|
212
|
-
result = {
|
|
213
|
-
find: collectionName(command)
|
|
214
|
-
};
|
|
215
|
-
Object.keys(LEGACY_FIND_QUERY_MAP).forEach(key => {
|
|
216
|
-
if (command.query[key] != null) {
|
|
217
|
-
result[LEGACY_FIND_QUERY_MAP[key]] = { ...command.query[key]
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
Object.keys(LEGACY_FIND_OPTIONS_MAP).forEach(key => {
|
|
224
|
-
const legacyKey = key;
|
|
225
|
-
|
|
226
|
-
if (command[legacyKey] != null) {
|
|
227
|
-
result[LEGACY_FIND_OPTIONS_MAP[legacyKey]] = command[legacyKey];
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
return result;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
let clonedQuery = {};
|
|
234
|
-
const clonedCommand = { ...command
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
if (command.query) {
|
|
238
|
-
clonedQuery = { ...command.query
|
|
239
|
-
};
|
|
240
|
-
clonedCommand.query = clonedQuery;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
return command.query ? clonedQuery : clonedCommand;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function extractReply(reply) {
|
|
247
|
-
if (!reply) {
|
|
248
|
-
return reply;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
return reply.result ? reply.result : reply;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
function extractConnectionDetails(connection) {
|
|
255
|
-
let connectionId;
|
|
256
|
-
|
|
257
|
-
if ('id' in connection) {
|
|
258
|
-
connectionId = connection.id;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
return {
|
|
262
|
-
address: connection.address,
|
|
263
|
-
serviceId: connection.serviceId,
|
|
264
|
-
connectionId
|
|
265
|
-
};
|
|
266
|
-
}
|