diff --git a/CHANGELOG.md b/CHANGELOG.md index fe86c14f..130e0fcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### Enhancements * Updated default base URL to be `https://services.cloud.mongodb.com` to support the new domains (was `https://realm.mongodb.com`) +* Added support for updating Atlas Device Sync's base url, in case the need to roam between servers (cloud and/or edge server). ### Compatibility * Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. diff --git a/CMakeLists.txt b/CMakeLists.txt index a5523cb6..f268b9f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ set(REALM_NO_TESTS) set(REALM_BUILD_LIB_ONLY) set(REALM_INSTALL_LIBEXECDIR) set(REALM_ENABLE_ENCRYPTION 1) +set(REALM_ENABLE_EXPERIMENTAL) set(CMAKE_DEBUG_POSTFIX "-dbg") diff --git a/include/cpprealm/app.hpp b/include/cpprealm/app.hpp index 6b3fea72..2edb43a6 100644 --- a/include/cpprealm/app.hpp +++ b/include/cpprealm/app.hpp @@ -286,6 +286,10 @@ class App { void clear_cached_apps(); std::optional get_cached_app(const std::string& app_id, const std::optional& base_url); std::string get_base_url() const; + +#ifdef AD_ENABLE_EXPERIMENTAL + [[nodiscard]] std::future App::update_base_url(std::string base_url) const; +#endif private: std::shared_ptr m_app; App(std::shared_ptr&& a) : m_app(std::move(a)) { } diff --git a/src/cpprealm/app.cpp b/src/cpprealm/app.cpp index a4c898dd..ef087bc0 100644 --- a/src/cpprealm/app.cpp +++ b/src/cpprealm/app.cpp @@ -586,4 +586,18 @@ namespace realm { return std::nullopt; } +#ifdef AD_ENABLE_EXPERIMENTAL + [[nodiscard]] std::future App::update_base_url(std::string base_url) const { + std::promise p; + std::future f = p.get_future(); + m_app->update_base_url(base_url, ([p = std::move(p)](auto err) mutable { + if (err) { + p.set_exception(std::make_exception_ptr(app_error(std::move(*err)))); + } else { + p.set_value(); + } + }); + return f; + } +#endif } diff --git a/tests/sync/app_tests.cpp b/tests/sync/app_tests.cpp index b3022f79..d4cfdb01 100644 --- a/tests/sync/app_tests.cpp +++ b/tests/sync/app_tests.cpp @@ -79,6 +79,13 @@ TEST_CASE("app", "[app]") { CHECK(with_url_provided_app.get_base_url() == "https://foobar.com"); } + SECTION("update_base_url") { + auto app = realm::App(realm::App::configuration({"NA", "https://foobar.com"})); + CHECK(app.get_base_url() == "https://foobar.com"); + app.update_base_url("https://barfoo.com").get(); + CHECK(app.get_base_url() == "https://barfoo.com"); + } + SECTION("get_current_user") { auto user = app.login(realm::App::credentials::anonymous()).get();