feat(react): quorum-aware recovery handling in wallet providers - #2000
Open
Conversation
…e round-trip The API cannot store runtime member data (server secret, external-wallet onSign, passkey callbacks), so createWallet now grafts each user-provided quorum method onto the API member it identifies, with API identity fields winning. API members with no matching method pass through verbatim. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… held member
useSigner now resolves a config against the wallet's quorum members and
assembles the matched member as an admin signer under its API locator, with
an optional { quorumLocator } to force the member interpretation. Device-signer
recovery reuses a member previously selected this session, replacing the last
QuorumSignerNotSupportedError guards with working flows or actionable errors.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
All provider recovery checks now descend into quorum members: RN WebView init, RN passkey rejection, web passkey helpers, email auto-population (exactly-one rule), and the external-wallet address guard. Documents the quorum recovery form in READMEs and the reference generator. WAL-11294 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: 2ab673a The changes in this PR will be included in the next version bump. This PR includes changesets to release 8 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Contributor
|
Reviews (1): Last reviewed commit: "feat(react): quorum-aware recovery handl..." | Re-trigger Greptile |
panosinthezone
force-pushed
the
panos/wal-11292-m4-4-sdk-quorum-aware-recovery-identity-usesigner
branch
from
July 30, 2026 20:43
87e7fca to
186a28a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
M4-6 of the quorum recovery milestone: audits the React / React Native providers for the create-side quorum
recoverywidening (WAL-11290) and fixes every check that assumed a flat single-signer recovery. Stacked on the M4-4 stack (#1997 → #1998 → #1999 → #1996).All five flat-recovery checks now descend into quorum
methodsvia a new sharedrecoverySignershelper in react-base:initializeWebViewIfNeeded): a quorum containing an email/phone member now boots the hidden signer WebView before wallet creation — previously it never initialized and creation crashed with "WebView not ready or handshake incomplete". Resolves theTODO(WAL-11294)left by M4-4. Member-aware: an all-external-wallet quorum still skips the WebView.recovery.methodsis now rejected with the same clearPASSKEY_RN_ERRORas a flat passkey recovery (both the mount-time check andcreateWallet).emailis auto-filled from the logged-in user — only when exactly one email member is incomplete; filling several with the same address would create duplicate members (which the API rejects), so those configs pass through and validation surfaces the real problem.address(previously create fired prematurely).Verification-only findings (no code needed): the OTP /
onAuthRequiredflow is already recovery-shape-agnostic — it keys off the active signer instance's(type, locator), and the device-signer-while-recovering fallback (activeAuthEmail/activeAuthPhone) already covers a quorum member driving OTP. Known limitation flagged for M4-7:useSignerAuthholds a single set of send/verify/reject refs, so two members needing OTP concurrently would clobber — unreachable at launch (threshold = 1).Docs: quorum
recoveryexamples in the react-ui / react-native / wallets READMEs (RN notes that passkey quorum members are rejected),examples.jsonsnippets, and the reference generator'srecoveryfallback now rendersRecoveryConfigForChainwith quorum prose.Test plan
quorum-recovery.test.tsin react-base:recoverySignersflat/quorum/undefined,recoveryNeedsEmailAutoFillexactly-one semantics,fillRecoveryEmailfill/no-mutation/pass-through cases. Full react-base suite: 23 pass.--noEmitfor react-base, react-ui, react-native: 0 errors in src (only pre-existing env noise).@crossmint/client-sdk-react-baseand@crossmint/client-sdk-react-native-ui.Checklist
🤖 Generated with Claude Code