@@ -142,11 +142,19 @@ inline std::optional<std::span<const unsigned char>> extractProRotatingEd25519Pr
142142inline std::vector<unsigned char > extractContentOrEnvelope (
143143 const Napi::Object& obj, const std::string identifier) {
144144 assertIsUInt8Array (obj.Get (" contentOrEnvelope" ), identifier);
145- auto contentOrEnvelope = toCppBuffer (obj.Get (" contentOrEnvelope" ), identifier);
145+ std::vector<unsigned char > contentOrEnvelope =
146+ toCppBuffer (obj.Get (" contentOrEnvelope" ), identifier);
146147
147148 return contentOrEnvelope;
148149}
149150
151+ inline uint32_t extractServerId (const Napi::Object& obj, const std::string identifier) {
152+ assertIsNumber (obj.Get (" serverId" ), identifier);
153+ auto serverId = toCppInteger (obj.Get (" serverId" ), identifier);
154+
155+ return serverId;
156+ }
157+
150158inline std::chrono::sys_time<std::chrono::milliseconds> extractNowSysMs (
151159 const Napi::Object& obj, const std::string identifier) {
152160 assertIsNumber (obj.Get (" nowMs" ), identifier);
@@ -628,6 +636,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
628636 // we expect two arguments that match:
629637 // first: [{
630638 // "contentOrEnvelope": Uint8Array,
639+ // "serverId": number,
631640 // }],
632641 // second: {
633642 // "nowMs": number,
@@ -653,7 +662,8 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
653662 auto proBackendPubkeyHex = extractProBackendPubkeyHex (
654663 second, " decryptForCommunity.second.proBackendPubkeyHex" );
655664
656- std::vector<DecodedCommunityMessage> decrypted (first.Length ());
665+ std::vector<DecodedCommunityMessage> decrypted;
666+ std::vector<uint32_t > decryptedServerIds;
657667
658668 for (uint32_t i = 0 ; i < first.Length (); i++) {
659669 auto itemValue = first.Get (i);
@@ -665,11 +675,14 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
665675 auto obj = itemValue.As <Napi::Object>();
666676
667677 try {
668- decrypted[i] = session::decode_for_community (
669- extractContentOrEnvelope (
670- obj, " decryptForCommunity.obj.contentOrEnvelope" ),
671- nowMs,
672- proBackendPubkeyHex);
678+ uint32_t serverId = extractServerId (obj, " decryptForCommunity.obj.serverId" );
679+
680+ auto contentOrEnvelope = extractContentOrEnvelope (
681+ obj, " decryptForCommunity.obj.contentOrEnvelope" );
682+ decrypted.push_back (
683+ session::decode_for_community (
684+ contentOrEnvelope, nowMs, proBackendPubkeyHex));
685+ decryptedServerIds.push_back (serverId);
673686
674687 } catch (const std::exception& e) {
675688 log::warning (
@@ -682,6 +695,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
682695
683696 auto ret = Napi::Array::New (info.Env (), decrypted.size ());
684697 uint32_t i = 0 ;
698+
685699 for (auto & d : decrypted) {
686700 auto to_insert = Napi::Object::New (info.Env ());
687701 std::span<unsigned char > content_plaintext_unpadded =
@@ -690,6 +704,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
690704
691705 to_insert.Set (
692706 " contentPlaintextUnpadded" , toJs (info.Env (), content_plaintext_unpadded));
707+ to_insert.Set (" serverId" , toJs (info.Env (), decryptedServerIds[i]));
693708 to_insert.Set (
694709 " envelope" , d.envelope ? toJs (info.Env (), *d.envelope ) : info.Env ().Null ());
695710
0 commit comments