diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp @@ -1,4 +1,5 @@ #include "DatabaseManager.h" +#include "../Notifications/BackgroundDataStorage/NotificationsCryptoModule.h" #include "../Tools/CommSecureStore.h" #include "Logger.h" #include "SQLiteQueryExecutor.h" @@ -29,6 +30,7 @@ void DatabaseManager::clearSensitiveData() { SQLiteQueryExecutor::clearSensitiveData(); + NotificationsCryptoModule::clearSensitiveData(); DatabaseManager::setDatabaseStatusAsWorkable(); } diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp --- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp +++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp @@ -1,5 +1,6 @@ #include "CommCoreModule.h" #include "../CryptoTools/DeviceID.h" +#include "../Notifications/BackgroundDataStorage/NotificationsCryptoModule.h" #include "DatabaseManager.h" #include "DraftStoreOperations.h" #include "InternalModules/GlobalDBSingleton.h" @@ -778,7 +779,6 @@ promise->reject(error); return; } - promise->resolve(jsi::Value::undefined()); }); }, promise, @@ -792,9 +792,21 @@ promise->reject(error); return; } - promise->resolve(jsi::Value::undefined()); }); } + try { + NotificationsCryptoModule::initializeNotificationsCryptoAccount( + "Comm"); + } catch (const std::exception &e) { + error = e.what(); + } + this->jsInvoker_->invokeAsync([=]() { + if (error.size()) { + promise->reject(error); + return; + } + promise->resolve(jsi::Value::undefined()); + }); }); }; GlobalDBSingleton::instance.scheduleOrRunCancellable( @@ -807,26 +819,46 @@ rt, [=](jsi::Runtime &innerRt, std::shared_ptr promise) { taskType job = [=, &innerRt]() { std::string error; - std::string result; + std::string publicKeysResult; + std::string notificationsKeysResult; if (this->cryptoModule == nullptr) { error = "user has not been initialized"; } else { - result = this->cryptoModule->getIdentityKeys(); + publicKeysResult = this->cryptoModule->getIdentityKeys(); + } + try { + if (!error.size()) { + notificationsKeysResult = + NotificationsCryptoModule::getNotificationsIdentityKeys(); + } + } catch (const std::exception &e) { + error = e.what(); } this->jsInvoker_->invokeAsync([=, &innerRt]() { if (error.size()) { promise->reject(error); return; } - folly::dynamic parsed = folly::parseJson(result); + folly::dynamic parsedPublic = folly::parseJson(publicKeysResult); auto curve25519{jsi::String::createFromUtf8( - innerRt, parsed["curve25519"].asString())}; + innerRt, parsedPublic["curve25519"].asString())}; auto ed25519{jsi::String::createFromUtf8( - innerRt, parsed["ed25519"].asString())}; + innerRt, parsedPublic["ed25519"].asString())}; + + folly::dynamic parsedNotifications = + folly::parseJson(notificationsKeysResult); + auto notificationsCurve25519{jsi::String::createFromUtf8( + innerRt, parsedNotifications["curve25519"].asString())}; + auto notificationsEd25519{jsi::String::createFromUtf8( + innerRt, parsedNotifications["ed25519"].asString())}; auto jsiClientPublicKeys = jsi::Object(innerRt); jsiClientPublicKeys.setProperty(innerRt, "curve25519", curve25519); jsiClientPublicKeys.setProperty(innerRt, "ed25519", ed25519); + jsiClientPublicKeys.setProperty( + innerRt, "notificationsCurve25519", notificationsCurve25519); + jsiClientPublicKeys.setProperty( + innerRt, "notificationsEd25519", notificationsEd25519); promise->resolve(std::move(jsiClientPublicKeys)); }); }; diff --git a/native/schema/CommCoreModuleSchema.js b/native/schema/CommCoreModuleSchema.js --- a/native/schema/CommCoreModuleSchema.js +++ b/native/schema/CommCoreModuleSchema.js @@ -27,6 +27,8 @@ type ClientPublicKeys = { +curve25519: string, +ed25519: string, + +notificationsEd25519: string, + +notificationsCurve25519: string, }; export interface Spec extends TurboModule {