{"_id":"@b3dotfun/anyspend-x402-solana-wallet-adapter","_rev":"2-ebe248def91e91048df303674c77f5f0","name":"@b3dotfun/anyspend-x402-solana-wallet-adapter","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@b3dotfun/anyspend-x402-solana-wallet-adapter","version":"0.1.0","keywords":["x402","anyspend","solana","wallet-adapter","payment-protocol","web3","payments","cryptocurrency","browser-wallet"],"author":{"name":"b3-fun"},"license":"Apache-2.0","_id":"@b3dotfun/anyspend-x402-solana-wallet-adapter@0.1.0","maintainers":[{"name":"max-b3","email":"max@npclabs.org"},{"name":"npclabs","email":"sean@npclabs.org"},{"name":"gionpclabs","email":"gio@npclabs.org"},{"name":"alex-kaffetzakis","email":"alex@kaffetzakis.com"},{"name":"b3_david","email":"davidnguyen@npclabs.org"},{"name":"anqt-dev","email":"anqtran36@gmail.com"},{"name":"wojb3","email":"wojtek@npclabs.org"},{"name":"mitchmyburgh","email":"mitchmyburgh@gmail.com"},{"name":"trung.npclabs","email":"trung@npclabs.org"},{"name":"mikedutuandu","email":"mike@npclabs.org"}],"homepage":"https://github.com/b3-fun/anyspend-x402#readme","bugs":{"url":"https://github.com/b3-fun/anyspend-x402/issues"},"dist":{"shasum":"8a6d727358d861af4377bd7d45669e8ab65f3e06","tarball":"https://registry.npmjs.org/@b3dotfun/anyspend-x402-solana-wallet-adapter/-/anyspend-x402-solana-wallet-adapter-0.1.0.tgz","fileCount":8,"integrity":"sha512-ncV7mLiVQJs1sfoHB/FMMjqSzZLz30+Y/8c3oNCC4posHDNpzT5JWWKC2GyxaJJRQUr8UWQhsWjkokVYyb1UAw==","signatures":[{"sig":"MEUCIQDciQ6uDDFLi1hD5HgoCPQgpOWu80Lgod5T9wZ26GOG9QIgU03VrosTWNcPhQvHq40M/RKdUCileS5vcWHgar4vfnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47672},"main":"./dist/cjs/index.js","_from":"file:b3dotfun-anyspend-x402-solana-wallet-adapter-0.1.0.tgz","types":"./dist/cjs/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.mts","default":"./dist/esm/index.mjs"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}}},"scripts":{"lint":"eslint . --ext .ts --fix","build":"tsup","watch":"tsc --watch","format":"prettier -c .prettierrc --write \"**/*.{ts,js,cjs,json,md}\"","lint:check":"eslint . --ext .ts","format:check":"prettier -c .prettierrc --check \"**/*.{ts,js,cjs,json,md}\""},"_npmUser":{"name":"anqt-dev","email":"anqtran36@gmail.com"},"_resolved":"/private/var/folders/3h/t371gs6d3gj5fknk2x2qqs0h0000gn/T/4e30628c538784e49ab2eae527a73276/b3dotfun-anyspend-x402-solana-wallet-adapter-0.1.0.tgz","_integrity":"sha512-ncV7mLiVQJs1sfoHB/FMMjqSzZLz30+Y/8c3oNCC4posHDNpzT5JWWKC2GyxaJJRQUr8UWQhsWjkokVYyb1UAw==","repository":{"url":"git+https://github.com/b3-fun/anyspend-x402.git","type":"git"},"_npmVersion":"10.9.0","description":"Solana wallet-adapter bridge for x402 payment protocol - Connects @solana/wallet-adapter (v1) with x402 library (v2)","directories":{},"_nodeVersion":"23.3.0","dependencies":{"@b3dotfun/anyspend-x402":"^0.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.4.0","react":"^18.0.0","eslint":"^9.24.0","prettier":"3.5.2","@eslint/js":"^9.24.0","typescript":"^5.7.3","@solana/kit":"^2.3.0","@types/node":"^22.13.4","@types/react":"^18.0.0","@solana/web3.js":"^1.98.4","eslint-plugin-jsdoc":"^50.6.9","eslint-plugin-import":"^2.31.0","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.29.1","@solana/wallet-adapter-base":"^0.9.23","@solana/wallet-adapter-react":"^0.15.0","@solana/wallet-adapter-react-ui":"^0.9.0","@typescript-eslint/eslint-plugin":"^8.29.1"},"peerDependencies":{"react":"^18.0.0","@solana/kit":"^2.3.0","@solana/web3.js":"^1.90.0","@solana/wallet-adapter-base":"^0.9.0","@solana/wallet-adapter-react":"^0.15.0","@solana/wallet-adapter-react-ui":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/anyspend-x402-solana-wallet-adapter_0.1.0_1762545343149_0.6433942041748879","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-07T19:55:43.041Z","modified":"2026-02-02T15:42:52.023Z","0.1.0":"2025-11-07T19:55:43.341Z"},"bugs":{"url":"https://github.com/b3-fun/anyspend-x402/issues"},"author":{"name":"b3-fun"},"license":"Apache-2.0","homepage":"https://github.com/b3-fun/anyspend-x402#readme","keywords":["x402","anyspend","solana","wallet-adapter","payment-protocol","web3","payments","cryptocurrency","browser-wallet"],"repository":{"url":"git+https://github.com/b3-fun/anyspend-x402.git","type":"git"},"description":"Solana wallet-adapter bridge for x402 payment protocol - Connects @solana/wallet-adapter (v1) with x402 library (v2)","maintainers":[{"email":"max@npclabs.org","name":"max-b3"},{"email":"sean@npclabs.org","name":"npclabs"},{"email":"gio@npclabs.org","name":"gionpclabs"},{"email":"davidnguyen@npclabs.org","name":"b3_david"},{"email":"anqtran36@gmail.com","name":"anqt-dev"},{"email":"mitchmyburgh@gmail.com","name":"mitchmyburgh"},{"email":"trung@npclabs.org","name":"trung.npclabs"},{"email":"mike@npclabs.org","name":"mikedutuandu"}],"readme":"# @b3dotfun/anyspend-x402-solana-wallet-adapter\n\nSolana wallet-adapter bridge for x402 payment protocol. Connects `@solana/wallet-adapter` (v1 format) with x402 library (v2 format).\n\n## Why This Package?\n\nThe x402 library uses `@solana/kit` v2 (`TransactionSigner` interface), while browser wallet adapters use `@solana/web3.js` v1 (`VersionedTransaction` format). This package bridges the gap, allowing you to use popular Solana wallets (Phantom, Solflare, Ledger, etc.) with x402 payments.\n\n## Installation\n\n```bash\nnpm install @b3dotfun/anyspend-x402-solana-wallet-adapter\n# or\npnpm add @b3dotfun/anyspend-x402-solana-wallet-adapter\n# or\nyarn add @b3dotfun/anyspend-x402-solana-wallet-adapter\n```\n\n**Peer Dependencies** (usually already installed in browser apps):\n\n```bash\nnpm install @solana/wallet-adapter-base @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/web3.js react\n```\n\n## Features\n\n- ✅ **Transaction Signer Bridge** - Converts between wallet-adapter v1 and x402 v2 formats\n- ✅ **Type-Safe React Components** - Properly typed wallet adapter components with fixed React type compatibility\n- ✅ **Full TypeScript Support** - Complete type definitions for all exports\n- ✅ **All Wallets Supported** - Works with any `@solana/wallet-adapter` compatible wallet\n\n## Usage\n\n### Setting Up Wallet Provider\n\nThis package exports properly-typed React components that fix TypeScript compatibility issues with newer React versions:\n\n```typescript\nimport {\n  ConnectionProvider,\n  WalletProvider,\n  WalletModalProvider,\n} from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { useMemo } from \"react\";\n\nfunction App() {\n  const endpoint = useMemo(() => \"https://api.mainnet-beta.solana.com\", []);\n  const wallets = useMemo(() => [new PhantomWalletAdapter()], []);\n\n  return (\n    <ConnectionProvider endpoint={endpoint}>\n      <WalletProvider wallets={wallets} autoConnect={false}>\n        <WalletModalProvider>\n          {/* Your app components */}\n        </WalletModalProvider>\n      </WalletProvider>\n    </ConnectionProvider>\n  );\n}\n```\n\n### Making Payments\n\n```typescript\nimport {\n  createWalletAdapterSigner,\n  useWallet,\n  WalletMultiButton,\n} from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\nimport { wrapFetchWithPayment } from \"@b3dotfun/anyspend-x402-fetch\";\n\nfunction MyComponent() {\n  const { publicKey, signAllTransactions, connected } = useWallet();\n\n  const fetchData = async () => {\n    if (!connected || !publicKey || !signAllTransactions) return;\n\n    // Create a signer adapter for the connected wallet\n    const signer = createWalletAdapterSigner(\n      publicKey.toBase58(),\n      signAllTransactions\n    );\n\n    // Wrap fetch with payment capability\n    const fetchWithPayment = wrapFetchWithPayment(fetch, signer);\n\n    // Make payment request\n    const response = await fetchWithPayment(\"https://api.example.com/premium-data\");\n    const data = await response.json();\n    return data;\n  };\n\n  return (\n    <div>\n      <WalletMultiButton />\n      <button onClick={fetchData} disabled={!connected}>\n        Get Premium Data\n      </button>\n    </div>\n  );\n}\n```\n\n### With Custom RPC and Callbacks\n\n```typescript\nimport { createWalletAdapterSigner } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\nimport { wrapFetchWithPayment } from \"@b3dotfun/anyspend-x402-fetch\";\n\nconst signer = createWalletAdapterSigner(publicKey.toBase58(), signAllTransactions, count =>\n  console.log(`Signing ${count} transaction(s)...`),\n);\n\nconst fetchWithPayment = wrapFetchWithPayment(\n  fetch,\n  signer,\n  undefined, // maxValue - let server determine\n  undefined, // payment selector\n  { svmConfig: { rpcUrl: \"https://api.mainnet-beta.solana.com\" } },\n);\n```\n\n### Complete React Example\n\n```typescript\nimport {\n  createWalletAdapterSigner,\n  useWallet,\n  WalletMultiButton,\n} from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\nimport { wrapFetchWithPayment } from \"@b3dotfun/anyspend-x402-fetch\";\nimport { useState } from \"react\";\n\nexport function PremiumContent() {\n  const { publicKey, signAllTransactions, connected } = useWallet();\n  const [data, setData] = useState(null);\n  const [loading, setLoading] = useState(false);\n\n  const fetchPremiumData = async () => {\n    if (!connected || !publicKey || !signAllTransactions) {\n      alert('Please connect your wallet');\n      return;\n    }\n\n    setLoading(true);\n    try {\n      // Create signer adapter\n      const signer = createWalletAdapterSigner(\n        publicKey.toBase58(),\n        signAllTransactions,\n        (count) => console.log(`Please sign ${count} transaction(s)`)\n      );\n\n      // Wrap fetch with payment\n      const fetchWithPayment = wrapFetchWithPayment(\n        fetch,\n        signer,\n        undefined,\n        undefined,\n        { svmConfig: { rpcUrl: 'https://api.mainnet-beta.solana.com' } }\n      );\n\n      // Make payment request\n      const response = await fetchWithPayment('https://api.example.com/premium');\n      const result = await response.json();\n\n      setData(result);\n    } catch (error) {\n      console.error('Payment failed:', error);\n      alert(error.message);\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <div>\n      <WalletMultiButton />\n\n      <button\n        onClick={fetchPremiumData}\n        disabled={!connected || loading}\n      >\n        {loading ? 'Processing...' : 'Get Premium Data (Pay with USDC)'}\n      </button>\n\n      {data && <pre>{JSON.stringify(data, null, 2)}</pre>}\n    </div>\n  );\n}\n```\n\n## API Reference\n\n### Core Function\n\n#### `createWalletAdapterSigner(walletAddress, signAllTransactions, onSign?)`\n\nCreates a `TransactionSigner` compatible with x402 from a wallet adapter.\n\n**Parameters:**\n\n- `walletAddress` (string): The wallet's public key as base58 string (e.g., `publicKey.toBase58()`)\n- `signAllTransactions` (function): The wallet adapter's `signAllTransactions` function\n- `onSign` (optional function): Callback invoked when signing starts, receives transaction count\n\n**Returns:**\n\n- `TransactionSigner`: Signer instance for use with `wrapFetchWithPayment`\n\n**Example:**\n\n```typescript\nconst signer = createWalletAdapterSigner(publicKey.toBase58(), signAllTransactions, count =>\n  setStatus(`Signing ${count} transaction(s)...`),\n);\n```\n\n### React Components\n\nThis package re-exports properly-typed React components from `@solana/wallet-adapter-react` and `@solana/wallet-adapter-react-ui` with fixed TypeScript compatibility:\n\n#### `ConnectionProvider`\n\nProvides Solana RPC connection context to child components.\n\n```typescript\nimport { ConnectionProvider } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n\n<ConnectionProvider endpoint=\"https://api.mainnet-beta.solana.com\">\n  {children}\n</ConnectionProvider>;\n```\n\n#### `WalletProvider`\n\nProvides wallet connection and management to child components.\n\n```typescript\nimport { WalletProvider } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n\n<WalletProvider wallets={wallets} autoConnect={false}>\n  {children}\n</WalletProvider>;\n```\n\n#### `WalletModalProvider`\n\nProvides modal UI for wallet selection.\n\n```typescript\nimport { WalletModalProvider } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n\n<WalletModalProvider>{children}</WalletModalProvider>;\n```\n\n#### `WalletMultiButton`\n\nPre-built wallet connect/disconnect button component.\n\n```typescript\nimport { WalletMultiButton } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n\n<WalletMultiButton className=\"my-wallet-button\" />;\n```\n\n#### `useWallet()`\n\nReact hook to access wallet connection state and functions.\n\n```typescript\nimport { useWallet } from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n\nconst { publicKey, connected, signAllTransactions } = useWallet();\n```\n\n## How It Works\n\n### The v1 ↔ v2 Bridge\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ Browser Wallet (Phantom, Solflare, etc.)                │\n│ Format: @solana/web3.js v1 VersionedTransaction         │\n└─────────────────────────────────────────────────────────┘\n                        ↓ signAllTransactions()\n┌─────────────────────────────────────────────────────────┐\n│ createWalletAdapterSigner (THIS PACKAGE)                │\n│ Converts: v2 Transaction → v1 VersionedTransaction      │\n│           Signed v1 → v2 signature format                │\n└─────────────────────────────────────────────────────────┘\n                        ↓ TransactionSigner interface\n┌─────────────────────────────────────────────────────────┐\n│ x402 Library (@b3dotfun/anyspend-x402)                  │\n│ Format: @solana/kit v2 Transaction                      │\n└─────────────────────────────────────────────────────────┘\n```\n\n### Transaction Flow\n\n1. **x402 creates v2 transaction** with `messageBytes` and `signatures` object\n2. **Adapter converts to v1** by serializing to `VersionedTransaction`\n3. **Wallet signs v1 transaction** via `signAllTransactions()`\n4. **Adapter extracts signatures** back to v2 format (address → Uint8Array)\n5. **x402 broadcasts** the signed transaction\n\n## Supported Wallets\n\nThis adapter works with any wallet that implements the `@solana/wallet-adapter` standard:\n\n- ✅ Phantom\n- ✅ Solflare\n- ✅ Ledger\n- ✅ Trezor\n- ✅ Trust Wallet\n- ✅ Coinbase Wallet\n- ✅ And any other wallet-adapter compatible wallet\n\n## TypeScript Support\n\nFull TypeScript support with exported types:\n\n```typescript\nimport {\n  createWalletAdapterSigner,\n  type TransactionSigner,\n} from \"@b3dotfun/anyspend-x402-solana-wallet-adapter\";\n```\n\n## Related Packages\n\n- [`@b3dotfun/anyspend-x402`](https://www.npmjs.com/package/@b3dotfun/anyspend-x402) - Core x402 library\n- [`@b3dotfun/anyspend-x402-fetch`](https://www.npmjs.com/package/@b3dotfun/anyspend-x402-fetch) - Fetch integration\n- [`@b3dotfun/anyspend-x402-axios`](https://www.npmjs.com/package/@b3dotfun/anyspend-x402-axios) - Axios integration\n- [`@solana/wallet-adapter-react`](https://www.npmjs.com/package/@solana/wallet-adapter-react) - React wallet adapter\n\n## Examples\n\nSee the [fullstack example](https://github.com/b3-fun/anyspend-x402/tree/main/examples/typescript/fullstack/anyspend) for a complete implementation.\n\n## License\n\nApache-2.0\n\n## Contributing\n\nContributions welcome! Please open an issue or PR on [GitHub](https://github.com/b3-fun/anyspend-x402).\n","readmeFilename":"README.md"}