{"_id":"@authjs-web3-providers/solana","name":"@authjs-web3-providers/solana","dist-tags":{"latest":"0.5.0"},"versions":{"0.5.0":{"name":"@authjs-web3-providers/solana","version":"0.5.0","description":"AuthJS Web3 Providers for Solana","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"dependencies":{"@solana/web3.js":"^1.87.6","next-auth":"^4.24.11","tweetnacl":"~1.0.3","@authjs-web3-providers/core":"0.5.0"},"devDependencies":{"@types/jest":"^29.5.0","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","eslint":"^9.24.0","jest":"^29.0.0","ts-jest":"^29.0.0","typedoc":"^0.24.0","typescript":"^5.0.0"},"keywords":["auth","web3","solana","next-auth","authentication"],"author":{"name":"palsergech"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/palsergech/authjs-web3-providers.git"},"bugs":{"url":"https://github.com/palsergech/authjs-web3-providers/issues"},"homepage":"https://github.com/palsergech/authjs-web3-providers#readme","publishConfig":{"access":"public"},"jest":{"preset":"ts-jest","testEnvironment":"node","testMatch":["**/__tests__/**/*.test.ts"],"moduleFileExtensions":["ts","js","json"]},"scripts":{"build":"tsc -p .","watch":"tsc -p . --watch","test":"jest","test:watch":"jest --watch","lint":"eslint src/**/*.ts","docs":"typedoc --out docs src"},"_id":"@authjs-web3-providers/solana@0.5.0","_integrity":"sha512-zOmn7Al3DgGaFingJpTZdUjhxlJFxHpNvd76KK7BUDlToyirs2uNIgCIYGPuwI7vo0SHjka8ErMT66s+SLwj1g==","_resolved":"/tmp/e1f2e466fdc76de40a49f25694d4fefd/authjs-web3-providers-solana-0.5.0.tgz","_from":"file:authjs-web3-providers-solana-0.5.0.tgz","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-zOmn7Al3DgGaFingJpTZdUjhxlJFxHpNvd76KK7BUDlToyirs2uNIgCIYGPuwI7vo0SHjka8ErMT66s+SLwj1g==","shasum":"dcfbc65410df72bdc40860190d08dedc7ad3a828","tarball":"https://registry.npmjs.org/@authjs-web3-providers/solana/-/solana-0.5.0.tgz","fileCount":21,"unpackedSize":19472,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC6RepS8d8xaP8oLU0+qNkrFyQZqVLKHovT8o/0MVoe7wIhAMVf3aFlHhRDUxTkg+HAUGOPYdM/mB3XYFSovMAwM7Q/"}]},"_npmUser":{"name":"palsergech","email":"paulpaulych@gmail.com"},"directories":{},"maintainers":[{"name":"palsergech","email":"paulpaulych@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/solana_0.5.0_1744303590641_0.8852320645496985"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-10T16:46:30.562Z","0.5.0":"2025-04-10T16:46:30.812Z","modified":"2025-04-10T16:46:31.110Z"},"maintainers":[{"name":"palsergech","email":"paulpaulych@gmail.com"}],"description":"AuthJS Web3 Providers for Solana","homepage":"https://github.com/palsergech/authjs-web3-providers#readme","keywords":["auth","web3","solana","next-auth","authentication"],"repository":{"type":"git","url":"git+https://github.com/palsergech/authjs-web3-providers.git"},"author":{"name":"palsergech"},"bugs":{"url":"https://github.com/palsergech/authjs-web3-providers/issues"},"license":"MIT","readme":"# @authjs-web3-providers/solana\n\nAuthJS Web3 Provider for Solana blockchain authentication. This package enables users to sign in to your application using their Solana wallet.\n\n## Features\n\n- 🔐 Secure authentication using Solana wallet signatures\n- 🔄 Automatic session management\n- 🛠️ Easy integration with Next.js applications\n- 📦 Works with any Solana wallet (Phantom, Solflare, etc.)\n- 🔗 Supports both mainnet and devnet\n\n## Installation\n\n```bash\npnpm add @authjs-web3-providers/solana @solana/wallet-adapter-base @solana/wallet-adapter-react @solana/wallet-adapter-wallets @solana/web3.js\n```\n\n## Quick Start\n\n1. Configure your Next.js application with the Solana provider:\n\n```typescript\n// pages/api/auth/[...nextauth].ts\nimport NextAuth from \"next-auth\"\nimport { SolanaProvider } from \"@authjs-web3-providers/solana\"\nimport { pgPool } from \"@/tools/postgres/postgres\"\nimport PostgresAdapter from \"@auth/pg-adapter\"\n\nconst adapter = PostgresAdapter(pgPool)\n\nexport default NextAuth({\n  providers: [\n    SolanaProvider({\n      adapter,\n      chainId: 101 // Solana Mainnet\n    })\n  ],\n  adapter,\n  session: {\n    strategy: \"jwt\"\n  }\n})\n```\n\n2. Create a sign-in page with wallet connection:\n\n```typescript\n// pages/signin/solana.tsx\n'use client';\n\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { signIn } from 'next-auth/react';\nimport { useRouter } from 'next/navigation';\nimport { useState } from 'react';\n\nexport default function SolanaSignIn() {\n  const router = useRouter();\n  const { publicKey, signMessage } = useWallet();\n  const [isLoading, setIsLoading] = useState(false);\n\n  const handleSignIn = async () => {\n    if (!publicKey || !signMessage) return;\n\n    try {\n      setIsLoading(true);\n      const nonce = await fetch('/api/auth/csrf').then(res => res.json());\n      const message = `Sign in with Solana to the app.\\n\\nNonce: ${nonce}\\nAddress: ${publicKey.toString()}`;\n      \n      const signature = await signMessage(new TextEncoder().encode(message));\n      \n      const result = await signIn('solana', {\n        message,\n        signature: Buffer.from(signature).toString('base64'),\n        redirect: false,\n      });\n\n      if (result?.ok) {\n        router.push('/');\n      }\n    } catch (error) {\n      console.error('Sign in error:', error);\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  return (\n    <div>\n      <h1>Sign in with Solana</h1>\n      <button\n        onClick={handleSignIn}\n        disabled={!publicKey || isLoading}\n      >\n        {isLoading ? 'Signing in...' : 'Sign in with Solana'}\n      </button>\n    </div>\n  );\n}\n```\n\n3. Wrap your application with the Solana wallet provider:\n\n```typescript\n// _app.tsx\nimport { WalletAdapterNetwork } from '@solana/wallet-adapter-base';\nimport { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { clusterApiUrl } from '@solana/web3.js';\nimport { SessionProvider } from 'next-auth/react';\n\nconst network = WalletAdapterNetwork.Devnet;\nconst endpoint = clusterApiUrl(network);\nconst wallets = [new PhantomWalletAdapter()];\n\nexport default function App({ Component, pageProps: { session, ...pageProps } }) {\n  return (\n    <SessionProvider session={session}>\n      <ConnectionProvider endpoint={endpoint}>\n        <WalletProvider wallets={wallets} autoConnect>\n          <Component {...pageProps} />\n        </WalletProvider>\n      </ConnectionProvider>\n    </SessionProvider>\n  );\n}\n```\n\n## Configuration Options\n\nThe Solana provider accepts the following options:\n\n```typescript\ninterface SolanaProviderOptions {\n  // Database adapter for storing user data\n  adapter?: Adapter;\n  \n  // Session cookie configuration\n  sessionCookie?: CookieOption;\n  \n  // Solana chain ID (default: 101 for mainnet)\n  chainId?: number;\n}\n```\n\n## Security Considerations\n\n- Always verify the nonce in the signed message\n- Use HTTPS in production\n- Validate the wallet address and signature\n- Consider rate limiting for authentication attempts\n\n## Development\n\nTo run the development environment with hot reloading:\n\n```bash\npnpm watch\n```\n\n## License\n\nMIT ","readmeFilename":"README.md","_rev":"1-d0731a135423b22d6af9a83317a0bcd5"}