@@ -140,7 +140,7 @@ void MetaGroupWrapper::Init(Napi::Env env, Napi::Object exports) {
140140                    InstanceMethod (" keysNeedsRekey"  , &MetaGroupWrapper::keysNeedsRekey),
141141                    InstanceMethod (" keyRekey"  , &MetaGroupWrapper::keyRekey),
142142                    InstanceMethod (" keyGetAll"  , &MetaGroupWrapper::keyGetAll),
143-                     InstanceMethod (" currentHashes "  , &MetaGroupWrapper::currentHashes ),
143+                     InstanceMethod (" activeHashes "  , &MetaGroupWrapper::activeHashes ),
144144                    InstanceMethod (" loadKeyMessage"  , &MetaGroupWrapper::loadKeyMessage),
145145                    InstanceMethod (" keyGetCurrentGen"  , &MetaGroupWrapper::keyGetCurrentGen),
146146                    InstanceMethod (" encryptMessages"  , &MetaGroupWrapper::encryptMessages),
@@ -244,35 +244,21 @@ void MetaGroupWrapper::metaConfirmPushed(const Napi::CallbackInfo& info) {
244244        auto  groupMember = obj.Get (" groupMember"  );
245245
246246        if  (!groupInfo.IsNull () && !groupInfo.IsUndefined ()) {
247-             assertIsArray (groupInfo);
248-             auto  groupInfoArr = groupInfo.As <Napi::Array>();
249-             if  (groupInfoArr.Length () != 2 ) {
250-                 throw  std::invalid_argument (" groupInfoArr length was not 2"  );
251-             }
247+             assertIsObject (groupInfo);
248+             auto  groupInfoObj = groupInfo.As <Napi::Object>();
249+             auto  groupInfoConfirmed = confirm_pushed_entry_from_JS (info.Env (), groupInfoObj);
252250
253-             auto  seqno = maybeNonemptyInt (
254-                     groupInfoArr.Get (" 0"  ), " MetaGroupWrapper::metaConfirmPushed groupInfo seqno"  );
255-             auto  hash = maybeNonemptyString (
256-                     groupInfoArr.Get (" 1"  ), " MetaGroupWrapper::metaConfirmPushed groupInfo hash"  );
257-             if  (seqno && hash)
258-                 this ->meta_group ->info ->confirm_pushed (*seqno, *hash);
251+             this ->meta_group ->info ->confirm_pushed (
252+                     std::get<0 >(groupInfoConfirmed), std::get<1 >(groupInfoConfirmed));
259253        }
260254
261255        if  (!groupMember.IsNull () && !groupMember.IsUndefined ()) {
262-             assertIsArray (groupMember);
263-             auto  groupMemberArr = groupMember.As <Napi::Array>();
264-             if  (groupMemberArr.Length () != 2 ) {
265-                 throw  std::invalid_argument (" groupMemberArr length was not 2"  );
266-             }
256+             assertIsObject (groupMember);
257+             auto  groupMemberObj = groupMember.As <Napi::Object>();
258+             auto  groupMemberConfirmed = confirm_pushed_entry_from_JS (info.Env (), groupMemberObj);
267259
268-             auto  seqno = maybeNonemptyInt (
269-                     groupMemberArr.Get (" 0"  ),
270-                     " MetaGroupWrapper::metaConfirmPushed groupMemberArr seqno"  );
271-             auto  hash = maybeNonemptyString (
272-                     groupMemberArr.Get (" 1"  ),
273-                     " MetaGroupWrapper::metaConfirmPushed groupMemberArr hash"  );
274-             if  (seqno && hash)
275-                 this ->meta_group ->members ->confirm_pushed (*seqno, *hash);
260+             this ->meta_group ->members ->confirm_pushed (
261+                     std::get<0 >(groupMemberConfirmed), std::get<1 >(groupMemberConfirmed));
276262        }
277263    });
278264};
@@ -283,17 +269,17 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
283269        auto  arg = info[0 ];
284270        assertIsObject (arg);
285271        auto  obj = arg.As <Napi::Object>();
286- 
287272        auto  groupInfo = obj.Get (" groupInfo"  );
288273        auto  groupMember = obj.Get (" groupMember"  );
289274        auto  groupKeys = obj.Get (" groupKeys"  );
290275
291276        auto  count_merged = 0 ;
292277
278+ 
293279        //  Note: we need to process keys first as they might allow us the incoming info+members
294280        //  details
295281        if  (!groupKeys.IsNull () && !groupKeys.IsUndefined ()) {
296-             assertIsArray (groupKeys);
282+             assertIsArray (groupKeys,  " metaMerge groupKeys "  );
297283            auto  asArr = groupKeys.As <Napi::Array>();
298284
299285            for  (uint32_t  i = 0 ; i < asArr.Length (); i++) {
@@ -318,13 +304,13 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
318304                        timestamp_ms,
319305                        *(this ->meta_group ->info ),
320306                        *(this ->meta_group ->members ));
321-                 count_merged++;  //  load_key_message doesn't necessarely  merge something as not
307+                 count_merged++;  //  load_key_message doesn't necessarily  merge something as not
322308                                 //  all keys are for us.
323309            }
324310        }
325311
326312        if  (!groupInfo.IsNull () && !groupInfo.IsUndefined ()) {
327-             assertIsArray (groupInfo);
313+             assertIsArray (groupInfo,  " metaMerge groupInfo "  );
328314            auto  asArr = groupInfo.As <Napi::Array>();
329315
330316            std::vector<std::pair<std::string, std::vector<unsigned  char >>> conf_strs;
@@ -349,9 +335,8 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
349335                count_merged += info_merged.size ();
350336            }
351337        }
352- 
353338        if  (!groupMember.IsNull () && !groupMember.IsUndefined ()) {
354-             assertIsArray (groupMember);
339+             assertIsArray (groupMember,  " metaMerge groupMember "  );
355340            auto  asArr = groupMember.As <Napi::Array>();
356341
357342            std::vector<std::pair<std::string, std::vector<unsigned  char >>> conf_strs;
@@ -376,7 +361,6 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
376361                count_merged += member_merged.size ();
377362            }
378363        }
379- 
380364        if  (this ->meta_group ->keys ->needs_rekey ()) {
381365            this ->meta_group ->keys ->rekey (*(this ->meta_group ->info ), *(this ->meta_group ->members ));
382366        }
@@ -693,7 +677,7 @@ void MetaGroupWrapper::membersMarkPendingRemoval(const Napi::CallbackInfo& info)
693677        auto  toUpdateJSValue = info[0 ];
694678        auto  withMessageJSValue = info[1 ];
695679
696-         assertIsArray (toUpdateJSValue);
680+         assertIsArray (toUpdateJSValue,  " membersMarkPendingRemoval "  );
697681        assertIsBoolean (withMessageJSValue);
698682        bool  withMessages = toCppBoolean (withMessageJSValue, " membersMarkPendingRemoval"  );
699683
@@ -714,7 +698,7 @@ Napi::Value MetaGroupWrapper::memberEraseAndRekey(const Napi::CallbackInfo& info
714698        assertInfoLength (info, 1 );
715699        auto  toRemoveJSValue = info[0 ];
716700
717-         assertIsArray (toRemoveJSValue);
701+         assertIsArray (toRemoveJSValue,  " memberEraseAndRekey "  );
718702
719703        auto  toRemoveJS = toRemoveJSValue.As <Napi::Array>();
720704        auto  rekeyed = false ;
@@ -771,23 +755,24 @@ Napi::Value MetaGroupWrapper::keyGetCurrentGen(const Napi::CallbackInfo& info) {
771755    });
772756}
773757
774- Napi::Value MetaGroupWrapper::currentHashes  (const  Napi::CallbackInfo& info) {
758+ Napi::Value MetaGroupWrapper::activeHashes  (const  Napi::CallbackInfo& info) {
775759    return  wrapResult (info, [&] {
776-         auto  keysHashes = meta_group->keys ->current_hashes ();
777-         auto  infoHashes = meta_group->info ->current_hashes ();
778-         auto  memberHashes = meta_group->members ->current_hashes ();
760+         auto  keysHashes = meta_group->keys ->active_hashes ();
761+         auto  infoHashes = meta_group->info ->active_hashes ();
762+         auto  memberHashes = meta_group->members ->active_hashes ();
779763        std::vector<std::string> merged;
780764        std::copy (std::begin (keysHashes), std::end (keysHashes), std::back_inserter (merged));
781765        std::copy (std::begin (infoHashes), std::end (infoHashes), std::back_inserter (merged));
782766        std::copy (std::begin (memberHashes), std::end (memberHashes), std::back_inserter (merged));
767+ 
783768        return  merged;
784769    });
785770}
786771
787772Napi::Value MetaGroupWrapper::encryptMessages (const  Napi::CallbackInfo& info) {
788773    return  wrapResult (info, [&] {
789774        assertInfoLength (info, 1 );
790-         assertIsArray (info[0 ]);
775+         assertIsArray (info[0 ],  " encryptMessages "  );
791776
792777        auto  plaintextsJS = info[0 ].As <Napi::Array>();
793778        uint32_t  arrayLength = plaintextsJS.Length ();
@@ -880,7 +865,7 @@ Napi::Value MetaGroupWrapper::generateSupplementKeys(const Napi::CallbackInfo& i
880865    return  wrapResult (info, [&] {
881866        assertInfoLength (info, 1 );
882867        auto  membersJSValue = info[0 ];
883-         assertIsArray (membersJSValue);
868+         assertIsArray (membersJSValue,  " generateSupplementKeys "  );
884869
885870        auto  membersJS = membersJSValue.As <Napi::Array>();
886871        uint32_t  arrayLength = membersJS.Length ();
0 commit comments