based-modal
v1.0.0
Published
> **Note:** > This package is for server-side (API, server actions, backend) use only. > There are no frontend (React) components or hooks exported. > Do not import this package in client-side code.
Maintainers
Readme
Note: This package is for server-side (API, server actions, backend) use only. There are no frontend (React) components or hooks exported. Do not import this package in client-side code.
based-modal (actions)
A Next.js/Node.js authentication and wallet API kit for Ethereum and Solana, with utilities for serialization and contract interaction, designed for serverless and API route usage.
Features
- NextAuth-based multi-provider authentication (Google, GitHub, Twitter, EVM/Solana wallet)
- Social and wallet login support
- Secure server-side contract interaction endpoints (EVM/Solana)
- Serialization/deserialization helpers for cross-network data
- User profile management and keypair generation
- All API endpoints and helpers are SSR/serverless-friendly
Installation
yarn add based-modalPeer dependencies:
next-authethers@solana/web3.js@coral-xyz/anchortweetnaclbip39shortidbased-shared(if using shared types)
Usage
1. API Route Handlers
You can use the provided handlers in your Next.js API routes or server actions.
// pages/api/auth/[...nextauth].ts
import { handlers } from "based-modal/actions";
export default handlers;Or for app directory:
// app/api/auth/[...nextauth]/route.ts
import { handlers } from "based-modal/actions";
export const { GET, POST } = handlers;2. Auth Helpers
You can use the exported helpers for authentication and session management:
import { auth, signIn, signOut } from "based-modal/actions";
// Usage in server actions or API routes
const session = await auth();
await signIn(/* ... */);
await signOut(/* ... */);3. Web3 Handler
For server-side contract interaction (social wallet, EVM, Solana):
import { basedAuthHandler } from "based-modal/actions";
// In your API route:
export const POST = basedAuthHandler;- Supports operations:
"transfer","write-contract"(see source for details) - Only available to authenticated users with a social profile
4. Serialization Utilities
For encoding/decoding cross-network data:
import { serialize, deserialize } from "based-modal/actions";
const encoded = serialize({ value: 123n });
const decoded = deserialize(encoded, "eth"); // or "sol"Environment Variables
Set the following in your .env:
AUTH_GOOGLE_ID=...
AUTH_GOOGLE_SECRET=...
AUTH_GITHUB_ID=...
AUTH_GITHUB_SECRET=...
AUTH_TWITTER_ID=...
AUTH_TWITTER_SECRET=...
AUTH_SECRET=...
PREFIX_HASH=your_secret_for_keypair_generationAPI
Exports
handlers– NextAuth API route handlers (for Next.js API/app routes)auth– Helper to get the current session (async)signIn– Helper to sign in a user (async)signOut– Helper to sign out a user (async)basedAuthHandler– POST handler for server-side web3 operations (transfer, write-contract)serialize– Serialize cross-network data (bigint, BN, SolanaPublicKey)deserialize– Deserialize cross-network data
Advanced/Utility (internal, but useful for extension)
saveSocialUser,saveWalletUser,updateOrCreateUserProfile(user profile management)createKeypairs(deterministic keypair generation for EVM/Solana/Sui)
Example: Next.js API Route
// app/api/auth/[...nextauth]/route.ts
import { handlers } from "based-modal/actions";
export const { GET, POST } = handlers;Example: Server-side Web3
// app/api/web3/route.ts
import { basedAuthHandler } from "based-modal/actions";
export const POST = basedAuthHandler;Notes
- This package is server-only: do not use in client/browser code.
- All web3 operations are protected and require authentication.
- Serialization utilities are provided for safe cross-network data handling.
- User profile and keypair helpers are available for advanced use.
For more details, see the source code in src/actions/utils/.
