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