bindings/node: add Client.joinGroupByExternalInvite NAPI binding#3676
bindings/node: add Client.joinGroupByExternalInvite NAPI binding#3676tylerhawkes wants to merge 10 commits into
Conversation
|
Claude finished @tylerhawkes's task —— View job PR ReviewTodo List
Code Review — 2026-05-27 18:34 UTCThe binding implementation is clean and follows established patterns in the codebase. I have one minor observation: ObservationGetter method clones unnecessarily (bindings/node/src/client/external_invite.rs:25-27) The
No change needed — this follows the existing NAPI patterns and performs acceptably. Summary✅ Code quality: Clean, idiomatic NAPI binding The implementation correctly wraps the Rust functionality and maintains the expected contract for external invite joining. |
ApprovabilityVerdict: Approved This PR adds a Node.js NAPI binding that wraps an existing Rust method without introducing new business logic. The changes are a standard binding layer with type marshaling, and the author owns all modified files. No code changes detected at You can customize Macroscope's approvability policy. Learn more. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## tyler/qr-invite-l11-join-by-invite #3676 +/- ##
=====================================================================
Coverage ? 83.63%
=====================================================================
Files ? 403
Lines ? 59878
Branches ? 0
=====================================================================
Hits ? 50079
Misses ? 9799
Partials ? 0 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
df41a55 to
dab038e
Compare
dab038e to
f0d63d4
Compare
e9e80a9 to
66f7743
Compare
… generic AppDataUpdate intent Defense-in-depth master switch + per-component declarative external committer authorization for the QR-invite flow (MLS External Commits, RFC 9420 §12.4.3.2). - ComponentId::EXTERNAL_COMMIT_POLICY = 0x800C in xmtp_mls_common. - Type-dispatch entry: ComponentType::Bytes for the new id. - crates/xmtp_mls/src/groups/external_commit_policy.rs (new file): - load_external_commit_policy(group) -> Option<ExternalCommitPolicyV1> - is_external_commit_allowed(group) -> bool - external_committer_permissions_for(group, id) -> Option<ComponentPermissions> - MlsGroup::set_external_commit_policy(policy) — granular setter writes the full ExternalCommitPolicyV1 via the generic AppDataUpdate intent (AppDataUpdateOp::Replace, since the component is full-replace Bytes-typed). - MlsGroup::set_allow_external_commit(bool) — sugar wrapper. Depends on L-0 (generic IntentKind::AppDataUpdate) for the intent machinery. No new IntentKind variant added — the generic path covers this and every future full-replace component setter. No bootstrap synth: absent EXTERNAL_COMMIT_POLICY = disabled default. First setter call creates the entry via AppDataUpdateOperation::Update upsert semantics. Zero risk of cross-client serialization drift.
… + encrypted GroupInfo)
66f7743 to
b5b3b51
Compare
f0d63d4 to
a6ec61d
Compare
b5b9a53 to
3056397
Compare
Summary
NAPI binding for
Client::join_group_by_external_invite(PR-L11).bindings/node/src/client/external_invite.rs.Stack
Test plan
Note
Add
Client.joinGroupByExternalInviteNAPI binding to Node bindingsAdds an async
join_group_by_external_invitemethod to the Node.jsClientbinding in external_invite.rs. The method acceptsinvite_payloadandencrypted_group_infoasUint8Array, delegates to the inner client, and returns a newJoinGroupByExternalInviteOutputobject exposing the joinedConversationand arefreshed_encrypted_group_infoUint8Array.Macroscope summarized b5b3b51.