Skip to content

fix: reject device signers for Solana wallets with contact sales message#1720

Closed
albertoelias-crossmint wants to merge 2 commits intowallets-v1from
devin/WAL-9474-1774052550-solana-device-signer-error
Closed

fix: reject device signers for Solana wallets with contact sales message#1720
albertoelias-crossmint wants to merge 2 commits intowallets-v1from
devin/WAL-9474-1774052550-solana-device-signer-error

Conversation

@albertoelias-crossmint
Copy link
Collaborator

@albertoelias-crossmint albertoelias-crossmint commented Mar 21, 2026

Description

Fixes WAL-9474. Device signers (P256-based) are not currently supported for Solana wallets. Previously, attempting to register one would hit the server and return a 500. This PR adds client-side guards that reject device signers early with a clear InvalidSignerError including a contact sales link.

Two entry points are guarded:

  • Wallet.addSigner — rejects device signers when this.chain === "solana"
  • WalletFactory.registerSigners — rejects device signers when chain === "solana" during wallet creation

Items for reviewer:

  • wallet.ts uses this.chain === "solana" for the check. The class has a isSolanaWallet() helper — verify whether that should be used instead for consistency.
  • Confirm InvalidSignerError is already in scope in wallet.ts (no import was added in the diff).
  • No unit tests were added for the new error paths.

Test plan

  • Lint passes (pnpm lint)
  • Existing vitest suite passes (pnpm test:vitest)
  • Manually verified error message matches the "contact sales" pattern used elsewhere in the codebase

Package updates

  • @crossmint/wallets-sdk: patch (changeset added via .changeset/solana-device-signer-error.md)

Link to Devin session: https://crossmint.devinenterprise.com/sessions/1c1845672cb94db9a8f27f85b77226d0
Requested by: @albertoelias-crossmint


Open with Devin

devin-ai-integration bot and others added 2 commits March 21, 2026 00:28
Device signers are not currently supported for Solana wallets.
Instead of letting the request hit the API and fail with a 500,
throw an InvalidSignerError client-side with a contact sales message.

WAL-9474

Co-Authored-By: Alberto Elias <alberto.elias@paella.dev>
Co-Authored-By: Alberto Elias <alberto.elias@paella.dev>
@devin-ai-integration
Copy link
Contributor

Original prompt from Alberto Elias

'Registering Solana device signer returns 500 on iOS' (WAL-9474)

User instruction: @devin we dont expect to support device signer in solana right now in either crossbit-main or in crossmint-sdk wallets-v1 branch. it shouldnt be a 500, we should throw the appropriate error which should include a contact sales message like we do elsewhere

@devin-ai-integration
Copy link
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@changeset-bot
Copy link

changeset-bot bot commented Mar 21, 2026

🦋 Changeset detected

Latest commit: f7ccb3d

The changes in this PR will be included in the next version bump.

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

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 21, 2026

Last reviewed commit: "chore: add changeset..."

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 2 additional findings.

Open in Devin Review

@github-actions
Copy link
Contributor

🔥 Smoke Test Results

Status: Passed

Statistics

  • Total Tests: 5
  • Passed: 5 ✅
  • Failed: 0
  • Skipped: 0
  • Duration: 3.54 min

✅ All smoke tests passed!

All critical flows are working correctly.


This is a non-blocking smoke test. Full regression tests run separately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant