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,447 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TopologyDescription = void 0;
|
|
7
|
+
|
|
8
|
+
const bson_1 = require("../bson");
|
|
9
|
+
|
|
10
|
+
const WIRE_CONSTANTS = require("../cmap/wire_protocol/constants");
|
|
11
|
+
|
|
12
|
+
const error_1 = require("../error");
|
|
13
|
+
|
|
14
|
+
const utils_1 = require("../utils");
|
|
15
|
+
|
|
16
|
+
const common_1 = require("./common");
|
|
17
|
+
|
|
18
|
+
const server_description_1 = require("./server_description"); // constants related to compatibility checks
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
const MIN_SUPPORTED_SERVER_VERSION = WIRE_CONSTANTS.MIN_SUPPORTED_SERVER_VERSION;
|
|
22
|
+
const MAX_SUPPORTED_SERVER_VERSION = WIRE_CONSTANTS.MAX_SUPPORTED_SERVER_VERSION;
|
|
23
|
+
const MIN_SUPPORTED_WIRE_VERSION = WIRE_CONSTANTS.MIN_SUPPORTED_WIRE_VERSION;
|
|
24
|
+
const MAX_SUPPORTED_WIRE_VERSION = WIRE_CONSTANTS.MAX_SUPPORTED_WIRE_VERSION;
|
|
25
|
+
const MONGOS_OR_UNKNOWN = new Set([common_1.ServerType.Mongos, common_1.ServerType.Unknown]);
|
|
26
|
+
const MONGOS_OR_STANDALONE = new Set([common_1.ServerType.Mongos, common_1.ServerType.Standalone]);
|
|
27
|
+
const NON_PRIMARY_RS_MEMBERS = new Set([common_1.ServerType.RSSecondary, common_1.ServerType.RSArbiter, common_1.ServerType.RSOther]);
|
|
28
|
+
/**
|
|
29
|
+
* Representation of a deployment of servers
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
class TopologyDescription {
|
|
34
|
+
/**
|
|
35
|
+
* Create a TopologyDescription
|
|
36
|
+
*/
|
|
37
|
+
constructor(topologyType, serverDescriptions = null, setName = null, maxSetVersion = null, maxElectionId = null, commonWireVersion = null, options = null) {
|
|
38
|
+
options = options ?? {};
|
|
39
|
+
this.type = topologyType ?? common_1.TopologyType.Unknown;
|
|
40
|
+
this.servers = serverDescriptions ?? new Map();
|
|
41
|
+
this.stale = false;
|
|
42
|
+
this.compatible = true;
|
|
43
|
+
this.heartbeatFrequencyMS = options.heartbeatFrequencyMS ?? 0;
|
|
44
|
+
this.localThresholdMS = options.localThresholdMS ?? 15;
|
|
45
|
+
this.setName = setName ?? null;
|
|
46
|
+
this.maxElectionId = maxElectionId ?? null;
|
|
47
|
+
this.maxSetVersion = maxSetVersion ?? null;
|
|
48
|
+
this.commonWireVersion = commonWireVersion ?? 0; // determine server compatibility
|
|
49
|
+
|
|
50
|
+
for (const serverDescription of this.servers.values()) {
|
|
51
|
+
// Load balancer mode is always compatible.
|
|
52
|
+
if (serverDescription.type === common_1.ServerType.Unknown || serverDescription.type === common_1.ServerType.LoadBalancer) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (serverDescription.minWireVersion > MAX_SUPPORTED_WIRE_VERSION) {
|
|
57
|
+
this.compatible = false;
|
|
58
|
+
this.compatibilityError = `Server at ${serverDescription.address} requires wire version ${serverDescription.minWireVersion}, but this version of the driver only supports up to ${MAX_SUPPORTED_WIRE_VERSION} (MongoDB ${MAX_SUPPORTED_SERVER_VERSION})`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (serverDescription.maxWireVersion < MIN_SUPPORTED_WIRE_VERSION) {
|
|
62
|
+
this.compatible = false;
|
|
63
|
+
this.compatibilityError = `Server at ${serverDescription.address} reports wire version ${serverDescription.maxWireVersion}, but this version of the driver requires at least ${MIN_SUPPORTED_WIRE_VERSION} (MongoDB ${MIN_SUPPORTED_SERVER_VERSION}).`;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
} // Whenever a client updates the TopologyDescription from a hello response, it MUST set
|
|
67
|
+
// TopologyDescription.logicalSessionTimeoutMinutes to the smallest logicalSessionTimeoutMinutes
|
|
68
|
+
// value among ServerDescriptions of all data-bearing server types. If any have a null
|
|
69
|
+
// logicalSessionTimeoutMinutes, then TopologyDescription.logicalSessionTimeoutMinutes MUST be
|
|
70
|
+
// set to null.
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
this.logicalSessionTimeoutMinutes = null;
|
|
74
|
+
|
|
75
|
+
for (const [, server] of this.servers) {
|
|
76
|
+
if (server.isReadable) {
|
|
77
|
+
if (server.logicalSessionTimeoutMinutes == null) {
|
|
78
|
+
// If any of the servers have a null logicalSessionsTimeout, then the whole topology does
|
|
79
|
+
this.logicalSessionTimeoutMinutes = null;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (this.logicalSessionTimeoutMinutes == null) {
|
|
84
|
+
// First server with a non null logicalSessionsTimeout
|
|
85
|
+
this.logicalSessionTimeoutMinutes = server.logicalSessionTimeoutMinutes;
|
|
86
|
+
continue;
|
|
87
|
+
} // Always select the smaller of the:
|
|
88
|
+
// current server logicalSessionsTimeout and the topologies logicalSessionsTimeout
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
this.logicalSessionTimeoutMinutes = Math.min(this.logicalSessionTimeoutMinutes, server.logicalSessionTimeoutMinutes);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Returns a new TopologyDescription based on the SrvPollingEvent
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
updateFromSrvPollingEvent(ev, srvMaxHosts = 0) {
|
|
102
|
+
/** The SRV addresses defines the set of addresses we should be using */
|
|
103
|
+
const incomingHostnames = ev.hostnames();
|
|
104
|
+
const currentHostnames = new Set(this.servers.keys());
|
|
105
|
+
const hostnamesToAdd = new Set(incomingHostnames);
|
|
106
|
+
const hostnamesToRemove = new Set();
|
|
107
|
+
|
|
108
|
+
for (const hostname of currentHostnames) {
|
|
109
|
+
// filter hostnamesToAdd (made from incomingHostnames) down to what is *not* present in currentHostnames
|
|
110
|
+
hostnamesToAdd.delete(hostname);
|
|
111
|
+
|
|
112
|
+
if (!incomingHostnames.has(hostname)) {
|
|
113
|
+
// If the SRV Records no longer include this hostname
|
|
114
|
+
// we have to stop using it
|
|
115
|
+
hostnamesToRemove.add(hostname);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (hostnamesToAdd.size === 0 && hostnamesToRemove.size === 0) {
|
|
120
|
+
// No new hosts to add and none to remove
|
|
121
|
+
return this;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const serverDescriptions = new Map(this.servers);
|
|
125
|
+
|
|
126
|
+
for (const removedHost of hostnamesToRemove) {
|
|
127
|
+
serverDescriptions.delete(removedHost);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (hostnamesToAdd.size > 0) {
|
|
131
|
+
if (srvMaxHosts === 0) {
|
|
132
|
+
// Add all!
|
|
133
|
+
for (const hostToAdd of hostnamesToAdd) {
|
|
134
|
+
serverDescriptions.set(hostToAdd, new server_description_1.ServerDescription(hostToAdd));
|
|
135
|
+
}
|
|
136
|
+
} else if (serverDescriptions.size < srvMaxHosts) {
|
|
137
|
+
// Add only the amount needed to get us back to srvMaxHosts
|
|
138
|
+
const selectedHosts = (0, utils_1.shuffle)(hostnamesToAdd, srvMaxHosts - serverDescriptions.size);
|
|
139
|
+
|
|
140
|
+
for (const selectedHostToAdd of selectedHosts) {
|
|
141
|
+
serverDescriptions.set(selectedHostToAdd, new server_description_1.ServerDescription(selectedHostToAdd));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return new TopologyDescription(this.type, serverDescriptions, this.setName, this.maxSetVersion, this.maxElectionId, this.commonWireVersion, {
|
|
147
|
+
heartbeatFrequencyMS: this.heartbeatFrequencyMS,
|
|
148
|
+
localThresholdMS: this.localThresholdMS
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Returns a copy of this description updated with a given ServerDescription
|
|
153
|
+
* @internal
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
update(serverDescription) {
|
|
158
|
+
const address = serverDescription.address; // potentially mutated values
|
|
159
|
+
|
|
160
|
+
let {
|
|
161
|
+
type: topologyType,
|
|
162
|
+
setName,
|
|
163
|
+
maxSetVersion,
|
|
164
|
+
maxElectionId,
|
|
165
|
+
commonWireVersion
|
|
166
|
+
} = this;
|
|
167
|
+
const serverType = serverDescription.type;
|
|
168
|
+
const serverDescriptions = new Map(this.servers); // update common wire version
|
|
169
|
+
|
|
170
|
+
if (serverDescription.maxWireVersion !== 0) {
|
|
171
|
+
if (commonWireVersion == null) {
|
|
172
|
+
commonWireVersion = serverDescription.maxWireVersion;
|
|
173
|
+
} else {
|
|
174
|
+
commonWireVersion = Math.min(commonWireVersion, serverDescription.maxWireVersion);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (typeof serverDescription.setName === 'string' && typeof setName === 'string' && serverDescription.setName !== setName) {
|
|
179
|
+
if (topologyType === common_1.TopologyType.Single) {
|
|
180
|
+
// "Single" Topology with setName mismatch is direct connection usage, mark unknown do not remove
|
|
181
|
+
serverDescription = new server_description_1.ServerDescription(address);
|
|
182
|
+
} else {
|
|
183
|
+
serverDescriptions.delete(address);
|
|
184
|
+
}
|
|
185
|
+
} // update the actual server description
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
serverDescriptions.set(address, serverDescription);
|
|
189
|
+
|
|
190
|
+
if (topologyType === common_1.TopologyType.Single) {
|
|
191
|
+
// once we are defined as single, that never changes
|
|
192
|
+
return new TopologyDescription(common_1.TopologyType.Single, serverDescriptions, setName, maxSetVersion, maxElectionId, commonWireVersion, {
|
|
193
|
+
heartbeatFrequencyMS: this.heartbeatFrequencyMS,
|
|
194
|
+
localThresholdMS: this.localThresholdMS
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (topologyType === common_1.TopologyType.Unknown) {
|
|
199
|
+
if (serverType === common_1.ServerType.Standalone && this.servers.size !== 1) {
|
|
200
|
+
serverDescriptions.delete(address);
|
|
201
|
+
} else {
|
|
202
|
+
topologyType = topologyTypeForServerType(serverType);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (topologyType === common_1.TopologyType.Sharded) {
|
|
207
|
+
if (!MONGOS_OR_UNKNOWN.has(serverType)) {
|
|
208
|
+
serverDescriptions.delete(address);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (topologyType === common_1.TopologyType.ReplicaSetNoPrimary) {
|
|
213
|
+
if (MONGOS_OR_STANDALONE.has(serverType)) {
|
|
214
|
+
serverDescriptions.delete(address);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (serverType === common_1.ServerType.RSPrimary) {
|
|
218
|
+
const result = updateRsFromPrimary(serverDescriptions, serverDescription, setName, maxSetVersion, maxElectionId);
|
|
219
|
+
topologyType = result[0];
|
|
220
|
+
setName = result[1];
|
|
221
|
+
maxSetVersion = result[2];
|
|
222
|
+
maxElectionId = result[3];
|
|
223
|
+
} else if (NON_PRIMARY_RS_MEMBERS.has(serverType)) {
|
|
224
|
+
const result = updateRsNoPrimaryFromMember(serverDescriptions, serverDescription, setName);
|
|
225
|
+
topologyType = result[0];
|
|
226
|
+
setName = result[1];
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (topologyType === common_1.TopologyType.ReplicaSetWithPrimary) {
|
|
231
|
+
if (MONGOS_OR_STANDALONE.has(serverType)) {
|
|
232
|
+
serverDescriptions.delete(address);
|
|
233
|
+
topologyType = checkHasPrimary(serverDescriptions);
|
|
234
|
+
} else if (serverType === common_1.ServerType.RSPrimary) {
|
|
235
|
+
const result = updateRsFromPrimary(serverDescriptions, serverDescription, setName, maxSetVersion, maxElectionId);
|
|
236
|
+
topologyType = result[0];
|
|
237
|
+
setName = result[1];
|
|
238
|
+
maxSetVersion = result[2];
|
|
239
|
+
maxElectionId = result[3];
|
|
240
|
+
} else if (NON_PRIMARY_RS_MEMBERS.has(serverType)) {
|
|
241
|
+
topologyType = updateRsWithPrimaryFromMember(serverDescriptions, serverDescription, setName);
|
|
242
|
+
} else {
|
|
243
|
+
topologyType = checkHasPrimary(serverDescriptions);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return new TopologyDescription(topologyType, serverDescriptions, setName, maxSetVersion, maxElectionId, commonWireVersion, {
|
|
248
|
+
heartbeatFrequencyMS: this.heartbeatFrequencyMS,
|
|
249
|
+
localThresholdMS: this.localThresholdMS
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
get error() {
|
|
254
|
+
const descriptionsWithError = Array.from(this.servers.values()).filter(sd => sd.error);
|
|
255
|
+
|
|
256
|
+
if (descriptionsWithError.length > 0) {
|
|
257
|
+
return descriptionsWithError[0].error;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Determines if the topology description has any known servers
|
|
264
|
+
*/
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
get hasKnownServers() {
|
|
268
|
+
return Array.from(this.servers.values()).some(sd => sd.type !== common_1.ServerType.Unknown);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Determines if this topology description has a data-bearing server available.
|
|
272
|
+
*/
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
get hasDataBearingServers() {
|
|
276
|
+
return Array.from(this.servers.values()).some(sd => sd.isDataBearing);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Determines if the topology has a definition for the provided address
|
|
280
|
+
* @internal
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
hasServer(address) {
|
|
285
|
+
return this.servers.has(address);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Returns a JSON-serializable representation of the TopologyDescription. This is primarily
|
|
289
|
+
* intended for use with JSON.stringify().
|
|
290
|
+
*
|
|
291
|
+
* This method will not throw.
|
|
292
|
+
*/
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
toJSON() {
|
|
296
|
+
return bson_1.EJSON.serialize(this);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
exports.TopologyDescription = TopologyDescription;
|
|
302
|
+
|
|
303
|
+
function topologyTypeForServerType(serverType) {
|
|
304
|
+
switch (serverType) {
|
|
305
|
+
case common_1.ServerType.Standalone:
|
|
306
|
+
return common_1.TopologyType.Single;
|
|
307
|
+
|
|
308
|
+
case common_1.ServerType.Mongos:
|
|
309
|
+
return common_1.TopologyType.Sharded;
|
|
310
|
+
|
|
311
|
+
case common_1.ServerType.RSPrimary:
|
|
312
|
+
return common_1.TopologyType.ReplicaSetWithPrimary;
|
|
313
|
+
|
|
314
|
+
case common_1.ServerType.RSOther:
|
|
315
|
+
case common_1.ServerType.RSSecondary:
|
|
316
|
+
return common_1.TopologyType.ReplicaSetNoPrimary;
|
|
317
|
+
|
|
318
|
+
default:
|
|
319
|
+
return common_1.TopologyType.Unknown;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
function updateRsFromPrimary(serverDescriptions, serverDescription, setName = null, maxSetVersion = null, maxElectionId = null) {
|
|
324
|
+
const setVersionElectionIdMismatch = (serverDescription, maxSetVersion, maxElectionId) => {
|
|
325
|
+
return `primary marked stale due to electionId/setVersion mismatch:` + ` server setVersion: ${serverDescription.setVersion},` + ` server electionId: ${serverDescription.electionId},` + ` topology setVersion: ${maxSetVersion},` + ` topology electionId: ${maxElectionId}`;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
setName = setName || serverDescription.setName;
|
|
329
|
+
|
|
330
|
+
if (setName !== serverDescription.setName) {
|
|
331
|
+
serverDescriptions.delete(serverDescription.address);
|
|
332
|
+
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId];
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (serverDescription.maxWireVersion >= 17) {
|
|
336
|
+
const electionIdComparison = (0, utils_1.compareObjectId)(maxElectionId, serverDescription.electionId);
|
|
337
|
+
const maxElectionIdIsEqual = electionIdComparison === 0;
|
|
338
|
+
const maxElectionIdIsLess = electionIdComparison === -1;
|
|
339
|
+
const maxSetVersionIsLessOrEqual = (maxSetVersion ?? -1) <= (serverDescription.setVersion ?? -1);
|
|
340
|
+
|
|
341
|
+
if (maxElectionIdIsLess || maxElectionIdIsEqual && maxSetVersionIsLessOrEqual) {
|
|
342
|
+
// The reported electionId was greater
|
|
343
|
+
// or the electionId was equal and reported setVersion was greater
|
|
344
|
+
// Always update both values, they are a tuple
|
|
345
|
+
maxElectionId = serverDescription.electionId;
|
|
346
|
+
maxSetVersion = serverDescription.setVersion;
|
|
347
|
+
} else {
|
|
348
|
+
// Stale primary
|
|
349
|
+
// replace serverDescription with a default ServerDescription of type "Unknown"
|
|
350
|
+
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address, undefined, {
|
|
351
|
+
error: new error_1.MongoStalePrimaryError(setVersionElectionIdMismatch(serverDescription, maxSetVersion, maxElectionId))
|
|
352
|
+
}));
|
|
353
|
+
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId];
|
|
354
|
+
}
|
|
355
|
+
} else {
|
|
356
|
+
const electionId = serverDescription.electionId ? serverDescription.electionId : null;
|
|
357
|
+
|
|
358
|
+
if (serverDescription.setVersion && electionId) {
|
|
359
|
+
if (maxSetVersion && maxElectionId) {
|
|
360
|
+
if (maxSetVersion > serverDescription.setVersion || (0, utils_1.compareObjectId)(maxElectionId, electionId) > 0) {
|
|
361
|
+
// this primary is stale, we must remove it
|
|
362
|
+
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address, undefined, {
|
|
363
|
+
error: new error_1.MongoStalePrimaryError(setVersionElectionIdMismatch(serverDescription, maxSetVersion, maxElectionId))
|
|
364
|
+
}));
|
|
365
|
+
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId];
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
maxElectionId = serverDescription.electionId;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (serverDescription.setVersion != null && (maxSetVersion == null || serverDescription.setVersion > maxSetVersion)) {
|
|
373
|
+
maxSetVersion = serverDescription.setVersion;
|
|
374
|
+
}
|
|
375
|
+
} // We've heard from the primary. Is it the same primary as before?
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
for (const [address, server] of serverDescriptions) {
|
|
379
|
+
if (server.type === common_1.ServerType.RSPrimary && server.address !== serverDescription.address) {
|
|
380
|
+
// Reset old primary's type to Unknown.
|
|
381
|
+
serverDescriptions.set(address, new server_description_1.ServerDescription(server.address, undefined, {
|
|
382
|
+
error: new error_1.MongoStalePrimaryError('primary marked stale due to discovery of newer primary')
|
|
383
|
+
})); // There can only be one primary
|
|
384
|
+
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
} // Discover new hosts from this primary's response.
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
serverDescription.allHosts.forEach(address => {
|
|
391
|
+
if (!serverDescriptions.has(address)) {
|
|
392
|
+
serverDescriptions.set(address, new server_description_1.ServerDescription(address));
|
|
393
|
+
}
|
|
394
|
+
}); // Remove hosts not in the response.
|
|
395
|
+
|
|
396
|
+
const currentAddresses = Array.from(serverDescriptions.keys());
|
|
397
|
+
const responseAddresses = serverDescription.allHosts;
|
|
398
|
+
currentAddresses.filter(addr => responseAddresses.indexOf(addr) === -1).forEach(address => {
|
|
399
|
+
serverDescriptions.delete(address);
|
|
400
|
+
});
|
|
401
|
+
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId];
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
function updateRsWithPrimaryFromMember(serverDescriptions, serverDescription, setName = null) {
|
|
405
|
+
if (setName == null) {
|
|
406
|
+
// TODO(NODE-3483): should be an appropriate runtime error
|
|
407
|
+
throw new error_1.MongoRuntimeError('Argument "setName" is required if connected to a replica set');
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (setName !== serverDescription.setName || serverDescription.me && serverDescription.address !== serverDescription.me) {
|
|
411
|
+
serverDescriptions.delete(serverDescription.address);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return checkHasPrimary(serverDescriptions);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
function updateRsNoPrimaryFromMember(serverDescriptions, serverDescription, setName = null) {
|
|
418
|
+
const topologyType = common_1.TopologyType.ReplicaSetNoPrimary;
|
|
419
|
+
setName = setName ?? serverDescription.setName;
|
|
420
|
+
|
|
421
|
+
if (setName !== serverDescription.setName) {
|
|
422
|
+
serverDescriptions.delete(serverDescription.address);
|
|
423
|
+
return [topologyType, setName];
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
serverDescription.allHosts.forEach(address => {
|
|
427
|
+
if (!serverDescriptions.has(address)) {
|
|
428
|
+
serverDescriptions.set(address, new server_description_1.ServerDescription(address));
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
if (serverDescription.me && serverDescription.address !== serverDescription.me) {
|
|
433
|
+
serverDescriptions.delete(serverDescription.address);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return [topologyType, setName];
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
function checkHasPrimary(serverDescriptions) {
|
|
440
|
+
for (const serverDescription of serverDescriptions.values()) {
|
|
441
|
+
if (serverDescription.type === common_1.ServerType.RSPrimary) {
|
|
442
|
+
return common_1.TopologyType.ReplicaSetWithPrimary;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return common_1.TopologyType.ReplicaSetNoPrimary;
|
|
447
|
+
}
|