bindings/node: add Conversation.createExternalInvite NAPI binding#3675
bindings/node: add Conversation.createExternalInvite NAPI binding#3675tylerhawkes wants to merge 9 commits into
Conversation
|
Claude finished @tylerhawkes's task —— View job PR Review Complete ✓Reviewed at: 2026-05-27 18:34 UTC SummaryClean, well-structured NAPI binding that correctly wraps the underlying Rust functionality. The code follows existing patterns in the codebase and includes appropriate validation. No significant issues found. Minor Observations
Verdict✅ Approve — no blocking issues. The binding is a thin, correct wrapper with appropriate validation. |
ApprovabilityVerdict: Approved This PR adds a Node.js binding that wraps existing Rust functionality for creating external invites. The changes are self-contained, involve straightforward type conversions, 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-l10-create-invite #3675 +/- ##
====================================================================
Coverage ? 83.90%
====================================================================
Files ? 402
Lines ? 59701
Branches ? 0
====================================================================
Hits ? 50092
Misses ? 9609
Partials ? 0 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
c12079b to
096e94d
Compare
f6de3b8 to
9c190fa
Compare
096e94d to
5ebf785
Compare
Dismissing prior approval to re-evaluate 9c190fa
… 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)
5ebf785 to
e8978a2
Compare
9c190fa to
df2c7b6
Compare
88884e2 to
47d1f52
Compare
Summary
NAPI binding for
MlsGroup::create_external_invite(PR-L10).bindings/node/src/conversation/external_invite.rs.Stack
Test plan
Note
Add
Conversation.createExternalInviteNAPI binding to node bindingscreateExternalInvitemethod toConversationin external_invite.rs, accepting optionalservicePointer(bytes) andexpiresAtNs(bigint) options.CreateExternalInviteOutputobject withinvitePayloadandencryptedGroupInfoasUint8Arrayvalues, converted from the underlying MLS group call.expiresAtNs: throws a napi error if the value is negative or exceedsu64range.Macroscope summarized df2c7b6.