Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions include/pro/types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,12 @@ struct toJs_impl<session::DecodedPro> {
Napi::Object operator()(const Napi::Env& env, const session::DecodedPro decoded_pro) {
auto obj = Napi::Object::New(env);

obj["proStatus"] =
toJs(env,
decoded_pro.status == ProStatus::InvalidProBackendSig ? "InvalidProBackendSig"
: decoded_pro.status == ProStatus::InvalidUserSig ? "InvalidUserSig"
: "Valid");
obj["proStatus"] = toJs(
env,
decoded_pro.status == ProStatus::Valid || decoded_pro.status == ProStatus::Expired
? "ValidOrExpired"
: decoded_pro.status == ProStatus::InvalidProBackendSig ? "InvalidProBackendSig"
: "InvalidUserSig");
obj["proProof"] = toJs(env, decoded_pro.proof);
obj["proProfileBitset"] = proProfileBitsetToJS(env, decoded_pro.profile_bitset);
obj["proMessageBitset"] = proMessageBitsetToJS(env, decoded_pro.msg_bitset);
Expand Down
2 changes: 2 additions & 0 deletions include/user_config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ class UserConfigWrapper : public ConfigBaseImpl, public Napi::ObjectWrap<UserCon
void setProConfig(const Napi::CallbackInfo& info);
Napi::Value removeProConfig(const Napi::CallbackInfo& info);

Napi::Value getProAccessExpiry(const Napi::CallbackInfo& info);
Napi::Value getProProfileBitset(const Napi::CallbackInfo& info);
void setProBadge(const Napi::CallbackInfo& info);
void setAnimatedAvatar(const Napi::CallbackInfo& info);
void setProAccessExpiry(const Napi::CallbackInfo& info);

Napi::Value generateProMasterKey(const Napi::CallbackInfo& info);
Napi::Value generateRotatingPrivKeyHex(const Napi::CallbackInfo& info);
Expand Down
22 changes: 22 additions & 0 deletions include/utilities.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <vector>

#include "oxen/log/catlogger.hpp"
#include "oxenc/base64.h"
#include "oxenc/hex.h"
#include "session/config/namespaces.hpp"
#include "session/config/profile_pic.hpp"
Expand Down Expand Up @@ -43,6 +44,7 @@ void assertInfoMinLength(const Napi::CallbackInfo& info, const int minLength);

void assertIsStringOrNull(const Napi::Value& value, const std::string& identifier = "");
void assertIsNumber(const Napi::Value& value, const std::string& identifier);
void assertIsNumberOrNull(const Napi::Value& val, const std::string& identifier);
void assertIsBigint(const Napi::Value& val, const std::string& identifier);
void assertIsArray(const Napi::Value& value, const std::string& identifier);
void assertIsObject(const Napi::Value& value);
Expand Down Expand Up @@ -80,10 +82,15 @@ int64_t toCppInteger(Napi::Value x, const std::string& identifier, bool allowUnd
int64_t toCppIntegerB(Napi::Value x, const std::string& identifier, bool allowUndefined = false);

std::optional<int64_t> maybeNonemptyInt(Napi::Value x, const std::string& identifier);
std::optional<int64_t> maybeNonemptyIntB(Napi::Value x, const std::string& identifier);

std::optional<bool> maybeNonemptyBoolean(Napi::Value x, const std::string& identifier);
std::optional<std::chrono::sys_seconds> maybeNonemptySysSeconds(
Napi::Value x, const std::string& identifier);

std::optional<std::chrono::sys_time<std::chrono::milliseconds>> maybeNonemptyTimeMs(
Napi::Value x, const std::string& identifier);

std::chrono::sys_seconds toCppSysSeconds(Napi::Value x, const std::string& identifier);
std::chrono::sys_time<std::chrono::milliseconds> toCppSysMs(
Napi::Value x, const std::string& identifier);
Expand Down Expand Up @@ -425,6 +432,21 @@ std::array<uint8_t, N> from_hex_to_array(std::string x) {
return result;
}

template <std::size_t N>
std::array<uint8_t, N> from_base64_to_array(std::string x) {
std::string as_b64 = oxenc::from_base64(x);
if (as_b64.size() != N) {
throw std::invalid_argument(fmt::format(
"from_base64_to_array: Decoded v64 size mismatch: expected {}, got {}",
N,
as_b64.size()));
}

std::array<uint8_t, N> result;
std::memcpy(result.data(), as_b64.data(), N);
return result;
}

std::vector<unsigned char> from_hex_to_vector(std::string_view x);

std::span<const uint8_t> from_base64_to_span(std::string_view x);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"main": "index.js",
"name": "libsession_util_nodejs",
"description": "Wrappers for the Session Util Library",
"version": "0.6.5",
"version": "0.6.6",
"license": "GPL-3.0",
"author": {
"name": "Oxen Project",
Expand Down
11 changes: 6 additions & 5 deletions src/constants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "session/config/groups/info.hpp"
#include "session/config/user_groups.hpp"
#include "session/pro_backend.h"
#include "session/session_protocol.h"
#include "session/version.h"
#include "utilities.hpp"
#include "version.h"
Expand All @@ -17,11 +18,11 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
const char* class_name = "CONSTANTS";

auto pro_urls = Napi::Object::New(env);
pro_urls["roadmap"] = toJs(env, SESSION_PRO_URLS.roadmap);
pro_urls["privacy_policy"] = toJs(env, SESSION_PRO_URLS.privacy_policy);
pro_urls["terms_of_service"] = toJs(env, SESSION_PRO_URLS.terms_of_service);
pro_urls["pro_access_not_found"] = toJs(env, SESSION_PRO_URLS.pro_access_not_found);
pro_urls["support_url"] = toJs(env, SESSION_PRO_URLS.support_url);
pro_urls["roadmap"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_pro_roadmap);
pro_urls["privacy_policy"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_privacy_policy);
pro_urls["terms_of_service"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_terms_of_service);
pro_urls["pro_access_not_found"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_pro_access_not_found);
pro_urls["support_url"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_pro_support);

auto pro_provider_nil = Napi::Object::New(env);
pro_provider_nil["device"] = toJs(
Expand Down
7 changes: 7 additions & 0 deletions src/contacts_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "profile_pic.hpp"
#include "session/config/expiring.hpp"
#include "session/types.hpp"
#include "utilities.hpp"

namespace session::nodeapi {

Expand Down Expand Up @@ -51,6 +52,7 @@ struct toJs_impl<contact_info> {
obj["expirationMode"] = toJs(env, expiration_mode_string(contact.exp_mode));
obj["expirationTimerSeconds"] = toJs(env, contact.exp_timer.count());
obj["profilePicture"] = toJs(env, contact.profile_picture);
obj["proProfileBitset"] = proProfileBitsetToJS(env, contact.profile_bitset);

return obj;
}
Expand Down Expand Up @@ -160,6 +162,11 @@ void ContactsConfigWrapper::set(const Napi::CallbackInfo& info) {
contact.profile_picture.clear();
}

if (auto proProfileBitset = maybeNonemptyIntB(
obj.Get("proProfileBitset"), "ContactsConfigWrapper.set proProfileBitset")) {
contact.profile_bitset.data = *proProfileBitset;
}

config.set(contact);
});
}
Expand Down
Loading