diff --git a/src/blinding/blinding.hpp b/src/blinding/blinding.hpp index d244696..39cc242 100644 --- a/src/blinding/blinding.hpp +++ b/src/blinding/blinding.hpp @@ -18,8 +18,7 @@ class BlindingWrapper : public Napi::ObjectWrap { public: BlindingWrapper(const Napi::CallbackInfo& info) : Napi::ObjectWrap{info} { - throw std::invalid_argument( - "BlindingWrapper is static and doesn't need to be constructed"); + throw std::invalid_argument("BlindingWrapper is static and doesn't need to be constructed"); } static void Init(Napi::Env env, Napi::Object exports) { @@ -32,11 +31,14 @@ class BlindingWrapper : public Napi::ObjectWrap { "blindVersionPubkey", static_cast( napi_writable | napi_configurable)), + StaticMethod<&BlindingWrapper::blindVersionSignRequest>( + "blindVersionSignRequest", + static_cast( + napi_writable | napi_configurable)), StaticMethod<&BlindingWrapper::blindVersionSign>( "blindVersionSign", static_cast( napi_writable | napi_configurable)), - }); } @@ -67,6 +69,43 @@ class BlindingWrapper : public Napi::ObjectWrap { }); }; + static Napi::Value blindVersionSignRequest(const Napi::CallbackInfo& info) { + return wrapResult(info, [&] { + assertInfoLength(info, 1); + assertIsObject(info[0]); + auto obj = info[0].As(); + + if (obj.IsEmpty()) + throw std::invalid_argument("blindVersionSignRequest received empty"); + + assertIsUInt8Array( + obj.Get("ed25519SecretKey"), "blindVersionSignRequest.ed25519SecretKey"); + auto ed25519_secret_key = toCppBuffer( + obj.Get("ed25519SecretKey"), "blindVersionSignRequest.ed25519SecretKey"); + + assertIsNumber( + obj.Get("sigTimestampSeconds"), "blindVersionSignRequest.sigTimestampSeconds"); + auto sig_timestamp = toCppInteger( + obj.Get("sigTimestampSeconds"), + "blindVersionSignRequest.sigTimestampSeconds", + false); + + assertIsString(obj.Get("sigMethod")); + auto sig_method = + toCppString(obj.Get("sigMethod"), "blindVersionSignRequest.sigMethod"); + + assertIsString(obj.Get("sigPath")); + auto sig_path = toCppString(obj.Get("sigPath"), "blindVersionSignRequest.sigPath"); + + assertIsUInt8ArrayOrNull(obj.Get("sigBody")); + auto sig_body = + maybeNonemptyBuffer(obj.Get("sigBody"), "blindVersionSignRequest.sigBody"); + + return session::blind_version_sign_request( + ed25519_secret_key, sig_timestamp, sig_method, sig_path, sig_body); + }); + }; + static Napi::Value blindVersionSign(const Napi::CallbackInfo& info) { return wrapResult(info, [&] { assertInfoLength(info, 1); diff --git a/types/blinding/blinding.d.ts b/types/blinding/blinding.d.ts index d15774e..fdca137 100644 --- a/types/blinding/blinding.d.ts +++ b/types/blinding/blinding.d.ts @@ -8,6 +8,16 @@ declare module 'libsession_util_nodejs' { */ ed25519SecretKey: Uint8Array; }) => string; + blindVersionSignRequest: (opts: { + /** + * len 64: ed25519 secretKey with pubkey + */ + ed25519SecretKey: Uint8Array; + sigTimestampSeconds: number; + sigMethod: string; + sigPath: string; + sigBody: Uint8Array | null; + }) => Uint8Array; blindVersionSign: (opts: { /** * len 64: ed25519 secretKey with pubkey @@ -24,6 +34,7 @@ declare module 'libsession_util_nodejs' { */ export class BlindingWrapperNode { public static blindVersionPubkey: BlindingWrapper['blindVersionPubkey']; + public static blindVersionSignRequest: BlindingWrapper['blindVersionSignRequest']; public static blindVersionSign: BlindingWrapper['blindVersionSign']; } @@ -34,5 +45,6 @@ declare module 'libsession_util_nodejs' { */ export type BlindingActionsType = | MakeActionCall + | MakeActionCall | MakeActionCall; }