@@ -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