From 989b33255430c19cee928774edcfd77539a9e2b9 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 00:28:14 +0000 Subject: [PATCH 1/2] fix: reject device signers for Solana wallets with contact sales message 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 --- packages/wallets/src/wallets/wallet-factory.ts | 8 +++++++- packages/wallets/src/wallets/wallet.ts | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/wallets/src/wallets/wallet-factory.ts b/packages/wallets/src/wallets/wallet-factory.ts index 73fdcb096..7241ccc7f 100644 --- a/packages/wallets/src/wallets/wallet-factory.ts +++ b/packages/wallets/src/wallets/wallet-factory.ts @@ -11,7 +11,7 @@ import type { Signer as SignerResponse, RegisterSignerParams, } from "../api"; -import { WalletCreationError, WalletNotAvailableError } from "../utils/errors"; +import { InvalidSignerError, WalletCreationError, WalletNotAvailableError } from "../utils/errors"; import { type Chain, validateChainForEnvironment } from "../chains/chains"; import type { ExternalWalletRegistrationConfig, PasskeySignerConfig, SignerConfigForChain } from "../signers/types"; import { Wallet } from "./wallet"; @@ -400,6 +400,12 @@ export class WalletFactory { return { signer }; } if (signer.type === "device") { + // Device signers are not supported for Solana wallets + if (chain === "solana") { + throw new InvalidSignerError( + "Device signers are not currently supported for Solana wallets. Contact sales (https://www.crossmint.com/contact/sales) for access." + ); + } // If the device signer already has a locator or public key (e.g., created via createDeviceSigner helper), use it directly if (signer.publicKey != null) { return { diff --git a/packages/wallets/src/wallets/wallet.ts b/packages/wallets/src/wallets/wallet.ts index 9f0471b6b..bf5dfab91 100644 --- a/packages/wallets/src/wallets/wallet.ts +++ b/packages/wallets/src/wallets/wallet.ts @@ -618,6 +618,13 @@ export class Wallet { ): Promise ? AddSignerReturnType : WalletSigner> { walletsLogger.info("wallet.addSigner.start"); + // Device signers are not supported for Solana wallets + if (signer.type === "device" && this.chain === "solana") { + throw new InvalidSignerError( + "Device signers are not currently supported for Solana wallets. Contact sales (https://www.crossmint.com/contact/sales) for access." + ); + } + // Resolve server signer config to locator string const resolvedSigner = typeof signer === "object" && "type" in signer && signer.type === "server" From f7ccb3d788a8f16bdae1d4334ad8a5e2633a87c2 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 00:29:28 +0000 Subject: [PATCH 2/2] chore: add changeset for device signer error handling Co-Authored-By: Alberto Elias --- .changeset/solana-device-signer-error.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/solana-device-signer-error.md diff --git a/.changeset/solana-device-signer-error.md b/.changeset/solana-device-signer-error.md new file mode 100644 index 000000000..fe0833a0b --- /dev/null +++ b/.changeset/solana-device-signer-error.md @@ -0,0 +1,5 @@ +--- +"@crossmint/wallets-sdk": patch +--- + +Reject device signers for Solana wallets with a clear error message instead of letting the request fail with a 500. Includes a contact sales link for access.