Skip to content

Commit ddf4b6a

Browse files
authored
Merge pull request #54 from session-foundation/fix-add-rangeproof-provider
fix: add rangeproof provider
2 parents 6f462fd + 5aa75fe commit ddf4b6a

7 files changed

Lines changed: 37 additions & 280 deletions

File tree

include/pro/pro.hpp

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -24,62 +24,6 @@ std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_USER_PRO_STATUS v);
2424
std::string_view proBackendEnumToString(SESSION_PRO_BACKEND_GET_PRO_DETAILS_ERROR_REPORT v);
2525
std::string_view proBackendEnumToString(session::ProFeaturesForMsgStatus v);
2626

27-
template <typename T>
28-
Napi::Value toJsOrNullIfErrors(
29-
const Napi::Env& env, const T& value, const std::vector<std::string>& errors) {
30-
return errors.empty() ? toJs(env, value) : env.Null();
31-
}
32-
33-
template <>
34-
struct toJs_impl<pro_backend::ProRevocationItem> {
35-
auto operator()(const Napi::Env& env, pro_backend::ProRevocationItem i) const {
36-
37-
auto obj = Napi::Object::New(env);
38-
obj["genIndexHashB64"] = toJs(env, to_base64(i.gen_index_hash));
39-
obj["expiryUnixTsMs"] = toJs(env, i.expiry_unix_ts);
40-
41-
return obj;
42-
}
43-
};
44-
45-
template <>
46-
struct toJs_impl<pro_backend::ProPaymentItem> {
47-
auto operator()(const Napi::Env& env, pro_backend::ProPaymentItem p) const {
48-
49-
auto obj = Napi::Object::New(env);
50-
obj["status"] = toJs(env, proBackendEnumToString(p.status));
51-
obj["plan"] = toJs(env, proBackendEnumToString(p.plan));
52-
obj["paymentProvider"] = toJs(env, proBackendEnumToString(p.payment_provider));
53-
54-
obj["autoRenewing"] = toJs(env, p.auto_renewing);
55-
obj["unredeemedTsMs"] = toJs(env, p.unredeemed_unix_ts);
56-
obj["redeemedTsMs"] = toJs(env, p.redeemed_unix_ts);
57-
obj["expiryTsMs"] = toJs(env, p.expiry_unix_ts);
58-
obj["gracePeriodDurationMs"] = toJs(env, p.grace_period_duration_ms);
59-
obj["platformRefundExpiryTsMs"] = toJs(env, p.platform_refund_expiry_unix_ts);
60-
obj["revokedTsMs"] = toJs(env, p.revoked_unix_ts);
61-
62-
obj["googlePaymentToken"] = toJs(env, p.google_payment_token);
63-
obj["appleOriginalTxId"] = toJs(env, p.apple_original_tx_id);
64-
obj["appleTxId"] = toJs(env, p.apple_tx_id);
65-
obj["appleWebLineOrderId"] = toJs(env, p.apple_web_line_order_id);
66-
67-
return obj;
68-
}
69-
};
70-
71-
template <>
72-
struct toJs_impl<pro_backend::ResponseHeader> {
73-
auto operator()(const Napi::Env& env, pro_backend::ResponseHeader r) const {
74-
75-
auto obj = Napi::Object::New(env);
76-
obj["status"] = toJs(env, r.status);
77-
obj["errors"] = toJs(env, r.errors);
78-
79-
return obj;
80-
}
81-
};
82-
8327
class ProWrapper : public Napi::ObjectWrap<ProWrapper> {
8428

8529
public:

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "libsession_util_nodejs",
44
"packageManager": "pnpm@10.28.1",
55
"description": "Wrappers for the Session Util Library",
6-
"version": "0.6.16",
6+
"version": "0.6.17",
77
"license": "GPL-3.0",
88
"author": {
99
"name": "Oxen Project",

src/constants.cpp

Lines changed: 30 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -24,156 +24,43 @@ Napi::Object ConstantsWrapper::Init(Napi::Env env, Napi::Object exports) {
2424
pro_urls["pro_access_not_found"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_pro_access_not_found);
2525
pro_urls["support_url"] = toJs(env, SESSION_PROTOCOL_STRINGS.url_pro_support);
2626

27-
auto pro_provider_nil = Napi::Object::New(env);
28-
pro_provider_nil["device"] = toJs(
29-
env,
30-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
31-
.device);
32-
pro_provider_nil["store"] = toJs(
33-
env,
34-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
35-
.store);
36-
pro_provider_nil["platform"] = toJs(
37-
env,
38-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
39-
.platform);
40-
pro_provider_nil["platform_account"] = toJs(
41-
env,
42-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
43-
.platform_account);
44-
pro_provider_nil["refund_support_url"] = toJs(
45-
env,
46-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
47-
.refund_support_url);
48-
pro_provider_nil["refund_status_url"] = toJs(
49-
env,
50-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
51-
.refund_status_url);
52-
pro_provider_nil["refund_platform_url"] = toJs(
53-
env,
54-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
55-
.refund_platform_url);
56-
pro_provider_nil["update_subscription_url"] = toJs(
57-
env,
58-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
59-
.update_subscription_url);
60-
pro_provider_nil["cancel_subscription_url"] = toJs(
61-
env,
62-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
63-
.cancel_subscription_url);
64-
pro_provider_nil["store_other"] = toJs(
65-
env,
66-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL]
67-
.store);
27+
auto make_provider = [&](int provider, int other_provider) {
28+
const auto& meta = SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[provider];
29+
auto obj = Napi::Object::New(env);
30+
obj["device"] = toJs(env, meta.device);
31+
obj["store"] = toJs(env, meta.store);
32+
obj["platform"] = toJs(env, meta.platform);
33+
obj["platform_account"] = toJs(env, meta.platform_account);
34+
obj["refund_support_url"] = toJs(env, meta.refund_support_url);
35+
obj["refund_status_url"] = toJs(env, meta.refund_status_url);
36+
obj["refund_platform_url"] = toJs(env, meta.refund_platform_url);
37+
obj["update_subscription_url"] = toJs(env, meta.update_subscription_url);
38+
obj["cancel_subscription_url"] = toJs(env, meta.cancel_subscription_url);
39+
obj["store_other"] =
40+
toJs(env, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA[other_provider].store);
41+
return obj;
42+
};
6843

69-
auto pro_provider_google = Napi::Object::New(env);
70-
pro_provider_google["device"] =
71-
toJs(env,
72-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
73-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
74-
.device);
75-
pro_provider_google["store"] =
76-
toJs(env,
77-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
78-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
79-
.store);
80-
pro_provider_google["platform"] =
81-
toJs(env,
82-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
83-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
84-
.platform);
85-
pro_provider_google["platform_account"] =
86-
toJs(env,
87-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
88-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
89-
.platform_account);
90-
pro_provider_google["refund_support_url"] =
91-
toJs(env,
92-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
93-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
94-
.refund_support_url);
95-
pro_provider_google["refund_status_url"] =
96-
toJs(env,
97-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
98-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
99-
.refund_status_url);
100-
pro_provider_google["refund_platform_url"] =
101-
toJs(env,
102-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
103-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
104-
.refund_platform_url);
105-
pro_provider_google["update_subscription_url"] =
106-
toJs(env,
107-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
108-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
109-
.update_subscription_url);
110-
pro_provider_google["cancel_subscription_url"] =
111-
toJs(env,
112-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
113-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
114-
.cancel_subscription_url);
115-
pro_provider_google["store_other"] =
116-
toJs(env,
117-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
118-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
119-
.store);
44+
auto pro_provider_nil = make_provider(
45+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL, SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL);
46+
auto pro_provider_google = make_provider(
47+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE,
48+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE);
49+
auto pro_provider_ios = make_provider(
50+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE,
51+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE);
12052

121-
auto pro_provider_ios = Napi::Object::New(env);
122-
pro_provider_ios["device"] =
123-
toJs(env,
124-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
125-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
126-
.device);
127-
pro_provider_ios["store"] =
128-
toJs(env,
129-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
130-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
131-
.store);
132-
pro_provider_ios["platform"] =
133-
toJs(env,
134-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
135-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
136-
.platform);
137-
pro_provider_ios["platform_account"] =
138-
toJs(env,
139-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
140-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
141-
.platform_account);
142-
pro_provider_ios["refund_support_url"] =
143-
toJs(env,
144-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
145-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
146-
.refund_support_url);
147-
pro_provider_ios["refund_status_url"] =
148-
toJs(env,
149-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
150-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
151-
.refund_status_url);
152-
pro_provider_ios["refund_platform_url"] =
153-
toJs(env,
154-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
155-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
156-
.refund_platform_url);
157-
pro_provider_ios["update_subscription_url"] =
158-
toJs(env,
159-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
160-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
161-
.update_subscription_url);
162-
pro_provider_ios["cancel_subscription_url"] =
163-
toJs(env,
164-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
165-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE]
166-
.cancel_subscription_url);
167-
pro_provider_ios["store_other"] =
168-
toJs(env,
169-
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_METADATA
170-
[SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE]
171-
.store);
53+
auto pro_provider_rangeproof = make_provider(
54+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_RANGEPROOF,
55+
// Use NIL as the second provider for Rangeproof so that it does not define an alternate
56+
// store label (i.e., no explicit "other" store for Rangeproof in these constants).
57+
SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL);
17258

17359
auto pro_providers = Napi::Object::New(env);
17460
pro_providers["Nil"] = toJs(env, pro_provider_nil);
17561
pro_providers["Google"] = toJs(env, pro_provider_google);
17662
pro_providers["iOS"] = toJs(env, pro_provider_ios);
63+
pro_providers["Rangeproof"] = toJs(env, pro_provider_rangeproof);
17764

17865
// construct javascript constants object
17966
Napi::Function cls = DefineClass(

src/pro/pro.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ std::string_view ProBackendEnumToString(SESSION_PRO_BACKEND_PAYMENT_PROVIDER v)
77
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL: return "NIL";
88
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE: return "GOOGLE_PLAY_STORE";
99
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE: return "IOS_APP_STORE";
10+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_RANGEPROOF: return "RANGEPROOF";
1011
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT:
1112
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT");
1213
}
@@ -77,6 +78,7 @@ std::string_view proBackendEnumPaymentProviderToString(SESSION_PRO_BACKEND_PAYME
7778
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_NIL: return "Nil";
7879
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_GOOGLE_PLAY_STORE: return "GooglePlayStore";
7980
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_IOS_APP_STORE: return "iOSAppStore";
81+
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_RANGEPROOF: return "Rangeproof";
8082
case SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT:
8183
throw std::invalid_argument("SESSION_PRO_BACKEND_PAYMENT_PROVIDER_COUNT");
8284
}

types/pro/pro.d.ts

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ declare module 'libsession_util_nodejs' {
5858
proProof: Omit<ProProof, 'rotatingPubkeyHex'>;
5959
};
6060

61-
export type ProOriginatingPlatform = 'Nil' | 'Google' | 'iOS';
61+
export type ProOriginatingPlatform = 'Nil' | 'Google' | 'iOS' | 'Rangeproof';
6262

6363
export type ProBackendProviderConstantType = {
6464
device: string;
@@ -92,82 +92,6 @@ declare module 'libsession_util_nodejs' {
9292

9393
type WithMasterPrivKeyHex = { masterPrivKeyHex: string };
9494

95-
type ProPaymentItem = {
96-
/**
97-
* Describes the current status of the consumption of the payment for Session Pro entitlement
98-
* The status should be used to determine which timestamps should be used.
99-
100-
* For example, a payment can be in a redeemed state whilst also have a refunded timestamp set
101-
* if the payment was refunded and then the refund was reversed. We preserve all timestamps for
102-
* book-keeping purposes.
103-
*/
104-
status: 'NIL' | 'UNREDEEMED' | 'REDEEMED' | 'EXPIRED' | 'REFUNDED';
105-
/**
106-
* Session Pro product/plan item that was purchased
107-
*/
108-
plan: 'NIL' | 'ONE_MONTH' | 'THREE_MONTHS' | 'TWELVE_MONTHS';
109-
/**
110-
* Store front that this particular payment came from
111-
*/
112-
paymentProvider: ProOriginatingPlatform;
113-
/**
114-
* Flag indicating whether or not this payment will automatically bill itself at the end of the
115-
billing cycle.
116-
*/
117-
autoRenewing: boolean;
118-
/**
119-
* Unix timestamp of when the payment was witnessed by the Pro Backend. Always set
120-
*/
121-
unredeemedTsMs: number;
122-
/**
123-
* Unix timestamp of when the payment was redeemed. 0 if not activated
124-
*/
125-
redeemedTsMs: number;
126-
/**
127-
* Unix timestamp of when the payment was expiry. 0 if not activated
128-
*/
129-
expiryTsMs: number;
130-
/**
131-
* Duration of the grace period, e.g. when the payment provider will start to attempt to renew
132-
* the Session Pro subscription. During the period between
133-
* [expiry_unix_ts, expiry_unix_ts + grace_period_duration_ms] the user continues to have
134-
* entitlement to Session Pro. This value is only applicable if `auto_renewing` is `true`.
135-
*/
136-
gracePeriodDurationMs: number;
137-
/**
138-
* Unix deadline timestamp of when the user is able to refund the subscription via the payment
139-
provider.
140-
* Thereafter the user must initiate a refund manually via Session support.
141-
*/
142-
platformRefundExpiryTsMs: number;
143-
/**
144-
* Unix timestamp of when the payment was revoked or refunded. 0 if not applicable.
145-
*/
146-
revokedTsMs: number;
147-
/**
148-
* When payment provider is set to Google Play Store, this is the platform-specific purchase
149-
token.
150-
* This information should be considered as confidential and stored appropriately.
151-
*/
152-
googlePaymentToken: string | null;
153-
/**
154-
* When payment provider is set to iOS App Store, this is the platform-specific original
155-
transaction ID.
156-
* This information should be considered as confidential and stored appropriately.
157-
*/
158-
appleOriginalTxId: string | null;
159-
/**
160-
* When payment provider is set to iOS App Store, this is the platform-specific transaction ID
161-
* This information should be considered as confidential and stored appropriately.
162-
*/
163-
appleTxId: string | null;
164-
/**
165-
* When payment provider is set to iOS App Store, this is the platform-specific web line order
166-
* ID.
167-
* This information should be considered as confidential and stored appropriately.
168-
*/
169-
appleWebLineOrderId: string | null;
170-
};
17195

17296
type ProWrapper = {
17397
proFeaturesForMessage: (args: { utf16: string }) => WithProMessageBitset & {

types/shared.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ declare module 'libsession_util_nodejs' {
101101

102102
type MakeGroupActionCall<A extends RecordOfFunctions, B extends keyof A> = [
103103
B,
104-
...Parameters<A[B]>
104+
...Parameters<A[B]>,
105105
]; // all of the groupActionCalls need the pubkey of the group we are targeting
106106

107107
type AsyncGroupWrapper<T extends (...args: any) => any> = (
@@ -178,7 +178,7 @@ declare module 'libsession_util_nodejs' {
178178
LIBSESSION_NODEJS_COMMIT: string;
179179
/** Object containing pro urls **/
180180
LIBSESSION_PRO_URLS: ProBackendUrlsType;
181-
/** Object containing mapped provder constants */
181+
/** Object containing mapped provider constants */
182182
LIBSESSION_PRO_PROVIDERS: ProBackendProviderConstantsType;
183183
};
184184

0 commit comments

Comments
 (0)