Skip to content

Commit d220c9a

Browse files
committed
fix: use extradata for proconfig & features
1 parent d44a967 commit d220c9a

File tree

11 files changed

+72
-80
lines changed

11 files changed

+72
-80
lines changed

include/pro/pro.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_PROVIDER v);
2020
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_STATUS v);
2121
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PLAN v);
2222
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v);
23-
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT v);
23+
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT v);
2424
std::string_view proBackendEnumToString(session::ProFeaturesForMsgStatus v);
2525

2626
template <typename T>
@@ -193,7 +193,7 @@ class ProWrapper : public Napi::ObjectWrap<ProWrapper> {
193193
auto master_privkey_decoded = from_hex(master_privkey);
194194
auto rotating_privkey_decoded = from_hex(rotating_privkey);
195195

196-
std::string json = pro_backend::GetProProofRequest::build_to_json(
196+
std::string json = pro_backend::GenerateProProofRequest::build_to_json(
197197
static_cast<uint8_t>(requestVersion.Int32Value()),
198198
to_span(master_privkey_decoded),
199199
to_span(rotating_privkey_decoded),
@@ -267,7 +267,7 @@ class ProWrapper : public Napi::ObjectWrap<ProWrapper> {
267267

268268
auto master_privkey_decoded = from_hex(master_privkey);
269269

270-
auto json = pro_backend::GetProStatusRequest::build_to_json(
270+
auto json = pro_backend::GetProDetailsRequest::build_to_json(
271271
static_cast<uint8_t>(requestVersion.Int32Value()),
272272
to_span(master_privkey_decoded),
273273
unix_ts_ms,

include/pro/types.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ struct toJs_impl<session::Envelope> {
4444

4545
obj["timestampMs"] = toJs(env, envelope.timestamp.count());
4646
obj["source"] = envelope.source.size() ? toJs(env, envelope.source) : env.Null();
47-
obj["proSigHex"] =
48-
envelope.pro_sig.size() ? toJs(env, oxenc::to_hex(envelope.pro_sig)) : env.Null();
4947

5048
return obj;
5149
}
@@ -75,8 +73,7 @@ struct toJs_impl<session::DecodedPro> {
7573
toJs(env,
7674
decoded_pro.status == ProStatus::InvalidProBackendSig ? "InvalidProBackendSig"
7775
: decoded_pro.status == ProStatus::InvalidUserSig ? "InvalidUserSig"
78-
: decoded_pro.status == ProStatus::Valid ? "Valid"
79-
: "Expired");
76+
: "Valid");
8077
obj["proProof"] = toJs(env, decoded_pro.proof);
8178
obj["proFeaturesBitset"] = proFeaturesToJsBitset(env, decoded_pro.features);
8279

include/user_config.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ class UserConfigWrapper : public ConfigBaseImpl, public Napi::ObjectWrap<UserCon
1616
explicit UserConfigWrapper(const Napi::CallbackInfo& info);
1717

1818
private:
19-
// FIXME: wrap those in the extra data field of UserConfig instead
20-
std::optional<config::ProConfig> pro_config;
21-
int64_t pro_user_features = 0;
22-
2319
config::UserProfile& config{get_config<config::UserProfile>()};
2420

2521
Napi::Value getPriority(const Napi::CallbackInfo& info);
@@ -42,8 +38,11 @@ class UserConfigWrapper : public ConfigBaseImpl, public Napi::ObjectWrap<UserCon
4238

4339
Napi::Value getProConfig(const Napi::CallbackInfo& info);
4440
void setProConfig(const Napi::CallbackInfo& info);
41+
Napi::Value removeProConfig(const Napi::CallbackInfo& info);
42+
4543
Napi::Value getProFeaturesBitset(const Napi::CallbackInfo& info);
46-
void setProFeaturesBitset(const Napi::CallbackInfo& info);
44+
void setProBadge(const Napi::CallbackInfo& info);
45+
void setAnimatedAvatar(const Napi::CallbackInfo& info);
4746

4847
Napi::Value generateProMasterKey(const Napi::CallbackInfo& info);
4948
Napi::Value generateRotatingPrivKeyHex(const Napi::CallbackInfo& info);

src/constants.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
4040
env,
4141
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
4242
.platform_account);
43-
pro_provider_nil["refund_url"] = toJs(
43+
pro_provider_nil["refund_support_url"] = toJs(
4444
env,
4545
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
46-
.refund_url);
47-
pro_provider_nil["refund_after_platform_deadline_url"] = toJs(
46+
.refund_support_url);
47+
pro_provider_nil["refund_platform_url"] = toJs(
4848
env,
4949
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
50-
.refund_after_platform_deadline_url);
50+
.refund_platform_url);
5151
pro_provider_nil["update_subscription_url"] = toJs(
5252
env,
5353
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
@@ -82,16 +82,16 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
8282
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
8383
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
8484
.platform_account);
85-
pro_provider_google["refund_url"] =
85+
pro_provider_google["refund_support_url"] =
8686
toJs(env,
8787
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
8888
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
89-
.refund_url);
90-
pro_provider_google["refund_after_platform_deadline_url"] =
89+
.refund_support_url);
90+
pro_provider_google["refund_platform_url"] =
9191
toJs(env,
9292
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
9393
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
94-
.refund_after_platform_deadline_url);
94+
.refund_platform_url);
9595
pro_provider_google["update_subscription_url"] =
9696
toJs(env,
9797
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
@@ -129,16 +129,16 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
129129
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
130130
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
131131
.platform_account);
132-
pro_provider_ios["refund_url"] =
132+
pro_provider_ios["refund_support_url"] =
133133
toJs(env,
134134
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
135135
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
136-
.refund_url);
137-
pro_provider_ios["refund_after_platform_deadline_url"] =
136+
.refund_support_url);
137+
pro_provider_ios["refund_platform_url"] =
138138
toJs(env,
139139
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
140140
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
141-
.refund_after_platform_deadline_url);
141+
.refund_platform_url);
142142
pro_provider_ios["update_subscription_url"] =
143143
toJs(env,
144144
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA

src/encrypt_decrypt/encrypt_decrypt.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,9 +661,6 @@ Napi::Value MultiEncryptWrapper::decryptForCommunity(const Napi::CallbackInfo& i
661661
to_insert.Set("contentPlaintextUnpadded", toJs(info.Env(), d.content_plaintext));
662662
to_insert.Set("serverId", toJs(info.Env(), decryptedServerIds[i]));
663663

664-
to_insert.Set(
665-
"proSigHex",
666-
d.pro_sig ? toJs(info.Env(), oxenc::to_hex(*d.pro_sig)) : info.Env().Null());
667664
to_insert.Set("decodedPro", d.pro ? toJs(info.Env(), d.pro) : info.Env().Null());
668665

669666
ret.Set(i, to_insert);

src/pro/pro.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v) {
4949
UNREACHABLE();
5050
}
5151

52-
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT v) {
52+
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT v) {
5353
switch (v) {
54-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_SUCCESS: return "SUCCESS";
55-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_GENERIC_ERROR: return "GENERIC_ERROR";
56-
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT:
57-
throw std::invalid_argument("SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT");
54+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_SUCCESS: return "SUCCESS";
55+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_GENERIC_ERROR: return "GENERIC_ERROR";
56+
case SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT_COUNT:
57+
throw std::invalid_argument("SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT");
5858
}
5959
UNREACHABLE();
6060
}

src/user_config.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22

33
#include <napi.h>
44

5-
#include <iostream>
6-
75
#include "base_config.hpp"
8-
#include "oxen/log.hpp"
96
#include "oxenc/hex.h"
107
#include "pro/types.hpp"
118
#include "profile_pic.hpp"
12-
#include "session/config/base.hpp"
139
#include "session/config/user_profile.hpp"
1410
#include "session/ed25519.hpp"
1511
#include "utilities.hpp"
@@ -107,8 +103,9 @@ void UserConfigWrapper::Init(Napi::Env env, Napi::Object exports) {
107103
InstanceMethod("setNoteToSelfExpiry", &UserConfigWrapper::setNoteToSelfExpiry),
108104
InstanceMethod("getProConfig", &UserConfigWrapper::getProConfig),
109105
InstanceMethod("setProConfig", &UserConfigWrapper::setProConfig),
110-
InstanceMethod(
111-
"setProFeaturesBitset", &UserConfigWrapper::setProFeaturesBitset),
106+
InstanceMethod("removeProConfig", &UserConfigWrapper::removeProConfig),
107+
InstanceMethod("setProBadge", &UserConfigWrapper::setProBadge),
108+
InstanceMethod("setAnimatedAvatar", &UserConfigWrapper::setAnimatedAvatar),
112109
InstanceMethod(
113110
"getProFeaturesBitset", &UserConfigWrapper::getProFeaturesBitset),
114111
InstanceMethod(
@@ -266,11 +263,8 @@ void UserConfigWrapper::setNoteToSelfExpiry(const Napi::CallbackInfo& info) {
266263

267264
Napi::Value UserConfigWrapper::getProConfig(const Napi::CallbackInfo& info) {
268265
return wrapResult(info, [&] {
269-
// TODO fixme once extra_data is implemented
270-
271-
oxen::log::warning(cat, "getProConfig() is not wrapped to libsession");
272-
if (this->pro_config.has_value()) {
273-
return toJs(info.Env(), this->pro_config);
266+
if (config.get_pro_config().has_value()) {
267+
return toJs(info.Env(), config.get_pro_config().value());
274268
}
275269

276270
return info.Env().Null();
@@ -285,38 +279,43 @@ void UserConfigWrapper::setProConfig(const Napi::CallbackInfo& info) {
285279

286280
session::config::ProConfig pro_config =
287281
pro_config_from_object(pro_config_js.As<Napi::Object>());
288-
// TODO fixme once extra_data is implemented
289282

290-
// config.set_pro_config(pro_config);
291-
this->pro_config = pro_config;
283+
config.set_pro_config(pro_config);
292284
});
293285
}
294286

295-
Napi::Value UserConfigWrapper::getProFeaturesBitset(const Napi::CallbackInfo& info) {
287+
Napi::Value UserConfigWrapper::removeProConfig(const Napi::CallbackInfo& info) {
296288
return wrapResult(info, [&] {
297-
// TODO fixme once extra_data is implemented
298-
// config.get_pro_features_bitset();
299-
oxen::log::warning(cat, "getProFeaturesBitset() is not wrapped to libsession");
300-
return proFeaturesToJsBitset(info.Env(), this->pro_user_features);
289+
assertInfoLength(info, 0);
290+
291+
return config.remove_pro_config();
301292
});
302293
}
303294

304-
void UserConfigWrapper::setProFeaturesBitset(const Napi::CallbackInfo& info) {
295+
Napi::Value UserConfigWrapper::getProFeaturesBitset(const Napi::CallbackInfo& info) {
296+
return wrapResult(
297+
info, [&] { return proFeaturesToJsBitset(info.Env(), config.get_pro_features()); });
298+
}
299+
300+
void UserConfigWrapper::setProBadge(const Napi::CallbackInfo& info) {
305301
wrapExceptions(info, [&] {
306302
assertInfoLength(info, 1);
307-
auto pro_features = info[0];
308-
assertIsObject(info[0]);
309-
auto obj = info[0].As<Napi::Object>();
310-
assertIsBigint(obj.Get("proFeaturesBitset"), "UserConfigWrapper::setProFeaturesBitset");
303+
assertIsBoolean(info[0], "setProBadge");
304+
305+
auto enabled = toCppBoolean(info[0], "UserConfigWrapper::setProBadge");
311306

312-
auto pro_user_features_js = obj.Get("proFeaturesBitset");
313-
auto pro_user_features_cpp = toCppIntegerB(
314-
pro_user_features_js, "UserConfigWrapper::setProFeaturesBitset", false);
307+
config.set_pro_badge(enabled);
308+
});
309+
}
310+
311+
void UserConfigWrapper::setAnimatedAvatar(const Napi::CallbackInfo& info) {
312+
wrapExceptions(info, [&] {
313+
assertInfoLength(info, 1);
314+
assertIsBoolean(info[0], "setAnimatedAvatar");
315315

316-
// TODO fixme once extra_data is implemented
316+
auto enabled = toCppBoolean(info[0], "UserConfigWrapper::setAnimatedAvatar");
317317

318-
// config.set_pro_features_bitset(pro_user_features_cpp);
319-
this->pro_user_features = pro_user_features_cpp;
318+
config.set_animated_avatar(enabled);
320319
});
321320
}
322321

types/multi_encrypt/multi_encrypt.d.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,20 @@ declare module 'libsession_util_nodejs' {
6161
type WithDecodedPro = {
6262
decodedPro: DecodedPro | null;
6363
};
64-
type WithProSigHex = {
65-
/**
66-
* HexString
67-
*/
68-
proSigHex: string | null;
69-
};
7064

7165
type Envelope = {
7266
timestampMs: number;
7367
/**
7468
* HexString, 33 bytes, 66 chars
7569
*/
7670
source: string | null;
77-
/**
78-
* HexString
79-
*/
80-
proSigHex: string | null;
8171
};
8272

8373
type WithEnvelope = {
74+
/**
75+
* The envelope payload, if present. For communities, the envelope is not currently included, but will eventually be.
76+
* We want to support both cases, hence why we use this type for decryptForCommunity, instead of WithNonNullableEnvelope
77+
*/
8478
envelope: Envelope | null;
8579
};
8680

types/pro/pro.d.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ declare module 'libsession_util_nodejs' {
1010
proBackendPubkeyHex: string;
1111
};
1212

13-
type ProStatus = 'InvalidProBackendSig' | 'InvalidUserSig' | 'Valid' | 'Expired';
13+
type ProStatus = 'InvalidProBackendSig' | 'InvalidUserSig' | 'Valid';
1414
type WithProFeaturesBitset = { proFeaturesBitset: bigint };
1515
type WithGenIndexHash = { genIndexHashB64: string };
1616

@@ -42,7 +42,6 @@ declare module 'libsession_util_nodejs' {
4242
rotatingPrivKeyHex: string;
4343
};
4444

45-
4645
type ProConfig = WithRotatingPrivKeyHex & {
4746
proProof: ProProof;
4847
};
@@ -55,8 +54,8 @@ declare module 'libsession_util_nodejs' {
5554
store_other: string;
5655
platform: string;
5756
platform_account: string;
58-
refund_url: string;
59-
refund_after_platform_deadline_url: string;
57+
refund_support_url: string;
58+
refund_platform_url: string;
6059
update_subscription_url: string;
6160
cancel_subscription_url: string;
6261
};

0 commit comments

Comments
 (0)