Skip to content

Commit 68ca747

Browse files
authored
Merge pull request #42 from session-foundation/bilb/feat-add-pro-backend-fns
feat: add pro backend build request functions
2 parents e45798b + 2f842fe commit 68ca747

File tree

7 files changed

+399
-164
lines changed

7 files changed

+399
-164
lines changed

CMakeLists.txt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,30 @@ if(MSVC)
4646
add_compile_definitions(NOMINMAX)
4747
endif()
4848

49+
50+
4951
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})
50-
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC} "include/" "${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-addon-api" "${CMAKE_CURRENT_SOURCE_DIR}/node_modules" "${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-api-headers/include")
52+
53+
# Mark the node-addon-api headers as system so the -Werror=switch-enum does not apply to them
54+
target_include_directories(${PROJECT_NAME}
55+
SYSTEM PRIVATE
56+
${CMAKE_JS_INC}
57+
${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-addon-api
58+
${CMAKE_CURRENT_SOURCE_DIR}/node_modules
59+
${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-api-headers/include
60+
)
61+
62+
target_include_directories(${PROJECT_NAME} PRIVATE "include/" )
5163

5264
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
5365
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_JS_LIB} ${LIBSESSION_STATIC_BUNDLE_LIBS})
5466

67+
68+
if(UNIX AND NOT APPLE)
69+
target_compile_options(${PROJECT_NAME} PRIVATE -Werror=switch-enum)
70+
endif()
71+
72+
5573
if(MSVC AND CMAKE_JS_NODELIB_DEF AND CMAKE_JS_NODELIB_TARGET)
5674
# Generate node.lib
5775
execute_process(COMMAND ${CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS})

include/pro/pro.hpp

Lines changed: 144 additions & 92 deletions
Large diffs are not rendered by default.

include/utilities.hpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <fmt/format.h>
34
#include <napi.h>
45

