diff --git a/include/utilities.hpp b/include/utilities.hpp index bcf2aed..94b2232 100644 --- a/include/utilities.hpp +++ b/include/utilities.hpp @@ -13,6 +13,7 @@ #include "oxenc/hex.h" #include "session/config/namespaces.hpp" #include "session/config/profile_pic.hpp" +#include "session/types.h" #include "session/types.hpp" #include "utilities.hpp" @@ -130,6 +131,13 @@ struct toJs_impl> } }; +template <> +struct toJs_impl { + auto operator()(const Napi::Env& env, string8 s) const { + return Napi::String::New(env, s.data, s.size); + } +}; + template struct toJs_impl< T, diff --git a/libsession-util b/libsession-util index 4f0f6b4..8136920 160000 --- a/libsession-util +++ b/libsession-util @@ -1 +1 @@ -Subproject commit 4f0f6b4e005b1f930412b85b9492aaf3abc28871 +Subproject commit 8136920cf7d2785b41047c69851d3e44c3f15921 diff --git a/src/constants.cpp b/src/constants.cpp index a47ca65..26924c0 100644 --- a/src/constants.cpp +++ b/src/constants.cpp @@ -1,9 +1,12 @@ #include "constants.hpp" +#include "js_native_api_types.h" #include "session/config/contacts.hpp" #include "session/config/groups/info.hpp" #include "session/config/user_groups.hpp" +#include "session/pro_backend.h" #include "session/version.h" +#include "utilities.hpp" #include "version.h" namespace session::nodeapi { @@ -13,6 +16,51 @@ ConstantsWrapper::ConstantsWrapper(const Napi::CallbackInfo& info) : 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); + + auto pro_provider_nil = Napi::Object::New(env); + pro_provider_nil["device"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].device); + pro_provider_nil["store"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].store); + pro_provider_nil["platform"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].platform); + pro_provider_nil["platform_account"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].platform_account); + pro_provider_nil["refund_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].refund_url); + pro_provider_nil["refund_after_platform_deadline_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].refund_after_platform_deadline_url); + pro_provider_nil["update_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].update_subscription_url); + pro_provider_nil["cancel_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].cancel_subscription_url); + pro_provider_nil["store_other"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL].store); + + auto pro_provider_google = Napi::Object::New(env); + pro_provider_google["device"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].device); + pro_provider_google["store"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].store); + pro_provider_google["platform"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].platform); + pro_provider_google["platform_account"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].platform_account); + pro_provider_google["refund_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].refund_url); + pro_provider_google["refund_after_platform_deadline_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].refund_after_platform_deadline_url); + pro_provider_google["update_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].update_subscription_url); + pro_provider_google["cancel_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].cancel_subscription_url); + pro_provider_google["store_other"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].store); + + auto pro_provider_ios = Napi::Object::New(env); + pro_provider_ios["device"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].device); + pro_provider_ios["store"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].store); + pro_provider_ios["platform"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].platform); + pro_provider_ios["platform_account"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].platform_account); + pro_provider_ios["refund_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].refund_url); + pro_provider_ios["refund_after_platform_deadline_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].refund_after_platform_deadline_url); + pro_provider_ios["update_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].update_subscription_url); + pro_provider_ios["cancel_subscription_url"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE].cancel_subscription_url); + pro_provider_ios["store_other"] = toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE].store); + + auto pro_providers = Napi::Object::New(env); + pro_providers["Nil"] = toJs(env, pro_provider_nil); + pro_providers["Google"] = toJs(env, pro_provider_google); + pro_providers["iOS"] = toJs(env, pro_provider_ios); + // construct javascript constants object Napi::Function cls = DefineClass( env, @@ -37,6 +85,14 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) { "COMMUNITY_FULL_URL_MAX_LENGTH", Napi::Number::New(env, session::config::community::FULL_URL_MAX_LENGTH), napi_enumerable), + ObjectWrap::StaticValue( + "LIBSESSION_PRO_URLS", + pro_urls, + napi_enumerable), + ObjectWrap::StaticValue( + "LIBSESSION_PRO_PROVIDERS", + pro_providers, + napi_enumerable), ObjectWrap::StaticValue( "LIBSESSION_UTIL_VERSION", Napi::String::New(env, LIBSESSION_UTIL_VERSION_FULL), diff --git a/types/pro/pro.d.ts b/types/pro/pro.d.ts new file mode 100644 index 0000000..b2ab542 --- /dev/null +++ b/types/pro/pro.d.ts @@ -0,0 +1,30 @@ +declare module 'libsession_util_nodejs' { + // Must match session-desktop + export enum ProOriginatingPlatform { + Nil = "Nil", + GooglePlayStore = "Google", + iOSAppStore = "iOS", + } + + export type ProBackendProviderConstantType = { + device: string; + store: string; + store_other: string; + platform: string; + platform_account: string; + refund_url: string; + refund_after_platform_deadline_url: string; + update_subscription_url: string; + cancel_subscription_url: string; + } + + export type ProBackendProviderConstantsType = Record + + export type ProBackendUrlsType = { + roadmap: string; + privacy_policy: string; + terms_of_service: string; + pro_access_not_found: string; + support_url: string; + } +} diff --git a/types/shared.d.ts b/types/shared.d.ts index 50b06d4..b8b758d 100644 --- a/types/shared.d.ts +++ b/types/shared.d.ts @@ -1,3 +1,5 @@ +/// + declare module 'libsession_util_nodejs' { type Uint8ArrayFixedLength = { buffer: Uint8Array; @@ -174,6 +176,10 @@ declare module 'libsession_util_nodejs' { * A string corresponding to the full hash of the commit */ LIBSESSION_NODEJS_COMMIT: string; + /** Object containing pro urls **/ + LIBSESSION_PRO_URLS: ProBackendUrlsType; + /** Object containing mapped provder constants */ + LIBSESSION_PRO_PROVIDERS: ProBackendProviderConstantsType; }; export const CONSTANTS: ConstantsType;