Connecting to Phantom Wallets

The Browser SDK provides the connect() method to establish connections with Phantom wallets, supporting both browser extension and embedded wallet types.

Basic Connection

Injected Provider (Browser Extension)

import { BrowserSDK } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({ providerType: "injected" });

async function connectToExtension() {
  try {
    const result = await sdk.connect();
    console.log("Connected addresses:", result.addresses);
    return result;
  } catch (error) {
    console.error("Connection failed:", error);
  }
}

Embedded Provider

import { BrowserSDK, AddressType } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({
  providerType: "embedded",
  addressTypes: [AddressType.solana, AddressType.ethereum],
  organizationId: "your-organization-id",
  apiBaseUrl: "https://api.phantom.app/v1/wallets"
});

async function connectEmbedded() {
  try {
    const result = await sdk.connect();
    console.log("Wallet ID:", result.walletId);
    console.log("Connected addresses:", result.addresses);
    return result;
  } catch (error) {
    console.error("Connection failed:", error);
  }
}

Connection Response

The connect() method returns:
interface ConnectResult {
  walletId: string;
  addresses: WalletAddress[];
}

interface WalletAddress {
  addressType: AddressType; // 'solana', 'ethereum', 'bitcoin', 'sui'
  address: string;
}

Example Response

{
  walletId: "wallet_123abc456def",
  addresses: [
    {
      addressType: "solana",
      address: "8UviJpZ7Q...x2"
    },
    {
      addressType: "ethereum", 
      address: "0x742d35...4686"
    }
  ]
}

Extension Detection

Check if Phantom extension is available before connecting:
function isPhantomExtensionAvailable(): boolean {
  return typeof window !== 'undefined' && 
         window.phantom?.solana?.isPhantom === true;
}

async function connectWithDetection() {
  if (!isPhantomExtensionAvailable()) {
    // Redirect to download or show embedded option
    window.open("https://phantom.app/download", "_blank");
    return;
  }

  const sdk = new BrowserSDK({ providerType: "injected" });
  return await sdk.connect();
}