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. 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"