99
1010namespace session ::nodeapi {
1111
12+ Napi::Object member_to_js (const Napi::Env& env, const member& info, const member::Status& status) {
13+ auto obj = Napi::Object::New (env);
14+
15+ obj[" pubkeyHex" ] = toJs (env, info.session_id );
16+ obj[" name" ] = toJs (env, info.name );
17+ obj[" profilePicture" ] = toJs (env, info.profile_picture );
18+
19+ switch (status) {
20+ // invite statuses
21+ case member::Status::invite_unknown:
22+ obj[" memberStatus" ] = toJs (env, " INVITE_UNKNOWN" );
23+ break ;
24+ case member::Status::invite_not_sent:
25+ obj[" memberStatus" ] = toJs (env, " INVITE_NOT_SENT" );
26+ break ;
27+ case member::Status::invite_sending:
28+ obj[" memberStatus" ] = toJs (env, " INVITE_SENDING" );
29+ break ;
30+ case member::Status::invite_failed: obj[" memberStatus" ] = toJs (env, " INVITE_FAILED" ); break ;
31+ case member::Status::invite_sent: obj[" memberStatus" ] = toJs (env, " INVITE_SENT" ); break ;
32+ case member::Status::invite_accepted:
33+ obj[" memberStatus" ] = toJs (env, " INVITE_ACCEPTED" );
34+ break ;
35+
36+ // promotion statuses
37+ case member::Status::promotion_unknown:
38+ obj[" memberStatus" ] = toJs (env, " PROMOTION_UNKNOWN" );
39+ break ;
40+ case member::Status::promotion_not_sent:
41+ obj[" memberStatus" ] = toJs (env, " PROMOTION_NOT_SENT" );
42+ break ;
43+ case member::Status::promotion_sending:
44+ obj[" memberStatus" ] = toJs (env, " PROMOTION_SENDING" );
45+ break ;
46+ case member::Status::promotion_failed:
47+ obj[" memberStatus" ] = toJs (env, " PROMOTION_FAILED" );
48+ break ;
49+ case member::Status::promotion_sent:
50+ obj[" memberStatus" ] = toJs (env, " PROMOTION_SENT" );
51+ break ;
52+ case member::Status::promotion_accepted:
53+ obj[" memberStatus" ] = toJs (env, " PROMOTION_ACCEPTED" );
54+ break ;
55+
56+ // removed statuses
57+ case member::Status::removed_unknown:
58+ obj[" memberStatus" ] = toJs (env, " REMOVED_UNKNOWN" );
59+ break ;
60+ case member::Status::removed: obj[" memberStatus" ] = toJs (env, " REMOVED_MEMBER" ); break ;
61+ case member::Status::removed_including_messages:
62+ obj[" memberStatus" ] = toJs (env, " REMOVED_MEMBER_AND_MESSAGES" );
63+ break ;
64+
65+ default : throw std::runtime_error{" Invalid member status got as an enum" };
66+ }
67+
68+ // we display the "crown" on top of the member's avatar when this field is true
69+ obj[" nominatedAdmin" ] = toJs (env, info.admin );
70+
71+ return obj;
72+ };
73+
1274MetaGroupWrapper::MetaGroupWrapper (const Napi::CallbackInfo& info) :
1375 meta_group{std::move (MetaBaseWrapper::constructGroupWrapper (info, " MetaGroupWrapper" ))},
1476 Napi::ObjectWrap<MetaGroupWrapper>{info} {}
@@ -388,26 +450,28 @@ Napi::Value MetaGroupWrapper::infoDestroy(const Napi::CallbackInfo& info) {
388450
389451Napi::Value MetaGroupWrapper::memberGetAll (const Napi::CallbackInfo& info) {
390452 return wrapResult (info, [&] {
391- std::vector<session::config::groups::member> allMembers ;
453+ std::vector<Napi::Object> allMembersJs ;
392454 for (auto & member : *this ->meta_group ->members ) {
393- allMembers.push_back (member);
455+ allMembersJs.push_back (
456+ member_to_js (info.Env (), member, meta_group->members ->get_status (member)));
394457 }
395- return allMembers ;
458+ return allMembersJs ;
396459 });
397460}
398461
399462Napi::Value MetaGroupWrapper::memberGetAllPendingRemovals (const Napi::CallbackInfo& info) {
400463 return wrapResult (info, [&] {
401- std::vector<session::config::groups::member> allMembersRemoved ;
464+ std::vector<Napi::Object> allMembersRemovedJs ;
402465 for (auto & member : *this ->meta_group ->members ) {
403- auto memberStatus = member. status ( );
466+ auto memberStatus = this -> meta_group -> members -> get_status (member );
404467 if (memberStatus == member::Status::removed_unknown ||
405468 memberStatus == member::Status::removed ||
406469 memberStatus == member::Status::removed_including_messages) {
407- allMembersRemoved.push_back (member);
470+ allMembersRemovedJs.push_back (
471+ member_to_js (info.Env (), member, meta_group->members ->get_status (member)));
408472 }
409473 }
410- return allMembersRemoved ;
474+ return allMembersRemovedJs ;
411475 });
412476}
413477
@@ -417,7 +481,11 @@ Napi::Value MetaGroupWrapper::memberGet(const Napi::CallbackInfo& info) {
417481 assertIsString (info[0 ]);
418482
419483 auto pubkeyHex = toCppString (info[0 ], " memberGet" );
420- return meta_group->members ->get (pubkeyHex);
484+ auto existing = meta_group->members ->get (pubkeyHex);
485+
486+ return existing ? member_to_js (
487+ info.Env (), *existing, meta_group->members ->get_status (*existing))
488+ : info.Env ().Null ();
421489 });
422490}
423491
@@ -427,7 +495,8 @@ Napi::Value MetaGroupWrapper::memberGetOrConstruct(const Napi::CallbackInfo& inf
427495 assertIsString (info[0 ]);
428496
429497 auto pubkeyHex = toCppString (info[0 ], " memberGetOrConstruct" );
430- return meta_group->members ->get_or_construct (pubkeyHex);
498+ auto created = meta_group->members ->get_or_construct (pubkeyHex);
499+ return member_to_js (info.Env (), created, meta_group->members ->get_status (created));
431500 });
432501}
433502
@@ -439,7 +508,7 @@ Napi::Value MetaGroupWrapper::memberConstructAndSet(const Napi::CallbackInfo& in
439508 auto pubkeyHex = toCppString (info[0 ], " memberConstructAndSet" );
440509 auto created = meta_group->members ->get_or_construct (pubkeyHex);
441510 meta_group->members ->set (created);
442- return created;
511+ return member_to_js (info. Env (), created, meta_group-> members -> get_status (created)) ;
443512 });
444513}
445514
0 commit comments