Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3509840
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
149 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/native/cpp/CommonCpp/NativeModules/CommRustModule.cpp b/native/cpp/CommonCpp/NativeModules/CommRustModule.cpp
index aacf8d62f..63aa5183a 100644
--- a/native/cpp/CommonCpp/NativeModules/CommRustModule.cpp
+++ b/native/cpp/CommonCpp/NativeModules/CommRustModule.cpp
@@ -1,1077 +1,1089 @@
#include "CommRustModule.h"
#include "InternalModules/RustPromiseManager.h"
#include "JSIRust.h"
#include "lib.rs.h"
#include <ReactCommon/TurboModuleUtils.h>
namespace comm {
using namespace facebook::react;
CommRustModule::CommRustModule(std::shared_ptr<CallInvoker> jsInvoker)
: CommRustModuleSchemaCxxSpecJSI(jsInvoker) {
}
jsi::Value CommRustModule::generateNonce(jsi::Runtime &rt) {
return createPromiseAsJSIValue(
rt, [this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGenerateNonce(currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::registerPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String farcasterID,
jsi::String initialDeviceList) {
auto usernameRust = jsiStringToRustString(username, rt);
auto passwordRust = jsiStringToRustString(password, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
auto farcasterIDRust = jsiStringToRustString(farcasterID, rt);
auto initialDeviceListRust = jsiStringToRustString(initialDeviceList, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityRegisterPasswordUser(
usernameRust,
passwordRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
contentOneTimeKeysRust,
notifOneTimeKeysRust,
farcasterIDRust,
initialDeviceListRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::registerReservedPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String keyserverMessage,
jsi::String keyserverSignature,
jsi::String initialDeviceList) {
auto usernameRust = jsiStringToRustString(username, rt);
auto passwordRust = jsiStringToRustString(password, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
auto keyserverMessageRust = jsiStringToRustString(keyserverMessage, rt);
auto keyserverSignatureRust = jsiStringToRustString(keyserverSignature, rt);
auto initialDeviceListRust = jsiStringToRustString(initialDeviceList, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityRegisterReservedPasswordUser(
usernameRust,
passwordRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
contentOneTimeKeysRust,
notifOneTimeKeysRust,
keyserverMessageRust,
keyserverSignatureRust,
initialDeviceListRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logInPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
- jsi::String notifPrekeySignature) {
+ jsi::String notifPrekeySignature,
+ jsi::Array contentOneTimeKeys,
+ jsi::Array notifOneTimeKeys) {
auto usernameRust = jsiStringToRustString(username, rt);
auto passwordRust = jsiStringToRustString(password, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
+ auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
+ auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogInPasswordUser(
usernameRust,
passwordRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
+ contentOneTimeKeysRust,
+ notifOneTimeKeysRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::registerWalletUser(
jsi::Runtime &rt,
jsi::String siweMessage,
jsi::String siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String farcasterID,
jsi::String initialDeviceList) {
auto siweMessageRust = jsiStringToRustString(siweMessage, rt);
auto siweSignatureRust = jsiStringToRustString(siweSignature, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
auto farcasterIDRust = jsiStringToRustString(farcasterID, rt);
auto initialDeviceListRust = jsiStringToRustString(initialDeviceList, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityRegisterWalletUser(
siweMessageRust,
siweSignatureRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
contentOneTimeKeysRust,
notifOneTimeKeysRust,
farcasterIDRust,
initialDeviceListRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logInWalletUser(
jsi::Runtime &rt,
jsi::String siweMessage,
jsi::String siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
- jsi::String notifPrekeySignature) {
+ jsi::String notifPrekeySignature,
+ jsi::Array contentOneTimeKeys,
+ jsi::Array notifOneTimeKeys) {
auto siweMessageRust = jsiStringToRustString(siweMessage, rt);
auto siweSignatureRust = jsiStringToRustString(siweSignature, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
+ auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
+ auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogInWalletUser(
siweMessageRust,
siweSignatureRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
+ contentOneTimeKeysRust,
+ notifOneTimeKeysRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::restoreUser(
jsi::Runtime &rt,
jsi::String userID,
std::optional<jsi::String> siweMessage,
std::optional<jsi::String> siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String deviceList) {
rust::String siweMessageRust = "";
if (siweMessage.has_value()) {
siweMessageRust = jsiStringToRustString(siweMessage.value(), rt);
}
rust::String siweSignatureRust = "";
if (siweSignature.has_value()) {
siweSignatureRust = jsiStringToRustString(siweSignature.value(), rt);
}
auto userIDRust = jsiStringToRustString(userID, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
auto deviceListRust = jsiStringToRustString(deviceList, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityRestoreUser(
userIDRust,
siweMessageRust,
siweSignatureRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
contentOneTimeKeysRust,
notifOneTimeKeysRust,
deviceListRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::updatePassword(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String oldPassword,
jsi::String newPassword) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
auto oldPasswordRust = jsiStringToRustString(oldPassword, rt);
auto newPasswordRust = jsiStringToRustString(newPassword, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityUpdateUserPassword(
userIDRust,
deviceIDRust,
accessTokenRust,
oldPasswordRust,
newPasswordRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::deletePasswordUser(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String password) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
auto passwordRust = jsiStringToRustString(password, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityDeletePasswordUser(
userIDRust,
deviceIDRust,
accessTokenRust,
passwordRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::deleteWalletUser(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityDeleteWalletUser(
userIDRust, deviceIDRust, accessTokenRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logOut(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogOut(userIDRust, deviceIDRust, accessTokenRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logOutPrimaryDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String signedDeviceList) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
auto deviceListRust = jsiStringToRustString(signedDeviceList, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogOutPrimaryDevice(
userIDRust,
deviceIDRust,
accessTokenRust,
deviceListRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logOutSecondaryDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogOutSecondaryDevice(
userIDRust, deviceIDRust, accessTokenRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::getOutboundKeysForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto userIDRust = jsiStringToRustString(userID, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetOutboundKeysForUser(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
userIDRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::getInboundKeysForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto userIDRust = jsiStringToRustString(userID, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetInboundKeysForUser(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
userIDRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::versionSupported(jsi::Runtime &rt) {
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityVersionSupported(currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::uploadOneTimeKeys(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array contentOneTimePreKeys,
jsi::Array notifOneTimePreKeys) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto contentOneTimePreKeysRust =
jsiStringArrayToRustVec(contentOneTimePreKeys, rt);
auto notifOneTimePreKeysRust =
jsiStringArrayToRustVec(notifOneTimePreKeys, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityUploadOneTimeKeys(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
contentOneTimePreKeysRust,
notifOneTimePreKeysRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::getKeyserverKeys(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String keyserverID) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto keyserverIDRust = jsiStringToRustString(keyserverID, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetKeyserverKeys(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
keyserverIDRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::getDeviceListForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID,
std::optional<double> sinceTimestamp) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto userIDRust = jsiStringToRustString(userID, rt);
auto timestampI64 = static_cast<int64_t>(sinceTimestamp.value_or(0));
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetDeviceListForUser(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
userIDRust,
timestampI64,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::getDeviceListsForUsers(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array userIDs) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto userIDsRust = jsiStringArrayToRustVec(userIDs, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetDeviceListsForUsers(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
userIDsRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::updateDeviceList(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String updatePayload) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto updatePayloadRust = jsiStringToRustString(updatePayload, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityUpdateDeviceList(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
updatePayloadRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::syncPlatformDetails(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identitySyncPlatformDetails(
authUserIDRust, authDeviceIDRust, authAccessTokenRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::uploadSecondaryDeviceKeysAndLogIn(
jsi::Runtime &rt,
jsi::String userID,
jsi::String nonce,
jsi::String nonceSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto nonceRust = jsiStringToRustString(nonce, rt);
auto nonceSignatureRust = jsiStringToRustString(nonceSignature, rt);
auto keyPayloadRust = jsiStringToRustString(keyPayload, rt);
auto keyPayloadSignatureRust = jsiStringToRustString(keyPayloadSignature, rt);
auto contentPrekeyRust = jsiStringToRustString(contentPrekey, rt);
auto contentPrekeySignatureRust =
jsiStringToRustString(contentPrekeySignature, rt);
auto notifPrekeyRust = jsiStringToRustString(notifPrekey, rt);
auto notifPrekeySignatureRust =
jsiStringToRustString(notifPrekeySignature, rt);
auto contentOneTimeKeysRust = jsiStringArrayToRustVec(contentOneTimeKeys, rt);
auto notifOneTimeKeysRust = jsiStringArrayToRustVec(notifOneTimeKeys, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityUploadSecondaryDeviceKeysAndLogIn(
userIDRust,
nonceRust,
nonceSignatureRust,
keyPayloadRust,
keyPayloadSignatureRust,
contentPrekeyRust,
contentPrekeySignatureRust,
notifPrekeyRust,
notifPrekeySignatureRust,
contentOneTimeKeysRust,
notifOneTimeKeysRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::logInExistingDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String nonce,
jsi::String nonceSignature) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto nonceRust = jsiStringToRustString(nonce, rt);
auto nonceSignatureRust = jsiStringToRustString(nonceSignature, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLogInExistingDevice(
userIDRust,
deviceIDRust,
nonceRust,
nonceSignatureRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::findUserIDForWalletAddress(
jsi::Runtime &rt,
jsi::String walletAddress) {
auto walletAddressRust = jsiStringToRustString(walletAddress, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityFindUserIDForWalletAddress(walletAddressRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value
CommRustModule::findUserIDForUsername(jsi::Runtime &rt, jsi::String username) {
auto usernameRust = jsiStringToRustString(username, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityFindUserIDForUsername(usernameRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value
CommRustModule::getFarcasterUsers(jsi::Runtime &rt, jsi::Array farcasterIDs) {
auto farcasterIDsRust = jsiStringArrayToRustVec(farcasterIDs, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityGetFarcasterUsers(farcasterIDsRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::linkFarcasterAccount(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String farcasterID) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
auto farcasterIDRust = jsiStringToRustString(farcasterID, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityLinkFarcasterAccount(
userIDRust,
deviceIDRust,
accessTokenRust,
farcasterIDRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::unlinkFarcasterAccount(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) {
auto userIDRust = jsiStringToRustString(userID, rt);
auto deviceIDRust = jsiStringToRustString(deviceID, rt);
auto accessTokenRust = jsiStringToRustString(accessToken, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityUnlinkFarcasterAccount(
userIDRust, deviceIDRust, accessTokenRust, currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
jsi::Value CommRustModule::findUserIdentities(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array userIDs) {
auto authUserIDRust = jsiStringToRustString(authUserID, rt);
auto authDeviceIDRust = jsiStringToRustString(authDeviceID, rt);
auto authAccessTokenRust = jsiStringToRustString(authAccessToken, rt);
auto userIDsRust = jsiStringArrayToRustVec(userIDs, rt);
return createPromiseAsJSIValue(
rt, [=, this](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
std::string error;
try {
auto currentID = RustPromiseManager::instance.addPromise(
{promise, this->jsInvoker_, innerRt});
identityFindUserIdentities(
authUserIDRust,
authDeviceIDRust,
authAccessTokenRust,
userIDsRust,
currentID);
} catch (const std::exception &e) {
error = e.what();
};
if (!error.empty()) {
this->jsInvoker_->invokeAsync(
[error, promise]() { promise->reject(error); });
}
});
}
} // namespace comm
diff --git a/native/cpp/CommonCpp/NativeModules/CommRustModule.h b/native/cpp/CommonCpp/NativeModules/CommRustModule.h
index 3bc6e20ea..9380d3ad8 100644
--- a/native/cpp/CommonCpp/NativeModules/CommRustModule.h
+++ b/native/cpp/CommonCpp/NativeModules/CommRustModule.h
@@ -1,224 +1,228 @@
#pragma once
#include "../_generated/rustJSI.h"
#include <ReactCommon/TurboModuleUtils.h>
#include <jsi/jsi.h>
#include <memory>
namespace comm {
namespace jsi = facebook::jsi;
class CommRustModule : public facebook::react::CommRustModuleSchemaCxxSpecJSI {
virtual jsi::Value generateNonce(jsi::Runtime &rt) override;
virtual jsi::Value registerPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String farcasterID,
jsi::String initialDeviceList) override;
virtual jsi::Value registerReservedPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String keyserverMessage,
jsi::String keyserverSignature,
jsi::String initialDeviceList) override;
virtual jsi::Value logInPasswordUser(
jsi::Runtime &rt,
jsi::String username,
jsi::String password,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
- jsi::String notifPrekeySignature) override;
+ jsi::String notifPrekeySignature,
+ jsi::Array contentOneTimeKeys,
+ jsi::Array notifOneTimeKeys) override;
virtual jsi::Value registerWalletUser(
jsi::Runtime &rt,
jsi::String siweMessage,
jsi::String siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String farcasterID,
jsi::String initialDeviceList) override;
virtual jsi::Value logInWalletUser(
jsi::Runtime &rt,
jsi::String siweMessage,
jsi::String siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
- jsi::String notifPrekeySignature) override;
+ jsi::String notifPrekeySignature,
+ jsi::Array contentOneTimeKeys,
+ jsi::Array notifOneTimeKeys) override;
virtual jsi::Value restoreUser(
jsi::Runtime &rt,
jsi::String userID,
std::optional<jsi::String> siweMessage,
std::optional<jsi::String> siweSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys,
jsi::String deviceList) override;
virtual jsi::Value updatePassword(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String oldPassword,
jsi::String newPassword) override;
virtual jsi::Value deletePasswordUser(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String password) override;
virtual jsi::Value deleteWalletUser(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) override;
virtual jsi::Value logOut(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) override;
virtual jsi::Value logOutPrimaryDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String signedDeviceList) override;
virtual jsi::Value logOutSecondaryDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) override;
virtual jsi::Value getOutboundKeysForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID) override;
virtual jsi::Value getInboundKeysForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID) override;
virtual jsi::Value versionSupported(jsi::Runtime &rt) override;
virtual jsi::Value uploadOneTimeKeys(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array contentOneTimePreKeys,
jsi::Array notifOneTimePreKeys) override;
virtual jsi::Value getKeyserverKeys(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String keyserverID) override;
virtual jsi::Value getDeviceListForUser(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String userID,
std::optional<double> sinceTimestamp) override;
virtual jsi::Value getDeviceListsForUsers(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array userIDs) override;
virtual jsi::Value updateDeviceList(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::String updatePayload) override;
virtual jsi::Value syncPlatformDetails(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken) override;
virtual jsi::Value uploadSecondaryDeviceKeysAndLogIn(
jsi::Runtime &rt,
jsi::String userID,
jsi::String nonce,
jsi::String nonceSignature,
jsi::String keyPayload,
jsi::String keyPayloadSignature,
jsi::String contentPrekey,
jsi::String contentPrekeySignature,
jsi::String notifPrekey,
jsi::String notifPrekeySignature,
jsi::Array contentOneTimeKeys,
jsi::Array notifOneTimeKeys) override;
virtual jsi::Value logInExistingDevice(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String nonce,
jsi::String nonceSignature) override;
virtual jsi::Value findUserIDForWalletAddress(
jsi::Runtime &rt,
jsi::String walletAddress) override;
virtual jsi::Value
findUserIDForUsername(jsi::Runtime &rt, jsi::String username) override;
virtual jsi::Value
getFarcasterUsers(jsi::Runtime &rt, jsi::Array farcasterIDs) override;
virtual jsi::Value linkFarcasterAccount(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken,
jsi::String farcasterID) override;
virtual jsi::Value unlinkFarcasterAccount(
jsi::Runtime &rt,
jsi::String userID,
jsi::String deviceID,
jsi::String accessToken) override;
virtual jsi::Value findUserIdentities(
jsi::Runtime &rt,
jsi::String authUserID,
jsi::String authDeviceID,
jsi::String authAccessToken,
jsi::Array userIDs) override;
public:
CommRustModule(std::shared_ptr<facebook::react::CallInvoker> jsInvoker);
};
} // namespace comm
diff --git a/native/cpp/CommonCpp/_generated/rustJSI-generated.cpp b/native/cpp/CommonCpp/_generated/rustJSI-generated.cpp
index c91966313..c509d7af8 100644
--- a/native/cpp/CommonCpp/_generated/rustJSI-generated.cpp
+++ b/native/cpp/CommonCpp/_generated/rustJSI-generated.cpp
@@ -1,142 +1,142 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleH.js
*/
#include "rustJSI.h"
namespace facebook {
namespace react {
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_generateNonce(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->generateNonce(rt);
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerPasswordUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->registerPasswordUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asObject(rt).asArray(rt), args[9].asObject(rt).asArray(rt), args[10].asString(rt), args[11].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerReservedPasswordUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->registerReservedPasswordUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asObject(rt).asArray(rt), args[9].asObject(rt).asArray(rt), args[10].asString(rt), args[11].asString(rt), args[12].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInPasswordUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
- return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logInPasswordUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt));
+ return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logInPasswordUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asObject(rt).asArray(rt), args[9].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerWalletUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->registerWalletUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asObject(rt).asArray(rt), args[9].asObject(rt).asArray(rt), args[10].asString(rt), args[11].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInWalletUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
- return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logInWalletUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt));
+ return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logInWalletUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asObject(rt).asArray(rt), args[9].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_restoreUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->restoreUser(rt, args[0].asString(rt), args[1].isNull() || args[1].isUndefined() ? std::nullopt : std::make_optional(args[1].asString(rt)), args[2].isNull() || args[2].isUndefined() ? std::nullopt : std::make_optional(args[2].asString(rt)), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asString(rt), args[9].asObject(rt).asArray(rt), args[10].asObject(rt).asArray(rt), args[11].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_updatePassword(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->updatePassword(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_deletePasswordUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->deletePasswordUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_deleteWalletUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->deleteWalletUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOut(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logOut(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOutPrimaryDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logOutPrimaryDevice(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOutSecondaryDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logOutSecondaryDevice(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getOutboundKeysForUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getOutboundKeysForUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getInboundKeysForUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getInboundKeysForUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_versionSupported(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->versionSupported(rt);
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_uploadOneTimeKeys(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->uploadOneTimeKeys(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asObject(rt).asArray(rt), args[4].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getKeyserverKeys(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getKeyserverKeys(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getDeviceListForUser(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getDeviceListForUser(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].isNull() || args[4].isUndefined() ? std::nullopt : std::make_optional(args[4].asNumber()));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getDeviceListsForUsers(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getDeviceListsForUsers(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_updateDeviceList(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->updateDeviceList(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_syncPlatformDetails(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->syncPlatformDetails(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_uploadSecondaryDeviceKeysAndLogIn(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->uploadSecondaryDeviceKeysAndLogIn(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt), args[4].asString(rt), args[5].asString(rt), args[6].asString(rt), args[7].asString(rt), args[8].asString(rt), args[9].asObject(rt).asArray(rt), args[10].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInExistingDevice(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->logInExistingDevice(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIDForWalletAddress(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->findUserIDForWalletAddress(rt, args[0].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIDForUsername(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->findUserIDForUsername(rt, args[0].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_getFarcasterUsers(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->getFarcasterUsers(rt, args[0].asObject(rt).asArray(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_linkFarcasterAccount(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->linkFarcasterAccount(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_unlinkFarcasterAccount(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->unlinkFarcasterAccount(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt));
}
static jsi::Value __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIdentities(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
return static_cast<CommRustModuleSchemaCxxSpecJSI *>(&turboModule)->findUserIdentities(rt, args[0].asString(rt), args[1].asString(rt), args[2].asString(rt), args[3].asObject(rt).asArray(rt));
}
CommRustModuleSchemaCxxSpecJSI::CommRustModuleSchemaCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule("CommRustTurboModule", jsInvoker) {
methodMap_["generateNonce"] = MethodMetadata {0, __hostFunction_CommRustModuleSchemaCxxSpecJSI_generateNonce};
methodMap_["registerPasswordUser"] = MethodMetadata {12, __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerPasswordUser};
methodMap_["registerReservedPasswordUser"] = MethodMetadata {13, __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerReservedPasswordUser};
- methodMap_["logInPasswordUser"] = MethodMetadata {8, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInPasswordUser};
+ methodMap_["logInPasswordUser"] = MethodMetadata {10, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInPasswordUser};
methodMap_["registerWalletUser"] = MethodMetadata {12, __hostFunction_CommRustModuleSchemaCxxSpecJSI_registerWalletUser};
- methodMap_["logInWalletUser"] = MethodMetadata {8, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInWalletUser};
+ methodMap_["logInWalletUser"] = MethodMetadata {10, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInWalletUser};
methodMap_["restoreUser"] = MethodMetadata {12, __hostFunction_CommRustModuleSchemaCxxSpecJSI_restoreUser};
methodMap_["updatePassword"] = MethodMetadata {5, __hostFunction_CommRustModuleSchemaCxxSpecJSI_updatePassword};
methodMap_["deletePasswordUser"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_deletePasswordUser};
methodMap_["deleteWalletUser"] = MethodMetadata {3, __hostFunction_CommRustModuleSchemaCxxSpecJSI_deleteWalletUser};
methodMap_["logOut"] = MethodMetadata {3, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOut};
methodMap_["logOutPrimaryDevice"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOutPrimaryDevice};
methodMap_["logOutSecondaryDevice"] = MethodMetadata {3, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logOutSecondaryDevice};
methodMap_["getOutboundKeysForUser"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getOutboundKeysForUser};
methodMap_["getInboundKeysForUser"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getInboundKeysForUser};
methodMap_["versionSupported"] = MethodMetadata {0, __hostFunction_CommRustModuleSchemaCxxSpecJSI_versionSupported};
methodMap_["uploadOneTimeKeys"] = MethodMetadata {5, __hostFunction_CommRustModuleSchemaCxxSpecJSI_uploadOneTimeKeys};
methodMap_["getKeyserverKeys"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getKeyserverKeys};
methodMap_["getDeviceListForUser"] = MethodMetadata {5, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getDeviceListForUser};
methodMap_["getDeviceListsForUsers"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getDeviceListsForUsers};
methodMap_["updateDeviceList"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_updateDeviceList};
methodMap_["syncPlatformDetails"] = MethodMetadata {3, __hostFunction_CommRustModuleSchemaCxxSpecJSI_syncPlatformDetails};
methodMap_["uploadSecondaryDeviceKeysAndLogIn"] = MethodMetadata {11, __hostFunction_CommRustModuleSchemaCxxSpecJSI_uploadSecondaryDeviceKeysAndLogIn};
methodMap_["logInExistingDevice"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_logInExistingDevice};
methodMap_["findUserIDForWalletAddress"] = MethodMetadata {1, __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIDForWalletAddress};
methodMap_["findUserIDForUsername"] = MethodMetadata {1, __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIDForUsername};
methodMap_["getFarcasterUsers"] = MethodMetadata {1, __hostFunction_CommRustModuleSchemaCxxSpecJSI_getFarcasterUsers};
methodMap_["linkFarcasterAccount"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_linkFarcasterAccount};
methodMap_["unlinkFarcasterAccount"] = MethodMetadata {3, __hostFunction_CommRustModuleSchemaCxxSpecJSI_unlinkFarcasterAccount};
methodMap_["findUserIdentities"] = MethodMetadata {4, __hostFunction_CommRustModuleSchemaCxxSpecJSI_findUserIdentities};
}
} // namespace react
} // namespace facebook
diff --git a/native/cpp/CommonCpp/_generated/rustJSI.h b/native/cpp/CommonCpp/_generated/rustJSI.h
index d3b89e252..117220842 100644
--- a/native/cpp/CommonCpp/_generated/rustJSI.h
+++ b/native/cpp/CommonCpp/_generated/rustJSI.h
@@ -1,323 +1,323 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleH.js
*/
#pragma once
#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>
namespace facebook {
namespace react {
class JSI_EXPORT CommRustModuleSchemaCxxSpecJSI : public TurboModule {
protected:
CommRustModuleSchemaCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
public:
virtual jsi::Value generateNonce(jsi::Runtime &rt) = 0;
virtual jsi::Value registerPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String farcasterID, jsi::String initialDeviceList) = 0;
virtual jsi::Value registerReservedPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String keyserverMessage, jsi::String keyserverSignature, jsi::String initialDeviceList) = 0;
- virtual jsi::Value logInPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature) = 0;
+ virtual jsi::Value logInPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) = 0;
virtual jsi::Value registerWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String farcasterID, jsi::String initialDeviceList) = 0;
- virtual jsi::Value logInWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature) = 0;
+ virtual jsi::Value logInWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) = 0;
virtual jsi::Value restoreUser(jsi::Runtime &rt, jsi::String userID, std::optional<jsi::String> siweMessage, std::optional<jsi::String> siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String deviceList) = 0;
virtual jsi::Value updatePassword(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String oldPassword, jsi::String newPassword) = 0;
virtual jsi::Value deletePasswordUser(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String password) = 0;
virtual jsi::Value deleteWalletUser(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) = 0;
virtual jsi::Value logOut(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) = 0;
virtual jsi::Value logOutPrimaryDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String signedDeviceList) = 0;
virtual jsi::Value logOutSecondaryDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) = 0;
virtual jsi::Value getOutboundKeysForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID) = 0;
virtual jsi::Value getInboundKeysForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID) = 0;
virtual jsi::Value versionSupported(jsi::Runtime &rt) = 0;
virtual jsi::Value uploadOneTimeKeys(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array contentOneTimePreKeys, jsi::Array notifOneTimePreKeys) = 0;
virtual jsi::Value getKeyserverKeys(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String keyserverID) = 0;
virtual jsi::Value getDeviceListForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID, std::optional<double> sinceTimestamp) = 0;
virtual jsi::Value getDeviceListsForUsers(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array userIDs) = 0;
virtual jsi::Value updateDeviceList(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String updatePayload) = 0;
virtual jsi::Value syncPlatformDetails(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken) = 0;
virtual jsi::Value uploadSecondaryDeviceKeysAndLogIn(jsi::Runtime &rt, jsi::String userID, jsi::String nonce, jsi::String nonceSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) = 0;
virtual jsi::Value logInExistingDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String nonce, jsi::String nonceSignature) = 0;
virtual jsi::Value findUserIDForWalletAddress(jsi::Runtime &rt, jsi::String walletAddress) = 0;
virtual jsi::Value findUserIDForUsername(jsi::Runtime &rt, jsi::String username) = 0;
virtual jsi::Value getFarcasterUsers(jsi::Runtime &rt, jsi::Array farcasterIDs) = 0;
virtual jsi::Value linkFarcasterAccount(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String farcasterID) = 0;
virtual jsi::Value unlinkFarcasterAccount(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) = 0;
virtual jsi::Value findUserIdentities(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array userIDs) = 0;
};
template <typename T>
class JSI_EXPORT CommRustModuleSchemaCxxSpec : public TurboModule {
public:
jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
return delegate_.get(rt, propName);
}
protected:
CommRustModuleSchemaCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule("CommRustTurboModule", jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public CommRustModuleSchemaCxxSpecJSI {
public:
Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
CommRustModuleSchemaCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {}
jsi::Value generateNonce(jsi::Runtime &rt) override {
static_assert(
bridging::getParameterCount(&T::generateNonce) == 1,
"Expected generateNonce(...) to have 1 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::generateNonce, jsInvoker_, instance_);
}
jsi::Value registerPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String farcasterID, jsi::String initialDeviceList) override {
static_assert(
bridging::getParameterCount(&T::registerPasswordUser) == 13,
"Expected registerPasswordUser(...) to have 13 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::registerPasswordUser, jsInvoker_, instance_, std::move(username), std::move(password), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys), std::move(farcasterID), std::move(initialDeviceList));
}
jsi::Value registerReservedPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String keyserverMessage, jsi::String keyserverSignature, jsi::String initialDeviceList) override {
static_assert(
bridging::getParameterCount(&T::registerReservedPasswordUser) == 14,
"Expected registerReservedPasswordUser(...) to have 14 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::registerReservedPasswordUser, jsInvoker_, instance_, std::move(username), std::move(password), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys), std::move(keyserverMessage), std::move(keyserverSignature), std::move(initialDeviceList));
}
- jsi::Value logInPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature) override {
+ jsi::Value logInPasswordUser(jsi::Runtime &rt, jsi::String username, jsi::String password, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) override {
static_assert(
- bridging::getParameterCount(&T::logInPasswordUser) == 9,
- "Expected logInPasswordUser(...) to have 9 parameters");
+ bridging::getParameterCount(&T::logInPasswordUser) == 11,
+ "Expected logInPasswordUser(...) to have 11 parameters");
return bridging::callFromJs<jsi::Value>(
- rt, &T::logInPasswordUser, jsInvoker_, instance_, std::move(username), std::move(password), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature));
+ rt, &T::logInPasswordUser, jsInvoker_, instance_, std::move(username), std::move(password), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys));
}
jsi::Value registerWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String farcasterID, jsi::String initialDeviceList) override {
static_assert(
bridging::getParameterCount(&T::registerWalletUser) == 13,
"Expected registerWalletUser(...) to have 13 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::registerWalletUser, jsInvoker_, instance_, std::move(siweMessage), std::move(siweSignature), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys), std::move(farcasterID), std::move(initialDeviceList));
}
- jsi::Value logInWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature) override {
+ jsi::Value logInWalletUser(jsi::Runtime &rt, jsi::String siweMessage, jsi::String siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) override {
static_assert(
- bridging::getParameterCount(&T::logInWalletUser) == 9,
- "Expected logInWalletUser(...) to have 9 parameters");
+ bridging::getParameterCount(&T::logInWalletUser) == 11,
+ "Expected logInWalletUser(...) to have 11 parameters");
return bridging::callFromJs<jsi::Value>(
- rt, &T::logInWalletUser, jsInvoker_, instance_, std::move(siweMessage), std::move(siweSignature), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature));
+ rt, &T::logInWalletUser, jsInvoker_, instance_, std::move(siweMessage), std::move(siweSignature), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys));
}
jsi::Value restoreUser(jsi::Runtime &rt, jsi::String userID, std::optional<jsi::String> siweMessage, std::optional<jsi::String> siweSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys, jsi::String deviceList) override {
static_assert(
bridging::getParameterCount(&T::restoreUser) == 13,
"Expected restoreUser(...) to have 13 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::restoreUser, jsInvoker_, instance_, std::move(userID), std::move(siweMessage), std::move(siweSignature), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys), std::move(deviceList));
}
jsi::Value updatePassword(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String oldPassword, jsi::String newPassword) override {
static_assert(
bridging::getParameterCount(&T::updatePassword) == 6,
"Expected updatePassword(...) to have 6 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::updatePassword, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken), std::move(oldPassword), std::move(newPassword));
}
jsi::Value deletePasswordUser(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String password) override {
static_assert(
bridging::getParameterCount(&T::deletePasswordUser) == 5,
"Expected deletePasswordUser(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::deletePasswordUser, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken), std::move(password));
}
jsi::Value deleteWalletUser(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) override {
static_assert(
bridging::getParameterCount(&T::deleteWalletUser) == 4,
"Expected deleteWalletUser(...) to have 4 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::deleteWalletUser, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken));
}
jsi::Value logOut(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) override {
static_assert(
bridging::getParameterCount(&T::logOut) == 4,
"Expected logOut(...) to have 4 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::logOut, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken));
}
jsi::Value logOutPrimaryDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String signedDeviceList) override {
static_assert(
bridging::getParameterCount(&T::logOutPrimaryDevice) == 5,
"Expected logOutPrimaryDevice(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::logOutPrimaryDevice, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken), std::move(signedDeviceList));
}
jsi::Value logOutSecondaryDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) override {
static_assert(
bridging::getParameterCount(&T::logOutSecondaryDevice) == 4,
"Expected logOutSecondaryDevice(...) to have 4 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::logOutSecondaryDevice, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken));
}
jsi::Value getOutboundKeysForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID) override {
static_assert(
bridging::getParameterCount(&T::getOutboundKeysForUser) == 5,
"Expected getOutboundKeysForUser(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getOutboundKeysForUser, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(userID));
}
jsi::Value getInboundKeysForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID) override {
static_assert(
bridging::getParameterCount(&T::getInboundKeysForUser) == 5,
"Expected getInboundKeysForUser(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getInboundKeysForUser, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(userID));
}
jsi::Value versionSupported(jsi::Runtime &rt) override {
static_assert(
bridging::getParameterCount(&T::versionSupported) == 1,
"Expected versionSupported(...) to have 1 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::versionSupported, jsInvoker_, instance_);
}
jsi::Value uploadOneTimeKeys(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array contentOneTimePreKeys, jsi::Array notifOneTimePreKeys) override {
static_assert(
bridging::getParameterCount(&T::uploadOneTimeKeys) == 6,
"Expected uploadOneTimeKeys(...) to have 6 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::uploadOneTimeKeys, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(contentOneTimePreKeys), std::move(notifOneTimePreKeys));
}
jsi::Value getKeyserverKeys(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String keyserverID) override {
static_assert(
bridging::getParameterCount(&T::getKeyserverKeys) == 5,
"Expected getKeyserverKeys(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getKeyserverKeys, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(keyserverID));
}
jsi::Value getDeviceListForUser(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String userID, std::optional<double> sinceTimestamp) override {
static_assert(
bridging::getParameterCount(&T::getDeviceListForUser) == 6,
"Expected getDeviceListForUser(...) to have 6 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getDeviceListForUser, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(userID), std::move(sinceTimestamp));
}
jsi::Value getDeviceListsForUsers(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array userIDs) override {
static_assert(
bridging::getParameterCount(&T::getDeviceListsForUsers) == 5,
"Expected getDeviceListsForUsers(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getDeviceListsForUsers, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(userIDs));
}
jsi::Value updateDeviceList(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::String updatePayload) override {
static_assert(
bridging::getParameterCount(&T::updateDeviceList) == 5,
"Expected updateDeviceList(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::updateDeviceList, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(updatePayload));
}
jsi::Value syncPlatformDetails(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken) override {
static_assert(
bridging::getParameterCount(&T::syncPlatformDetails) == 4,
"Expected syncPlatformDetails(...) to have 4 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::syncPlatformDetails, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken));
}
jsi::Value uploadSecondaryDeviceKeysAndLogIn(jsi::Runtime &rt, jsi::String userID, jsi::String nonce, jsi::String nonceSignature, jsi::String keyPayload, jsi::String keyPayloadSignature, jsi::String contentPrekey, jsi::String contentPrekeySignature, jsi::String notifPrekey, jsi::String notifPrekeySignature, jsi::Array contentOneTimeKeys, jsi::Array notifOneTimeKeys) override {
static_assert(
bridging::getParameterCount(&T::uploadSecondaryDeviceKeysAndLogIn) == 12,
"Expected uploadSecondaryDeviceKeysAndLogIn(...) to have 12 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::uploadSecondaryDeviceKeysAndLogIn, jsInvoker_, instance_, std::move(userID), std::move(nonce), std::move(nonceSignature), std::move(keyPayload), std::move(keyPayloadSignature), std::move(contentPrekey), std::move(contentPrekeySignature), std::move(notifPrekey), std::move(notifPrekeySignature), std::move(contentOneTimeKeys), std::move(notifOneTimeKeys));
}
jsi::Value logInExistingDevice(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String nonce, jsi::String nonceSignature) override {
static_assert(
bridging::getParameterCount(&T::logInExistingDevice) == 5,
"Expected logInExistingDevice(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::logInExistingDevice, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(nonce), std::move(nonceSignature));
}
jsi::Value findUserIDForWalletAddress(jsi::Runtime &rt, jsi::String walletAddress) override {
static_assert(
bridging::getParameterCount(&T::findUserIDForWalletAddress) == 2,
"Expected findUserIDForWalletAddress(...) to have 2 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::findUserIDForWalletAddress, jsInvoker_, instance_, std::move(walletAddress));
}
jsi::Value findUserIDForUsername(jsi::Runtime &rt, jsi::String username) override {
static_assert(
bridging::getParameterCount(&T::findUserIDForUsername) == 2,
"Expected findUserIDForUsername(...) to have 2 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::findUserIDForUsername, jsInvoker_, instance_, std::move(username));
}
jsi::Value getFarcasterUsers(jsi::Runtime &rt, jsi::Array farcasterIDs) override {
static_assert(
bridging::getParameterCount(&T::getFarcasterUsers) == 2,
"Expected getFarcasterUsers(...) to have 2 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::getFarcasterUsers, jsInvoker_, instance_, std::move(farcasterIDs));
}
jsi::Value linkFarcasterAccount(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken, jsi::String farcasterID) override {
static_assert(
bridging::getParameterCount(&T::linkFarcasterAccount) == 5,
"Expected linkFarcasterAccount(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::linkFarcasterAccount, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken), std::move(farcasterID));
}
jsi::Value unlinkFarcasterAccount(jsi::Runtime &rt, jsi::String userID, jsi::String deviceID, jsi::String accessToken) override {
static_assert(
bridging::getParameterCount(&T::unlinkFarcasterAccount) == 4,
"Expected unlinkFarcasterAccount(...) to have 4 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::unlinkFarcasterAccount, jsInvoker_, instance_, std::move(userID), std::move(deviceID), std::move(accessToken));
}
jsi::Value findUserIdentities(jsi::Runtime &rt, jsi::String authUserID, jsi::String authDeviceID, jsi::String authAccessToken, jsi::Array userIDs) override {
static_assert(
bridging::getParameterCount(&T::findUserIdentities) == 5,
"Expected findUserIdentities(...) to have 5 parameters");
return bridging::callFromJs<jsi::Value>(
rt, &T::findUserIdentities, jsInvoker_, instance_, std::move(authUserID), std::move(authDeviceID), std::move(authAccessToken), std::move(userIDs));
}
private:
T *instance_;
};
Delegate delegate_;
};
} // namespace react
} // namespace facebook
diff --git a/native/identity-service/identity-service-context-provider.react.js b/native/identity-service/identity-service-context-provider.react.js
index 6d580cb8e..69af6f589 100644
--- a/native/identity-service/identity-service-context-provider.react.js
+++ b/native/identity-service/identity-service-context-provider.react.js
@@ -1,746 +1,758 @@
// @flow
import * as React from 'react';
import { getOneTimeKeyValues } from 'lib/shared/crypto-utils.js';
import { createAndSignSingletonDeviceList } from 'lib/shared/device-list-utils.js';
import { IdentityClientContext } from 'lib/shared/identity-client-context.js';
import {
type IdentityKeysBlob,
identityKeysBlobValidator,
type OneTimeKeysResultValues,
} from 'lib/types/crypto-types.js';
import {
type DeviceOlmInboundKeys,
deviceOlmInboundKeysValidator,
type DeviceOlmOutboundKeys,
deviceOlmOutboundKeysValidator,
farcasterUsersValidator,
identityAuthResultValidator,
type IdentityServiceClient,
ONE_TIME_KEYS_NUMBER,
type SignedDeviceList,
signedDeviceListHistoryValidator,
type SignedNonce,
type UserAuthMetadata,
userDeviceOlmInboundKeysValidator,
type UserDevicesOlmInboundKeys,
type UserDevicesOlmOutboundKeys,
type UsersSignedDeviceLists,
userIdentitiesResponseValidator,
type UsersDevicesPlatformDetails,
peersDeviceListsValidator,
} from 'lib/types/identity-service-types.js';
import { getContentSigningKey } from 'lib/utils/crypto-utils.js';
import { assertWithValidator } from 'lib/utils/validation-utils.js';
import { getCommServicesAuthMetadataEmitter } from '../event-emitters/csa-auth-metadata-emitter.js';
import { commCoreModule, commRustModule } from '../native-modules.js';
import { useSelector } from '../redux/redux-utils.js';
type Props = {
+children: React.Node,
};
function IdentityServiceContextProvider(props: Props): React.Node {
const { children } = props;
const userIDPromiseRef = React.useRef<?Promise<?string>>();
if (!userIDPromiseRef.current) {
userIDPromiseRef.current = (async () => {
const { userID } = await commCoreModule.getCommServicesAuthMetadata();
return userID;
})();
}
React.useEffect(() => {
const metadataEmitter = getCommServicesAuthMetadataEmitter();
const subscription = metadataEmitter.addListener(
'commServicesAuthMetadata',
(authMetadata: UserAuthMetadata) => {
userIDPromiseRef.current = Promise.resolve(authMetadata.userID);
},
);
return () => subscription.remove();
}, []);
const accessToken = useSelector(state => state.commServicesAccessToken);
const getAuthMetadata = React.useCallback<
() => Promise<{
+deviceID: string,
+userID: string,
+accessToken: string,
}>,
>(async () => {
const deviceID = await getContentSigningKey();
const userID = await userIDPromiseRef.current;
if (!deviceID || !userID || !accessToken) {
throw new Error('Identity service client is not initialized');
}
return { deviceID, userID, accessToken };
}, [accessToken]);
const processAuthResult = async (authResult: string, deviceID: string) => {
const { userID, accessToken: token, username } = JSON.parse(authResult);
const identityAuthResult = {
accessToken: token,
userID,
username,
};
const validatedResult = assertWithValidator(
identityAuthResult,
identityAuthResultValidator,
);
await commCoreModule.setCommServicesAuthMetadata(
validatedResult.userID,
deviceID,
validatedResult.accessToken,
);
return validatedResult;
};
const client = React.useMemo<IdentityServiceClient>(
() => ({
deleteWalletUser: async () => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.deleteWalletUser(userID, deviceID, token);
},
deletePasswordUser: async (password: string) => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.deletePasswordUser(
userID,
deviceID,
token,
password,
);
},
logOut: async () => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.logOut(userID, deviceID, token);
},
logOutPrimaryDevice: async () => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
const signedDeviceList =
await createAndSignSingletonDeviceList(deviceID);
return commRustModule.logOutPrimaryDevice(
userID,
deviceID,
token,
JSON.stringify(signedDeviceList),
);
},
logOutSecondaryDevice: async () => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.logOutSecondaryDevice(userID, deviceID, token);
},
getKeyserverKeys: async (
keyserverID: string,
): Promise<DeviceOlmOutboundKeys> => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.getKeyserverKeys(
userID,
deviceID,
token,
keyserverID,
);
const resultObject = JSON.parse(result);
const payload = resultObject?.payload;
const keyserverKeys = {
identityKeysBlob: payload ? JSON.parse(payload) : null,
contentInitializationInfo: {
prekey: resultObject?.contentPrekey,
prekeySignature: resultObject?.contentPrekeySignature,
oneTimeKey: resultObject?.oneTimeContentPrekey,
},
notifInitializationInfo: {
prekey: resultObject?.notifPrekey,
prekeySignature: resultObject?.notifPrekeySignature,
oneTimeKey: resultObject?.oneTimeNotifPrekey,
},
payloadSignature: resultObject?.payloadSignature,
};
return assertWithValidator(
keyserverKeys,
deviceOlmOutboundKeysValidator,
);
},
getOutboundKeysForUser: async (
targetUserID: string,
): Promise<UserDevicesOlmOutboundKeys[]> => {
const {
deviceID: authDeviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.getOutboundKeysForUser(
userID,
authDeviceID,
token,
targetUserID,
);
const resultArray = JSON.parse(result);
return resultArray
.map(outboundKeysInfo => {
try {
const payload = outboundKeysInfo?.payload;
const identityKeysBlob: IdentityKeysBlob = assertWithValidator(
payload ? JSON.parse(payload) : null,
identityKeysBlobValidator,
);
const deviceID =
identityKeysBlob.primaryIdentityPublicKeys.ed25519;
const deviceKeys = {
identityKeysBlob,
contentInitializationInfo: {
prekey: outboundKeysInfo?.contentPrekey,
prekeySignature: outboundKeysInfo?.contentPrekeySignature,
oneTimeKey: outboundKeysInfo?.oneTimeContentPrekey,
},
notifInitializationInfo: {
prekey: outboundKeysInfo?.notifPrekey,
prekeySignature: outboundKeysInfo?.notifPrekeySignature,
oneTimeKey: outboundKeysInfo?.oneTimeNotifPrekey,
},
payloadSignature: outboundKeysInfo?.payloadSignature,
};
try {
const validatedKeys = assertWithValidator(
deviceKeys,
deviceOlmOutboundKeysValidator,
);
return {
deviceID,
keys: validatedKeys,
};
} catch (e) {
console.log(e);
return {
deviceID,
keys: null,
};
}
} catch (e) {
console.log(e);
return null;
}
})
.filter(Boolean);
},
getInboundKeysForUser: async (
targetUserID: string,
): Promise<UserDevicesOlmInboundKeys> => {
const {
deviceID: authDeviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.getInboundKeysForUser(
userID,
authDeviceID,
token,
targetUserID,
);
const resultArray = JSON.parse(result);
const devicesKeys: {
[deviceID: string]: ?DeviceOlmInboundKeys,
} = {};
resultArray.forEach(inboundKeysInfo => {
try {
const payload = inboundKeysInfo?.payload;
const identityKeysBlob: IdentityKeysBlob = assertWithValidator(
payload ? JSON.parse(payload) : null,
identityKeysBlobValidator,
);
const deviceID = identityKeysBlob.primaryIdentityPublicKeys.ed25519;
const deviceKeys = {
identityKeysBlob,
signedPrekeys: {
contentPrekey: inboundKeysInfo?.contentPrekey,
contentPrekeySignature: inboundKeysInfo?.contentPrekeySignature,
notifPrekey: inboundKeysInfo?.notifPrekey,
notifPrekeySignature: inboundKeysInfo?.notifPrekeySignature,
},
payloadSignature: inboundKeysInfo?.payloadSignature,
};
try {
devicesKeys[deviceID] = assertWithValidator(
deviceKeys,
deviceOlmInboundKeysValidator,
);
} catch (e) {
console.log(e);
devicesKeys[deviceID] = null;
}
} catch (e) {
console.log(e);
}
});
const device = resultArray?.[0];
const inboundUserKeys = {
keys: devicesKeys,
username: device?.username,
walletAddress: device?.walletAddress,
};
return assertWithValidator(
inboundUserKeys,
userDeviceOlmInboundKeysValidator,
);
},
uploadOneTimeKeys: async (oneTimeKeys: OneTimeKeysResultValues) => {
const {
deviceID: authDeviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
await commRustModule.uploadOneTimeKeys(
userID,
authDeviceID,
token,
oneTimeKeys.contentOneTimeKeys,
oneTimeKeys.notificationsOneTimeKeys,
);
},
registerPasswordUser: async (
username: string,
password: string,
fid: ?string,
) => {
await commCoreModule.initializeCryptoAccount();
const [
{ blobPayload, signature, primaryIdentityPublicKeys },
{ contentOneTimeKeys, notificationsOneTimeKeys },
prekeys,
] = await Promise.all([
commCoreModule.getUserPublicKey(),
commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
commCoreModule.validateAndGetPrekeys(),
]);
const initialDeviceList = await createAndSignSingletonDeviceList(
primaryIdentityPublicKeys.ed25519,
);
const registrationResult = await commRustModule.registerPasswordUser(
username,
password,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
getOneTimeKeyValues(contentOneTimeKeys),
getOneTimeKeyValues(notificationsOneTimeKeys),
fid ?? '',
JSON.stringify(initialDeviceList),
);
return await processAuthResult(
registrationResult,
primaryIdentityPublicKeys.ed25519,
);
},
registerReservedPasswordUser: async (
username: string,
password: string,
keyserverMessage: string,
keyserverSignature: string,
) => {
await commCoreModule.initializeCryptoAccount();
const [
{ blobPayload, signature, primaryIdentityPublicKeys },
{ contentOneTimeKeys, notificationsOneTimeKeys },
prekeys,
] = await Promise.all([
commCoreModule.getUserPublicKey(),
commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
commCoreModule.validateAndGetPrekeys(),
]);
const initialDeviceList = await createAndSignSingletonDeviceList(
primaryIdentityPublicKeys.ed25519,
);
const registrationResult =
await commRustModule.registerReservedPasswordUser(
username,
password,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
getOneTimeKeyValues(contentOneTimeKeys),
getOneTimeKeyValues(notificationsOneTimeKeys),
keyserverMessage,
keyserverSignature,
JSON.stringify(initialDeviceList),
);
return await processAuthResult(
registrationResult,
primaryIdentityPublicKeys.ed25519,
);
},
logInPasswordUser: async (username: string, password: string) => {
await commCoreModule.initializeCryptoAccount();
- const [{ blobPayload, signature, primaryIdentityPublicKeys }, prekeys] =
- await Promise.all([
- commCoreModule.getUserPublicKey(),
- commCoreModule.validateAndGetPrekeys(),
- ]);
+ const [
+ { blobPayload, signature, primaryIdentityPublicKeys },
+ { contentOneTimeKeys, notificationsOneTimeKeys },
+ prekeys,
+ ] = await Promise.all([
+ commCoreModule.getUserPublicKey(),
+ commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
+ commCoreModule.validateAndGetPrekeys(),
+ ]);
const loginResult = await commRustModule.logInPasswordUser(
username,
password,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
+ getOneTimeKeyValues(contentOneTimeKeys),
+ getOneTimeKeyValues(notificationsOneTimeKeys),
);
return await processAuthResult(
loginResult,
primaryIdentityPublicKeys.ed25519,
);
},
registerWalletUser: async (
walletAddress: string,
siweMessage: string,
siweSignature: string,
fid: ?string,
) => {
await commCoreModule.initializeCryptoAccount();
const [
{ blobPayload, signature, primaryIdentityPublicKeys },
{ contentOneTimeKeys, notificationsOneTimeKeys },
prekeys,
] = await Promise.all([
commCoreModule.getUserPublicKey(),
commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
commCoreModule.validateAndGetPrekeys(),
]);
const initialDeviceList = await createAndSignSingletonDeviceList(
primaryIdentityPublicKeys.ed25519,
);
const registrationResult = await commRustModule.registerWalletUser(
siweMessage,
siweSignature,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
getOneTimeKeyValues(contentOneTimeKeys),
getOneTimeKeyValues(notificationsOneTimeKeys),
fid ?? '',
JSON.stringify(initialDeviceList),
);
return await processAuthResult(
registrationResult,
primaryIdentityPublicKeys.ed25519,
);
},
logInWalletUser: async (
walletAddress: string,
siweMessage: string,
siweSignature: string,
) => {
await commCoreModule.initializeCryptoAccount();
- const [{ blobPayload, signature, primaryIdentityPublicKeys }, prekeys] =
- await Promise.all([
- commCoreModule.getUserPublicKey(),
- commCoreModule.validateAndGetPrekeys(),
- ]);
+ const [
+ { blobPayload, signature, primaryIdentityPublicKeys },
+ { contentOneTimeKeys, notificationsOneTimeKeys },
+ prekeys,
+ ] = await Promise.all([
+ commCoreModule.getUserPublicKey(),
+ commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
+ commCoreModule.validateAndGetPrekeys(),
+ ]);
const loginResult = await commRustModule.logInWalletUser(
siweMessage,
siweSignature,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
+ getOneTimeKeyValues(contentOneTimeKeys),
+ getOneTimeKeyValues(notificationsOneTimeKeys),
);
return await processAuthResult(
loginResult,
primaryIdentityPublicKeys.ed25519,
);
},
restoreUser: async (
userID: string,
deviceList: SignedDeviceList,
siweMessage?: string,
siweSignature?: string,
) => {
await commCoreModule.initializeCryptoAccount();
const [
{ blobPayload, signature, primaryIdentityPublicKeys },
{ contentOneTimeKeys, notificationsOneTimeKeys },
prekeys,
] = await Promise.all([
commCoreModule.getUserPublicKey(),
commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
commCoreModule.validateAndGetPrekeys(),
]);
const restoreResult = await commRustModule.restoreUser(
userID,
siweMessage,
siweSignature,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
getOneTimeKeyValues(contentOneTimeKeys),
getOneTimeKeyValues(notificationsOneTimeKeys),
JSON.stringify(deviceList),
);
return await processAuthResult(
restoreResult,
primaryIdentityPublicKeys.ed25519,
);
},
uploadKeysForRegisteredDeviceAndLogIn: async (
userID: string,
nonceChallengeResponse: SignedNonce,
) => {
await commCoreModule.initializeCryptoAccount();
const [
{ blobPayload, signature, primaryIdentityPublicKeys },
{ contentOneTimeKeys, notificationsOneTimeKeys },
prekeys,
] = await Promise.all([
commCoreModule.getUserPublicKey(),
commCoreModule.getOneTimeKeys(ONE_TIME_KEYS_NUMBER),
commCoreModule.validateAndGetPrekeys(),
]);
const { nonce, nonceSignature } = nonceChallengeResponse;
const registrationResult =
await commRustModule.uploadSecondaryDeviceKeysAndLogIn(
userID,
nonce,
nonceSignature,
blobPayload,
signature,
prekeys.contentPrekey,
prekeys.contentPrekeySignature,
prekeys.notifPrekey,
prekeys.notifPrekeySignature,
getOneTimeKeyValues(contentOneTimeKeys),
getOneTimeKeyValues(notificationsOneTimeKeys),
);
return await processAuthResult(
registrationResult,
primaryIdentityPublicKeys.ed25519,
);
},
generateNonce: commRustModule.generateNonce,
getDeviceListHistoryForUser: async (
userID: string,
sinceTimestamp?: number,
) => {
const {
deviceID: authDeviceID,
userID: authUserID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.getDeviceListForUser(
authUserID,
authDeviceID,
token,
userID,
sinceTimestamp,
);
const rawPayloads: string[] = JSON.parse(result);
const deviceLists: SignedDeviceList[] = rawPayloads.map(payload =>
JSON.parse(payload),
);
return assertWithValidator(
deviceLists,
signedDeviceListHistoryValidator,
);
},
getDeviceListsForUsers: async (userIDs: $ReadOnlyArray<string>) => {
const {
deviceID: authDeviceID,
userID: authUserID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.getDeviceListsForUsers(
authUserID,
authDeviceID,
token,
userIDs,
);
const rawPayloads: {
+usersDeviceLists: { +[userID: string]: string },
+usersDevicesPlatformDetails: UsersDevicesPlatformDetails,
} = JSON.parse(result);
let usersDeviceLists: UsersSignedDeviceLists = {};
for (const userID in rawPayloads.usersDeviceLists) {
usersDeviceLists = {
...usersDeviceLists,
[userID]: JSON.parse(rawPayloads.usersDeviceLists[userID]),
};
}
const peersDeviceLists = {
usersSignedDeviceLists: usersDeviceLists,
usersDevicesPlatformDetails: rawPayloads.usersDevicesPlatformDetails,
};
return assertWithValidator(peersDeviceLists, peersDeviceListsValidator);
},
updateDeviceList: async (newDeviceList: SignedDeviceList) => {
const {
deviceID: authDeviceID,
userID,
accessToken: authAccessToken,
} = await getAuthMetadata();
const payload = JSON.stringify(newDeviceList);
await commRustModule.updateDeviceList(
userID,
authDeviceID,
authAccessToken,
payload,
);
},
syncPlatformDetails: async () => {
const {
deviceID: authDeviceID,
userID,
accessToken: authAccessToken,
} = await getAuthMetadata();
await commRustModule.syncPlatformDetails(
userID,
authDeviceID,
authAccessToken,
);
},
getFarcasterUsers: async (farcasterIDs: $ReadOnlyArray<string>) => {
const farcasterUsersJSONString =
await commRustModule.getFarcasterUsers(farcasterIDs);
const farcasterUsers = JSON.parse(farcasterUsersJSONString);
return assertWithValidator(farcasterUsers, farcasterUsersValidator);
},
linkFarcasterAccount: async (farcasterID: string) => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.linkFarcasterAccount(
userID,
deviceID,
token,
farcasterID,
);
},
unlinkFarcasterAccount: async () => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.unlinkFarcasterAccount(userID, deviceID, token);
},
findUserIdentities: async (userIDs: $ReadOnlyArray<string>) => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
const result = await commRustModule.findUserIdentities(
userID,
deviceID,
token,
userIDs,
);
return assertWithValidator(
JSON.parse(result),
userIdentitiesResponseValidator,
);
},
versionSupported: () => {
return commRustModule.versionSupported();
},
changePassword: async (oldPassword: string, newPassword: string) => {
const {
deviceID,
userID,
accessToken: token,
} = await getAuthMetadata();
return commRustModule.updatePassword(
userID,
deviceID,
token,
oldPassword,
newPassword,
);
},
}),
[getAuthMetadata],
);
const value = React.useMemo(
() => ({
identityClient: client,
getAuthMetadata,
}),
[client, getAuthMetadata],
);
return (
<IdentityClientContext.Provider value={value}>
{children}
</IdentityClientContext.Provider>
);
}
export default IdentityServiceContextProvider;
diff --git a/native/native_rust_library/src/identity/login.rs b/native/native_rust_library/src/identity/login.rs
index 48afe7374..8d9ac900e 100644
--- a/native/native_rust_library/src/identity/login.rs
+++ b/native/native_rust_library/src/identity/login.rs
@@ -1,336 +1,340 @@
use comm_opaque2::client::Login;
use grpc_clients::identity::{
get_unauthenticated_client,
protos::unauth::{
DeviceKeyUpload, ExistingDeviceLoginRequest, IdentityKeyInfo,
OpaqueLoginFinishRequest, OpaqueLoginStartRequest, Prekey,
RestoreUserRequest, SecondaryDeviceKeysUploadRequest, WalletAuthRequest,
},
};
use tracing::instrument;
use super::{
IdentityAuthResult, LogInPasswordUserInfo, LogInWalletUserInfo,
RestoreUserInfo, PLATFORM_METADATA,
};
use crate::utils::jsi_callbacks::handle_string_result_as_callback;
use crate::{Error, DEVICE_TYPE, IDENTITY_SOCKET_ADDR, RUNTIME};
#[allow(clippy::too_many_arguments)]
pub mod ffi {
use crate::identity::{
DeviceKeys, LogInPasswordUserInfo, LogInWalletUserInfo,
};
use super::*;
#[instrument]
pub fn log_in_password_user(
username: String,
password: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
+ content_one_time_keys: Vec<String>,
+ notif_one_time_keys: Vec<String>,
promise_id: u32,
) {
RUNTIME.spawn(async move {
let password_user_info = LogInPasswordUserInfo {
username,
password,
device_keys: DeviceKeys {
key_payload,
key_payload_signature,
content_prekey,
content_prekey_signature,
notif_prekey,
notif_prekey_signature,
- content_one_time_keys: Vec::new(),
- notif_one_time_keys: Vec::new(),
+ content_one_time_keys,
+ notif_one_time_keys,
},
};
let result = log_in_password_user_helper(password_user_info).await;
handle_string_result_as_callback(result, promise_id);
});
}
#[instrument]
pub fn log_in_wallet_user(
siwe_message: String,
siwe_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
+ content_one_time_keys: Vec<String>,
+ notif_one_time_keys: Vec<String>,
promise_id: u32,
) {
RUNTIME.spawn(async move {
let wallet_user_info = LogInWalletUserInfo {
siwe_message,
siwe_signature,
device_keys: DeviceKeys {
key_payload,
key_payload_signature,
content_prekey,
content_prekey_signature,
notif_prekey,
notif_prekey_signature,
- content_one_time_keys: Vec::new(),
- notif_one_time_keys: Vec::new(),
+ content_one_time_keys,
+ notif_one_time_keys,
},
};
let result = log_in_wallet_user_helper(wallet_user_info).await;
handle_string_result_as_callback(result, promise_id);
});
}
// Primary device restore
#[instrument]
pub fn restore_user(
user_id: String,
siwe_message: String,
siwe_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
device_list: String,
promise_id: u32,
) {
RUNTIME.spawn(async move {
let siwe_message = Some(siwe_message).filter(|it| !it.is_empty());
let siwe_signature = Some(siwe_signature).filter(|it| !it.is_empty());
let restored_user_info = RestoreUserInfo {
user_id,
siwe_message,
siwe_signature,
device_list,
device_keys: DeviceKeys {
key_payload,
key_payload_signature,
content_prekey,
content_prekey_signature,
notif_prekey,
notif_prekey_signature,
content_one_time_keys,
notif_one_time_keys,
},
};
let result = restore_user_helper(restored_user_info).await;
handle_string_result_as_callback(result, promise_id);
});
}
// QR code device log in
pub fn upload_secondary_device_keys_and_log_in(
user_id: String,
nonce: String,
nonce_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
promise_id: u32,
) {
RUNTIME.spawn(async move {
let device_key_upload = DeviceKeyUpload {
device_key_info: Some(IdentityKeyInfo {
payload: key_payload,
payload_signature: key_payload_signature,
}),
content_upload: Some(Prekey {
prekey: content_prekey,
prekey_signature: content_prekey_signature,
}),
notif_upload: Some(Prekey {
prekey: notif_prekey,
prekey_signature: notif_prekey_signature,
}),
one_time_content_prekeys: content_one_time_keys,
one_time_notif_prekeys: notif_one_time_keys,
device_type: DEVICE_TYPE.into(),
};
let result = upload_secondary_device_keys_and_log_in_helper(
user_id,
nonce,
nonce_signature,
device_key_upload,
)
.await;
handle_string_result_as_callback(result, promise_id);
});
}
pub fn log_in_existing_device(
user_id: String,
device_id: String,
nonce: String,
nonce_signature: String,
promise_id: u32,
) {
RUNTIME.spawn(async move {
let result = log_in_existing_device_helper(
user_id,
device_id,
nonce,
nonce_signature,
)
.await;
handle_string_result_as_callback(result, promise_id);
});
}
}
async fn log_in_password_user_helper(
password_user_info: LogInPasswordUserInfo,
) -> Result<String, Error> {
let mut client_login = Login::new();
let opaque_login_request = client_login
.start(&password_user_info.password)
.map_err(crate::handle_error)?;
let login_start_request = OpaqueLoginStartRequest {
opaque_login_request,
username: password_user_info.username,
device_key_upload: Some(password_user_info.device_keys.into()),
force: None,
};
let mut identity_client =
get_unauthenticated_client(IDENTITY_SOCKET_ADDR, PLATFORM_METADATA.clone())
.await?;
let response = identity_client
.log_in_password_user_start(login_start_request)
.await?;
let login_start_response = response.into_inner();
let opaque_login_upload = client_login
.finish(&login_start_response.opaque_login_response)
.map_err(crate::handle_error)?;
let login_finish_request = OpaqueLoginFinishRequest {
session_id: login_start_response.session_id,
opaque_login_upload,
};
let login_finish_response = identity_client
.log_in_password_user_finish(login_finish_request)
.await?
.into_inner();
let auth_result = IdentityAuthResult::from(login_finish_response);
Ok(serde_json::to_string(&auth_result)?)
}
async fn log_in_wallet_user_helper(
wallet_user_info: LogInWalletUserInfo,
) -> Result<String, Error> {
let login_request = WalletAuthRequest {
siwe_message: wallet_user_info.siwe_message,
siwe_signature: wallet_user_info.siwe_signature,
device_key_upload: Some(wallet_user_info.device_keys.into()),
farcaster_id: None,
initial_device_list: "".to_string(),
};
let mut identity_client =
get_unauthenticated_client(IDENTITY_SOCKET_ADDR, PLATFORM_METADATA.clone())
.await?;
let login_response = identity_client
.log_in_wallet_user(login_request)
.await?
.into_inner();
let auth_result = IdentityAuthResult::from(login_response);
Ok(serde_json::to_string(&auth_result)?)
}
async fn restore_user_helper(
wallet_user_info: RestoreUserInfo,
) -> Result<String, Error> {
let restore_request = RestoreUserRequest {
user_id: wallet_user_info.user_id,
siwe_message: wallet_user_info.siwe_message,
siwe_signature: wallet_user_info.siwe_signature,
device_list: wallet_user_info.device_list,
device_key_upload: Some(wallet_user_info.device_keys.into()),
};
let mut identity_client =
get_unauthenticated_client(IDENTITY_SOCKET_ADDR, PLATFORM_METADATA.clone())
.await?;
let auth_response = identity_client
.restore_user(restore_request)
.await?
.into_inner();
let auth_result = IdentityAuthResult::from(auth_response);
Ok(serde_json::to_string(&auth_result)?)
}
async fn upload_secondary_device_keys_and_log_in_helper(
user_id: String,
nonce: String,
nonce_signature: String,
device_key_upload: DeviceKeyUpload,
) -> Result<String, Error> {
let mut identity_client =
get_unauthenticated_client(IDENTITY_SOCKET_ADDR, PLATFORM_METADATA.clone())
.await?;
let request = SecondaryDeviceKeysUploadRequest {
user_id,
nonce,
nonce_signature,
device_key_upload: Some(device_key_upload),
};
let response = identity_client
.upload_keys_for_registered_device_and_log_in(request)
.await?
.into_inner();
let auth_result = IdentityAuthResult::from(response);
Ok(serde_json::to_string(&auth_result)?)
}
async fn log_in_existing_device_helper(
user_id: String,
device_id: String,
nonce: String,
nonce_signature: String,
) -> Result<String, Error> {
let mut identity_client =
get_unauthenticated_client(IDENTITY_SOCKET_ADDR, PLATFORM_METADATA.clone())
.await?;
let request = ExistingDeviceLoginRequest {
user_id,
device_id,
nonce,
nonce_signature,
};
let response = identity_client
.log_in_existing_device(request)
.await?
.into_inner();
let auth_result = IdentityAuthResult::from(response);
Ok(serde_json::to_string(&auth_result)?)
}
diff --git a/native/native_rust_library/src/lib.rs b/native/native_rust_library/src/lib.rs
index 7abd445d2..8696ee290 100644
--- a/native/native_rust_library/src/lib.rs
+++ b/native/native_rust_library/src/lib.rs
@@ -1,553 +1,557 @@
use comm_opaque2::grpc::opaque_error_to_grpc_status as handle_error;
use grpc_clients::identity::protos::unauth::DeviceType;
use lazy_static::lazy_static;
use std::sync::Arc;
use tokio::runtime::{Builder, Runtime};
use tonic::Status;
mod argon2_tools;
mod backup;
mod constants;
mod identity;
mod utils;
use crate::argon2_tools::compute_backup_key_str;
use crate::utils::jsi_callbacks::{
handle_string_result_as_callback, handle_void_result_as_callback,
};
mod generated {
// We get the CODE_VERSION from this generated file
include!(concat!(env!("OUT_DIR"), "/version.rs"));
// We get the IDENTITY_SOCKET_ADDR from this generated file
include!(concat!(env!("OUT_DIR"), "/socket_config.rs"));
}
pub use generated::CODE_VERSION;
pub use generated::{BACKUP_SOCKET_ADDR, IDENTITY_SOCKET_ADDR};
#[cfg(not(target_os = "android"))]
pub const DEVICE_TYPE: DeviceType = DeviceType::Ios;
#[cfg(target_os = "android")]
pub const DEVICE_TYPE: DeviceType = DeviceType::Android;
lazy_static! {
static ref RUNTIME: Arc<Runtime> =
Arc::new(Builder::new_multi_thread().enable_all().build().unwrap());
}
// ffi uses
use backup::ffi::*;
use identity::ffi::*;
use utils::future_manager::ffi::*;
#[allow(clippy::too_many_arguments)]
#[cxx::bridge]
mod ffi {
// Identity Service APIs
extern "Rust" {
#[cxx_name = "identityRegisterPasswordUser"]
fn register_password_user(
username: String,
password: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
farcaster_id: String,
initial_device_list: String,
promise_id: u32,
);
#[cxx_name = "identityRegisterReservedPasswordUser"]
fn register_reserved_password_user(
username: String,
password: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
keyserver_message: String,
keyserver_signature: String,
initial_device_list: String,
promise_id: u32,
);
#[cxx_name = "identityLogInPasswordUser"]
fn log_in_password_user(
username: String,
password: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
+ content_one_time_keys: Vec<String>,
+ notif_one_time_keys: Vec<String>,
promise_id: u32,
);
#[cxx_name = "identityRegisterWalletUser"]
fn register_wallet_user(
siwe_message: String,
siwe_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
farcaster_id: String,
initial_device_list: String,
promise_id: u32,
);
#[cxx_name = "identityLogInWalletUser"]
fn log_in_wallet_user(
siwe_message: String,
siwe_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
+ content_one_time_keys: Vec<String>,
+ notif_one_time_keys: Vec<String>,
promise_id: u32,
);
#[cxx_name = "identityRestoreUser"]
fn restore_user(
user_id: String,
siwe_message: String,
siwe_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
device_list: String,
promise_id: u32,
);
#[cxx_name = "identityUpdateUserPassword"]
fn update_user_password(
user_id: String,
device_id: String,
access_token: String,
old_password: String,
new_password: String,
promise_id: u32,
);
#[cxx_name = "identityDeleteWalletUser"]
fn delete_wallet_user(
user_id: String,
device_id: String,
access_token: String,
promise_id: u32,
);
#[cxx_name = "identityDeletePasswordUser"]
fn delete_password_user(
user_id: String,
device_id: String,
access_token: String,
password: String,
promise_id: u32,
);
#[cxx_name = "identityLogOut"]
fn log_out(
user_id: String,
device_id: String,
access_token: String,
promise_id: u32,
);
#[cxx_name = "identityLogOutPrimaryDevice"]
fn log_out_primary_device(
user_id: String,
device_id: String,
access_token: String,
signed_device_list: String,
promise_id: u32,
);
#[cxx_name = "identityLogOutSecondaryDevice"]
fn log_out_secondary_device(
user_id: String,
device_id: String,
access_token: String,
promise_id: u32,
);
#[cxx_name = "identityGetOutboundKeysForUser"]
fn get_outbound_keys_for_user(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
user_id: String,
promise_id: u32,
);
#[cxx_name = "identityGetInboundKeysForUser"]
fn get_inbound_keys_for_user(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
user_id: String,
promise_id: u32,
);
#[cxx_name = "identityRefreshUserPrekeys"]
fn refresh_user_prekeys(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
promise_id: u32,
);
#[cxx_name = "identityGenerateNonce"]
fn generate_nonce(promise_id: u32);
#[cxx_name = "identityVersionSupported"]
fn version_supported(promise_id: u32);
#[cxx_name = "identityUploadOneTimeKeys"]
fn upload_one_time_keys(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
promise_id: u32,
);
#[cxx_name = "identityGetKeyserverKeys"]
fn get_keyserver_keys(
user_id: String,
device_id: String,
access_token: String,
keyserver_id: String,
promise_id: u32,
);
#[cxx_name = "identityGetDeviceListForUser"]
fn get_device_list_for_user(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
user_id: String,
since_timestamp: i64,
promise_id: u32,
);
#[cxx_name = "identityGetDeviceListsForUsers"]
fn get_device_lists_for_users(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
user_ids: Vec<String>,
promise_id: u32,
);
#[cxx_name = "identityUpdateDeviceList"]
fn update_device_list(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
update_payload: String,
promise_id: u32,
);
#[cxx_name = "identitySyncPlatformDetails"]
fn sync_platform_details(
auth_user_id: String,
auth_device_id: String,
auth_access_token: String,
promise_id: u32,
);
#[cxx_name = "identityUploadSecondaryDeviceKeysAndLogIn"]
fn upload_secondary_device_keys_and_log_in(
user_id: String,
nonce: String,
nonce_signature: String,
key_payload: String,
key_payload_signature: String,
content_prekey: String,
content_prekey_signature: String,
notif_prekey: String,
notif_prekey_signature: String,
content_one_time_keys: Vec<String>,
notif_one_time_keys: Vec<String>,
promise_id: u32,
);
#[cxx_name = "identityLogInExistingDevice"]
fn log_in_existing_device(
user_id: String,
device_id: String,
nonce: String,
nonce_signature: String,
promise_id: u32,
);
#[cxx_name = "identityFindUserIDForWalletAddress"]
fn find_user_id_for_wallet_address(wallet_address: String, promise_id: u32);
#[cxx_name = "identityFindUserIDForUsername"]
fn find_user_id_for_username(username: String, promise_id: u32);
// Farcaster
#[cxx_name = "identityGetFarcasterUsers"]
fn get_farcaster_users(farcaster_ids: Vec<String>, promise_id: u32);
#[cxx_name = "identityLinkFarcasterAccount"]
fn link_farcaster_account(
user_id: String,
device_id: String,
access_token: String,
farcaster_id: String,
promise_id: u32,
);
#[cxx_name = "identityUnlinkFarcasterAccount"]
fn unlink_farcaster_account(
user_id: String,
device_id: String,
access_token: String,
promise_id: u32,
);
#[cxx_name = "identityFindUserIdentities"]
fn find_user_identities(
user_id: String,
device_id: String,
access_token: String,
user_ids: Vec<String>,
promise_id: u32,
);
// Argon2
#[cxx_name = "compute_backup_key"]
fn compute_backup_key_str(
password: &str,
backup_id: &str,
) -> Result<[u8; 32]>;
}
unsafe extern "C++" {
include!("RustCallback.h");
#[namespace = "comm"]
#[cxx_name = "stringCallback"]
fn string_callback(error: String, promise_id: u32, ret: String);
#[namespace = "comm"]
#[cxx_name = "voidCallback"]
fn void_callback(error: String, promise_id: u32);
#[namespace = "comm"]
#[cxx_name = "boolCallback"]
fn bool_callback(error: String, promise_id: u32, ret: bool);
}
// AES cryptography
#[namespace = "comm"]
unsafe extern "C++" {
include!("RustAESCrypto.h");
#[allow(unused)]
#[cxx_name = "aesGenerateKey"]
fn generate_key(buffer: &mut [u8]) -> Result<()>;
/// The first two argument aren't mutated but creation of Java ByteBuffer
/// requires the underlying bytes to be mutable.
#[allow(unused)]
#[cxx_name = "aesEncrypt"]
fn encrypt(
key: &mut [u8],
plaintext: &mut [u8],
sealed_data: &mut [u8],
) -> Result<()>;
/// The first two argument aren't mutated but creation of Java ByteBuffer
/// requires the underlying bytes to be mutable.
#[allow(unused)]
#[cxx_name = "aesDecrypt"]
fn decrypt(
key: &mut [u8],
sealed_data: &mut [u8],
plaintext: &mut [u8],
) -> Result<()>;
}
// Comm Services Auth Metadata Emission
#[namespace = "comm"]
unsafe extern "C++" {
include!("RustCSAMetadataEmitter.h");
#[allow(unused)]
#[cxx_name = "sendAuthMetadataToJS"]
fn send_auth_metadata_to_js(
access_token: String,
user_id: String,
) -> Result<()>;
}
// Backup
extern "Rust" {
#[cxx_name = "startBackupHandler"]
fn start_backup_handler() -> Result<()>;
#[cxx_name = "stopBackupHandler"]
fn stop_backup_handler() -> Result<()>;
#[cxx_name = "triggerBackupFileUpload"]
fn trigger_backup_file_upload();
#[cxx_name = "createBackup"]
fn create_backup(
backup_id: String,
backup_secret: String,
pickle_key: String,
pickled_account: String,
siwe_backup_msg: String,
promise_id: u32,
);
#[cxx_name = "restoreBackup"]
fn restore_backup(
backup_secret: String,
backup_id: String,
max_version: String,
promise_id: u32,
);
#[cxx_name = "restoreBackupData"]
fn restore_backup_data(
backup_id: String,
backup_data_key: String,
backup_log_data_key: String,
max_version: String,
promise_id: u32,
);
#[cxx_name = "retrieveBackupKeys"]
fn retrieve_backup_keys(backup_secret: String, promise_id: u32);
#[cxx_name = "retrieveLatestSIWEBackupData"]
fn retrieve_latest_siwe_backup_data(promise_id: u32);
}
// Secure store
#[namespace = "comm"]
unsafe extern "C++" {
include!("RustSecureStore.h");
#[allow(unused)]
#[cxx_name = "secureStoreSet"]
fn secure_store_set(key: &str, value: String) -> Result<()>;
#[cxx_name = "secureStoreGet"]
fn secure_store_get(key: &str) -> Result<String>;
}
// C++ Backup creation
#[namespace = "comm"]
unsafe extern "C++" {
include!("RustBackupExecutor.h");
#[cxx_name = "getBackupDirectoryPath"]
fn get_backup_directory_path() -> Result<String>;
#[cxx_name = "getBackupFilePath"]
fn get_backup_file_path(
backup_id: &str,
is_attachments: bool,
) -> Result<String>;
#[cxx_name = "getBackupLogFilePath"]
fn get_backup_log_file_path(
backup_id: &str,
log_id: &str,
is_attachments: bool,
) -> Result<String>;
#[cxx_name = "getBackupUserKeysFilePath"]
fn get_backup_user_keys_file_path(backup_id: &str) -> Result<String>;
#[cxx_name = "getSIWEBackupMessagePath"]
fn get_siwe_backup_message_path(backup_id: &str) -> Result<String>;
#[cxx_name = "createMainCompaction"]
fn create_main_compaction(backup_id: &str, future_id: usize);
#[cxx_name = "restoreFromMainCompaction"]
fn restore_from_main_compaction(
main_compaction_path: &str,
main_compaction_encryption_key: &str,
max_version: &str,
future_id: usize,
);
#[cxx_name = "restoreFromBackupLog"]
fn restore_from_backup_log(backup_log: Vec<u8>, future_id: usize);
}
// Future handling from C++
extern "Rust" {
#[cxx_name = "resolveUnitFuture"]
fn resolve_unit_future(future_id: usize);
#[cxx_name = "rejectFuture"]
fn reject_future(future_id: usize, error: String);
}
}
#[derive(
Debug, derive_more::Display, derive_more::From, derive_more::Error,
)]
pub enum Error {
#[display(fmt = "{}", "_0.message()")]
TonicGRPC(Status),
#[display(fmt = "{}", "_0")]
SerdeJson(serde_json::Error),
#[display(fmt = "Missing response data")]
MissingResponseData,
#[display(fmt = "{}", "_0")]
GRPClient(grpc_clients::error::Error),
}
#[cfg(test)]
#[allow(clippy::assertions_on_constants)]
mod tests {
use super::{BACKUP_SOCKET_ADDR, CODE_VERSION, IDENTITY_SOCKET_ADDR};
#[test]
fn test_code_version_exists() {
assert!(CODE_VERSION > 0);
}
#[test]
fn test_identity_socket_addr_exists() {
assert!(!IDENTITY_SOCKET_ADDR.is_empty());
assert!(!BACKUP_SOCKET_ADDR.is_empty());
}
}
diff --git a/native/schema/CommRustModuleSchema.js b/native/schema/CommRustModuleSchema.js
index 024836238..238189434 100644
--- a/native/schema/CommRustModuleSchema.js
+++ b/native/schema/CommRustModuleSchema.js
@@ -1,214 +1,218 @@
// @flow
'use strict';
import { TurboModuleRegistry } from 'react-native';
import type { TurboModule } from 'react-native/Libraries/TurboModule/RCTExport.js';
export interface Spec extends TurboModule {
+generateNonce: () => Promise<string>;
+registerPasswordUser: (
username: string,
password: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
contentOneTimeKeys: $ReadOnlyArray<string>,
notifOneTimeKeys: $ReadOnlyArray<string>,
farcasterID: string,
initialDeviceList: string,
) => Promise<string>;
+registerReservedPasswordUser: (
username: string,
password: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
contentOneTimeKeys: $ReadOnlyArray<string>,
notifOneTimeKeys: $ReadOnlyArray<string>,
keyserverMessage: string,
keyserverSignature: string,
initialDeviceList: string,
) => Promise<string>;
+logInPasswordUser: (
username: string,
password: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
+ contentOneTimeKeys: $ReadOnlyArray<string>,
+ notifOneTimeKeys: $ReadOnlyArray<string>,
) => Promise<string>;
+registerWalletUser: (
siweMessage: string,
siweSignature: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
contentOneTimeKeys: $ReadOnlyArray<string>,
notifOneTimeKeys: $ReadOnlyArray<string>,
farcasterID: string,
initialDeviceList: string,
) => Promise<string>;
+logInWalletUser: (
siweMessage: string,
siweSignature: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
+ contentOneTimeKeys: $ReadOnlyArray<string>,
+ notifOneTimeKeys: $ReadOnlyArray<string>,
) => Promise<string>;
+restoreUser: (
userID: string,
siweMessage: ?string,
siweSignature: ?string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
contentOneTimeKeys: $ReadOnlyArray<string>,
notifOneTimeKeys: $ReadOnlyArray<string>,
deviceList: string,
) => Promise<string>;
+updatePassword: (
userID: string,
deviceID: string,
accessToken: string,
oldPassword: string,
newPassword: string,
) => Promise<void>;
+deletePasswordUser: (
userID: string,
deviceID: string,
accessToken: string,
password: string,
) => Promise<void>;
+deleteWalletUser: (
userID: string,
deviceID: string,
accessToken: string,
) => Promise<void>;
+logOut: (
userID: string,
deviceID: string,
accessToken: string,
) => Promise<void>;
+logOutPrimaryDevice: (
userID: string,
deviceID: string,
accessToken: string,
signedDeviceList: string,
) => Promise<void>;
+logOutSecondaryDevice: (
userID: string,
deviceID: string,
accessToken: string,
) => Promise<void>;
+getOutboundKeysForUser: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
userID: string,
) => Promise<string>;
+getInboundKeysForUser: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
userID: string,
) => Promise<string>;
+versionSupported: () => Promise<boolean>;
+uploadOneTimeKeys: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
contentOneTimePreKeys: $ReadOnlyArray<string>,
notifOneTimePreKeys: $ReadOnlyArray<string>,
) => Promise<void>;
+getKeyserverKeys: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
keyserverID: string,
) => Promise<string>;
+getDeviceListForUser: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
userID: string,
sinceTimestamp: ?number,
) => Promise<string>;
+getDeviceListsForUsers: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
userIDs: $ReadOnlyArray<string>,
) => Promise<string>;
+updateDeviceList: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
updatePayload: string,
) => Promise<void>;
+syncPlatformDetails: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
) => Promise<void>;
+uploadSecondaryDeviceKeysAndLogIn: (
userID: string,
nonce: string,
nonceSignature: string,
keyPayload: string,
keyPayloadSignature: string,
contentPrekey: string,
contentPrekeySignature: string,
notifPrekey: string,
notifPrekeySignature: string,
contentOneTimeKeys: $ReadOnlyArray<string>,
notifOneTimeKeys: $ReadOnlyArray<string>,
) => Promise<string>;
+logInExistingDevice: (
userID: string,
deviceID: string,
nonce: string,
nonceSignature: string,
) => Promise<string>;
+findUserIDForWalletAddress: (walletAddress: string) => Promise<string>;
+findUserIDForUsername: (username: string) => Promise<string>;
+getFarcasterUsers: (farcasterIDs: $ReadOnlyArray<string>) => Promise<string>;
+linkFarcasterAccount: (
userID: string,
deviceID: string,
accessToken: string,
farcasterID: string,
) => Promise<void>;
+unlinkFarcasterAccount: (
userID: string,
deviceID: string,
accessToken: string,
) => Promise<void>;
+findUserIdentities: (
authUserID: string,
authDeviceID: string,
authAccessToken: string,
userIDs: $ReadOnlyArray<string>,
) => Promise<string>;
}
export default (TurboModuleRegistry.getEnforcing<Spec>(
'CommRustTurboModule',
): Spec);
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Dec 23, 8:49 AM (16 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2690665
Default Alt Text
(149 KB)
Attached To
Mode
rCOMM Comm
Attached
Detach File
Event Timeline
Log In to Comment