@@ -140,7 +140,7 @@ void MetaGroupWrapper::Init(Napi::Env env, Napi::Object exports) {
140
140
InstanceMethod (" keysNeedsRekey" , &MetaGroupWrapper::keysNeedsRekey),
141
141
InstanceMethod (" keyRekey" , &MetaGroupWrapper::keyRekey),
142
142
InstanceMethod (" keyGetAll" , &MetaGroupWrapper::keyGetAll),
143
- InstanceMethod (" currentHashes " , &MetaGroupWrapper::currentHashes ),
143
+ InstanceMethod (" activeHashes " , &MetaGroupWrapper::activeHashes ),
144
144
InstanceMethod (" loadKeyMessage" , &MetaGroupWrapper::loadKeyMessage),
145
145
InstanceMethod (" keyGetCurrentGen" , &MetaGroupWrapper::keyGetCurrentGen),
146
146
InstanceMethod (" encryptMessages" , &MetaGroupWrapper::encryptMessages),
@@ -244,35 +244,21 @@ void MetaGroupWrapper::metaConfirmPushed(const Napi::CallbackInfo& info) {
244
244
auto groupMember = obj.Get (" groupMember" );
245
245
246
246
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);
252
250
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));
259
253
}
260
254
261
255
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);
267
259
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));
276
262
}
277
263
});
278
264
};
@@ -283,17 +269,17 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
283
269
auto arg = info[0 ];
284
270
assertIsObject (arg);
285
271
auto obj = arg.As <Napi::Object>();
286
-
287
272
auto groupInfo = obj.Get (" groupInfo" );
288
273
auto groupMember = obj.Get (" groupMember" );
289
274
auto groupKeys = obj.Get (" groupKeys" );
290
275
291
276
auto count_merged = 0 ;
292
277
278
+
293
279
// Note: we need to process keys first as they might allow us the incoming info+members
294
280
// details
295
281
if (!groupKeys.IsNull () && !groupKeys.IsUndefined ()) {
296
- assertIsArray (groupKeys);
282
+ assertIsArray (groupKeys, " metaMerge groupKeys " );
297
283
auto asArr = groupKeys.As <Napi::Array>();
298
284
299
285
for (uint32_t i = 0 ; i < asArr.Length (); i++) {
@@ -318,13 +304,13 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
318
304
timestamp_ms,
319
305
*(this ->meta_group ->info ),
320
306
*(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
322
308
// all keys are for us.
323
309
}
324
310
}
325
311
326
312
if (!groupInfo.IsNull () && !groupInfo.IsUndefined ()) {
327
- assertIsArray (groupInfo);
313
+ assertIsArray (groupInfo, " metaMerge groupInfo " );
328
314
auto asArr = groupInfo.As <Napi::Array>();
329
315
330
316
std::vector<std::pair<std::string, std::vector<unsigned char >>> conf_strs;
@@ -349,9 +335,8 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
349
335
count_merged += info_merged.size ();
350
336
}
351
337
}
352
-
353
338
if (!groupMember.IsNull () && !groupMember.IsUndefined ()) {
354
- assertIsArray (groupMember);
339
+ assertIsArray (groupMember, " metaMerge groupMember " );
355
340
auto asArr = groupMember.As <Napi::Array>();
356
341
357
342
std::vector<std::pair<std::string, std::vector<unsigned char >>> conf_strs;
@@ -376,7 +361,6 @@ Napi::Value MetaGroupWrapper::metaMerge(const Napi::CallbackInfo& info) {
376
361
count_merged += member_merged.size ();
377
362
}
378
363
}
379
-
380
364
if (this ->meta_group ->keys ->needs_rekey ()) {
381
365
this ->meta_group ->keys ->rekey (*(this ->meta_group ->info ), *(this ->meta_group ->members ));
382
366
}
@@ -693,7 +677,7 @@ void MetaGroupWrapper::membersMarkPendingRemoval(const Napi::CallbackInfo& info)
693
677
auto toUpdateJSValue = info[0 ];
694
678
auto withMessageJSValue = info[1 ];
695
679
696
- assertIsArray (toUpdateJSValue);
680
+ assertIsArray (toUpdateJSValue, " membersMarkPendingRemoval " );
697
681
assertIsBoolean (withMessageJSValue);
698
682
bool withMessages = toCppBoolean (withMessageJSValue, " membersMarkPendingRemoval" );
699
683
@@ -714,7 +698,7 @@ Napi::Value MetaGroupWrapper::memberEraseAndRekey(const Napi::CallbackInfo& info
714
698
assertInfoLength (info, 1 );
715
699
auto toRemoveJSValue = info[0 ];
716
700
717
- assertIsArray (toRemoveJSValue);
701
+ assertIsArray (toRemoveJSValue, " memberEraseAndRekey " );
718
702
719
703
auto toRemoveJS = toRemoveJSValue.As <Napi::Array>();
720
704
auto rekeyed = false ;
@@ -771,23 +755,24 @@ Napi::Value MetaGroupWrapper::keyGetCurrentGen(const Napi::CallbackInfo& info) {
771
755
});
772
756
}
773
757
774
- Napi::Value MetaGroupWrapper::currentHashes (const Napi::CallbackInfo& info) {
758
+ Napi::Value MetaGroupWrapper::activeHashes (const Napi::CallbackInfo& info) {
775
759
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 ();
779
763
std::vector<std::string> merged;
780
764
std::copy (std::begin (keysHashes), std::end (keysHashes), std::back_inserter (merged));
781
765
std::copy (std::begin (infoHashes), std::end (infoHashes), std::back_inserter (merged));
782
766
std::copy (std::begin (memberHashes), std::end (memberHashes), std::back_inserter (merged));
767
+
783
768
return merged;
784
769
});
785
770
}
786
771
787
772
Napi::Value MetaGroupWrapper::encryptMessages (const Napi::CallbackInfo& info) {
788
773
return wrapResult (info, [&] {
789
774
assertInfoLength (info, 1 );
790
- assertIsArray (info[0 ]);
775
+ assertIsArray (info[0 ], " encryptMessages " );
791
776
792
777
auto plaintextsJS = info[0 ].As <Napi::Array>();
793
778
uint32_t arrayLength = plaintextsJS.Length ();
@@ -880,7 +865,7 @@ Napi::Value MetaGroupWrapper::generateSupplementKeys(const Napi::CallbackInfo& i
880
865
return wrapResult (info, [&] {
881
866
assertInfoLength (info, 1 );
882
867
auto membersJSValue = info[0 ];
883
- assertIsArray (membersJSValue);
868
+ assertIsArray (membersJSValue, " generateSupplementKeys " );
884
869
885
870
auto membersJS = membersJSValue.As <Napi::Array>();
886
871
uint32_t arrayLength = membersJS.Length ();
0 commit comments