56
#include <chrono>
@@ -23,6 +24,12 @@ namespace session::nodeapi {
2324

2425
using namespace std::literals;
2526

27+
#ifdef _MSC_VER
28+
#define UNREACHABLE() __assume(0)
29+
#else
30+
#define UNREACHABLE() __builtin_unreachable()
31+
#endif
32+
2633
inline auto cat = oxen::log::Cat("nodeapi");
2734

2835
static void checkOrThrow(bool condition, const char* msg) {
@@ -239,6 +246,21 @@ struct toJs_impl<std::chrono::sys_seconds> {
239246
}
240247
};
241248

249+
template <>
250+
struct toJs_impl<std::chrono::milliseconds> {
251+
auto operator()(const Napi::Env& env, std::chrono::milliseconds t) const {
252+
return Napi::Number::New(env, t.count());
253+
}
254+
};
255+
256+
template <>
257+
struct toJs_impl<std::chrono::sys_time<std::chrono::milliseconds>> {
258+
auto operator()(
259+
const Napi::Env& env, std::chrono::sys_time<std::chrono::milliseconds> t) const {
260+
return Napi::Number::New(env, t.time_since_epoch().count());
261+
}
262+
};
263+
242264
// Returns {"url": "...", "key": buffer} object; both values will be Null if the pic is not set.
243265

244266
template <>
@@ -383,7 +405,7 @@ template <std::size_t N>
383405
std::array<uint8_t, N> from_hex_to_array(std::string x) {
384406
std::string as_hex = oxenc::from_hex(x);
385407
if (as_hex.size() != N) {
386-
throw std::invalid_argument(std::format(
408+
throw std::invalid_argument(fmt::format(
387409
"from_hex_to_array: Decoded hex size mismatch: expected {}, got {}",
388410
N,
389411
as_hex.size()));
@@ -410,7 +432,7 @@ concept HasSize = requires(T t) {
410432
template <HasSize T>
411433
void assert_length(const T& x, size_t n, std::string_view base_identifier) {
412434
if (x.size() != n) {
413-
throw std::invalid_argument(std::format(
435+
throw std::invalid_argument(fmt::format(
414436
"assert_length: expected {}, got {} for {}", n, x.size(), base_identifier));
415437
}
416438
}

src/pro/pro.cpp

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#include "pro/pro.hpp"
22

33
namespace session::nodeapi {
4+
45
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_PROVIDER v) {
56
switch (v) {
67
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL: return "NIL";
78
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE: return "GOOGLE_PLAY_STORE";
89
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE: return "IOS_APP_STORE";
910
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT:
10-
// TODO: do we want to assert this cant happen? or should it be allowed?
11-
return "Count";
11+
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT");
1212
}
13+
UNREACHABLE();
1314
}
1415

1516
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_STATUS v) {
@@ -20,42 +21,89 @@ std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_STATUS v) {
2021
case SESSION_PRO_BACKEND_PAYMENT_STATUS_EXPIRED: return "EXPIRED";
2122
case SESSION_PRO_BACKEND_PAYMENT_STATUS_REFUNDED: return "REFUNDED";
2223
case SESSION_PRO_BACKEND_PAYMENT_STATUS_COUNT:
23-
// TODO: do we want to assert this cant happen? or should it be allowed?
24-
return "COUNT";
24+
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_STATUS_COUNT");
2525
}
26+
UNREACHABLE();
2627
}
2728

28-
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_PLAN v) {
29+
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_PLAN v) {
2930
switch (v) {
3031
case SESSION_PRO_BACKEND_PLAN_NIL: return "NIL";
3132
case SESSION_PRO_BACKEND_PLAN_ONE_MONTH: return "ONE_MONTH";
3233
case SESSION_PRO_BACKEND_PLAN_THREE_MONTHS: return "THREE_MONTHS";
3334
case SESSION_PRO_BACKEND_PLAN_TWELVE_MONTHS: return "TWELVE_MONTHS";
3435
case SESSION_PRO_BACKEND_PLAN_COUNT:
35-
// TODO: do we want to assert this cant happen? or should it be allowed?
36-
return "COUNT";
36+
throw std::invalid_argument("SESSION_PRO_BACKEND_PLAN_COUNT");
3737
}
38+
UNREACHABLE();
3839
}
3940

40-
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v) {
41+
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v) {
4142
switch (v) {
4243
case SESSION_PRO_BACKEND_USER_PRO_STATUS_NEVER_BEEN_PRO: return "NEVER_BEEN_PRO";
4344
case SESSION_PRO_BACKEND_USER_PRO_STATUS_ACTIVE: return "ACTIVE";
4445
case SESSION_PRO_BACKEND_USER_PRO_STATUS_EXPIRED: return "EXPIRED";
4546
case SESSION_PRO_BACKEND_USER_PRO_STATUS_COUNT:
46-
// TODO: do we want to assert this cant happen? or should it be allowed?
47-
return "COUNT";
47+
throw std::invalid_argument("SESSION_PRO_BACKEND_USER_PRO_STATUS_COUNT");
4848
}
49+
UNREACHABLE();
4950
}
5051

5152
std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT v) {
5253
switch (v) {
5354
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_SUCCESS: return "SUCCESS";
5455
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_GENERIC_ERROR: return "GENERIC_ERROR";
5556
case SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT:
56-
// TODO: do we want to assert this cant happen? or should it be allowed?
57-
return "COUNT";
57+
throw std::invalid_argument("SESSION_PRO_BACKEND_GET_PRO_STATUS_ERROR_REPORT_COUNT");
58+
}
59+
UNREACHABLE();
60+
}
61+
62+
std::string_view proBackendEnumPlanToString(SESSION_PRO_BACKEND_PLAN v) {
63+
switch (v) {
64+
case SESSION_PRO_BACKEND_PLAN_NIL: return "NIL";
65+
case SESSION_PRO_BACKEND_PLAN_ONE_MONTH: return "ONE_MONTH";
66+
case SESSION_PRO_BACKEND_PLAN_THREE_MONTHS: return "THREE_MONTHS";
67+
case SESSION_PRO_BACKEND_PLAN_TWELVE_MONTHS: return "TWELVE_MONTHS";
68+
case SESSION_PRO_BACKEND_PLAN_COUNT:
69+
throw std::invalid_argument("SESSION_PRO_BACKEND_PLAN_COUNT");
70+
}
71+
UNREACHABLE();
72+
}
73+
74+
std::string_view proBackendEnumPaymentProviderToString(SESSION_PRO_BACKEND_PAYMENT_PROVIDER v) {
75+
switch (v) {
76+
// Note: we want those to map ProOriginatingPlatform keys
77+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL: return "Nil";
78+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE: return "GooglePlayStore";
79+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE: return "iOSAppStore";
80+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT:
81+
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT");
82+
}
83+
UNREACHABLE();
84+
}
85+
86+
std::string_view proBackendEnumPaymentStatusToString(SESSION_PRO_BACKEND_PAYMENT_STATUS v) {
87+
switch (v) {
88+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_NIL: return "NIL";
89+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_UNREDEEMED: return "UNREDEEMED";
90+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_REDEEMED: return "REDEEMED";
91+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_EXPIRED: return "EXPIRED";
92+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_REFUNDED: return "REFUNDED";
93+
case SESSION_PRO_BACKEND_PAYMENT_STATUS_COUNT:
94+
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_STATUS_COUNT");
5895
}
96+
UNREACHABLE();
5997
}
6098

99+
std::string_view proBackendEnumToString(session::ProFeaturesForMsgStatus v) {
100+
switch (v) {
101+
case session::ProFeaturesForMsgStatus::Success: return "SUCCESS";
102+
case session::ProFeaturesForMsgStatus::UTFDecodingError: return "UTF_DECODING_ERROR";
103+
case session::ProFeaturesForMsgStatus::ExceedsCharacterLimit:
104+
return "EXCEEDS_CHARACTER_LIMIT";
105+
}
106+
UNREACHABLE();
61107
}
108+
109+
} // namespace session::nodeapi

src/user_config.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,7 @@ Napi::Value UserConfigWrapper::generateProMasterKey(const Napi::CallbackInfo& in
281281
assert_length(ed25519_seed_cpp_hex, 64, "generateProMasterKey");
282282
auto converted = from_hex_to_vector(ed25519_seed_cpp_hex);
283283

284-
auto pro_master_key_hex =
285-
session::ed25519::ed25519_pro_key_pair_for_ed25519_seed(converted);
284+
auto pro_master_key_hex = session::ed25519::ed25519_pro_privkey_for_ed25519_seed(converted);
286285
auto obj = Napi::Object::New(info.Env());
287286
obj["proMasterKey"] = toJs(info.Env(), pro_master_key_hex);
288287

0 commit comments

Comments
 (0)