UNPKG

faceit-visa

Version:

A lightweight OAuth2 authentication library for FACEIT integration

284 lines (211 loc) • 7.11 kB
# FaceitVisa <img src="faceit.png" alt="FACEIT" width="64" height="64"> **The easiest way to add FACEIT OAuth2 authentication to any web application.** Inspired by the simplicity of getting a visa - just the essentials you need to authenticate with FACEIT. [![npm version](https://badge.fury.io/js/faceit-visa.svg)](https://www.npmjs.com/package/faceit-visa) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## ✨ Features - šŸš€ **One-Command Setup** - Auto-generates complete integration - šŸ”’ **Secure by Default** - PKCE OAuth2 flow with security best practices - 🌐 **Works Everywhere** - Next.js, PHP, Vanilla HTML/CSS/JS - šŸ¤– **Smart Detection** - Automatically detects your project type - šŸŽÆ **TypeScript Ready** - Full type safety included - šŸ“¦ **Zero Config** - Just add your FACEIT credentials ## šŸš€ Quick Start ### Auto-Setup (Recommended) ```bash npm install faceit-visa ``` That's it! We'll detect your project type and generate everything you need. ### Manual Setup Choose your framework: ```bash # Next.js App Router (TypeScript + HTTPS) npx faceit-visa generate nextjs-app-router # Vanilla HTML/CSS/JS (Universal) npx faceit-visa generate vanilla # Pure PHP (Zero dependencies) npx faceit-visa generate php ``` ## šŸ“‹ What Gets Generated ### Next.js App Router ``` src/app/api/auth/ ā”œā”€ā”€ faceit/route.ts # OAuth initiation ā”œā”€ā”€ callback/faceit/route.ts # OAuth callback ā”œā”€ā”€ user/route.ts # Get current user └── logout/route.ts # Logout endpoint src/components/ └── Navbar.tsx # Ready-to-use auth navbar .env.example # Environment template ``` ### Vanilla HTML/CSS/JS ``` ā”œā”€ā”€ index.html # Main page with auth ā”œā”€ā”€ faceit-auth.js # Authentication logic ā”œā”€ā”€ server.js # Express.js backend ā”œā”€ā”€ styles.css # Responsive styling ā”œā”€ā”€ package.json # Dependencies └── .env.example # Environment template ``` ### PHP ``` ā”œā”€ā”€ index.php # Homepage ā”œā”€ā”€ login.php # OAuth initiation ā”œā”€ā”€ callback.php # OAuth callback ā”œā”€ā”€ logout.php # Logout ā”œā”€ā”€ profile.php # User profile page ā”œā”€ā”€ FaceitAuth.php # OAuth class ā”œā”€ā”€ config.php # Configuration ā”œā”€ā”€ styles.css # Styling └── .env.example # Environment template ``` ## šŸŽÆ Examples ### Next.js Integration After running `npx faceit-visa generate nextjs-app-router`: **1. Add credentials to `.env.local`:** ```env FACEIT_CLIENT_ID=your_client_id_here FACEIT_CLIENT_SECRET=your_client_secret_here NEXTAUTH_URL=https://localhost:3000 ``` **2. Use the generated navbar:** ```tsx // app/layout.tsx import Navbar from '@/components/Navbar' export default function Layout({ children }) { return ( <html> <body> <Navbar /> {children} </body> </html> ) } ``` **3. Start with HTTPS:** ```bash npm run dev -- --experimental-https ``` **4. Set FACEIT redirect URI:** ``` https://localhost:3000/api/auth/callback/faceit ``` ### PHP Integration After running `npx faceit-visa generate php`: **1. Add credentials to `.env`:** ```env FACEIT_CLIENT_ID=your_client_id_here FACEIT_CLIENT_SECRET=your_client_secret_here BASE_URL=http://localhost:8000 ``` **2. Start PHP server:** ```bash php -S localhost:8000 ``` **3. Set FACEIT redirect URI:** ``` http://localhost:8000/callback.php ``` ### Vanilla HTML/JS Integration After running `npx faceit-visa generate vanilla`: **1. Install dependencies:** ```bash npm install ``` **2. Add credentials to `.env`:** ```env FACEIT_CLIENT_ID=your_client_id_here FACEIT_CLIENT_SECRET=your_client_secret_here BASE_URL=http://localhost:3000 ``` **3. Start server:** ```bash npm start ``` ## šŸ”§ Manual Usage (Advanced) For custom implementations: ```typescript import { FaceitVisa } from 'faceit-visa' const visa = new FaceitVisa({ clientId: 'your-client-id', clientSecret: 'your-client-secret', redirectUri: 'https://yourapp.com/callback' }) // Generate auth URL const { url, codeVerifier } = visa.getAuthUrl() // Exchange code for token const token = await visa.exchangeCode(code, codeVerifier) // Get user profile const user = await visa.getUserProfile(token.access_token) ``` ## šŸŽ® FACEIT Setup 1. Go to [FACEIT Developer Portal](https://developers.faceit.com/) 2. Create a new application 3. Set your redirect URI based on your template: - Next.js: `https://localhost:3000/api/auth/callback/faceit` - PHP: `http://localhost:8000/callback.php` - Vanilla: `http://localhost:3000/api/auth/callback/faceit` 4. Copy Client ID and Client Secret to your `.env` file ## šŸ› ļø CLI Commands ```bash # Generate templates npx faceit-visa generate nextjs-app-router npx faceit-visa generate vanilla npx faceit-visa generate php # List available templates npx faceit-visa list # Get help npx faceit-visa help ``` ## šŸ”’ Security Features - **PKCE Flow**: Proof Key for Code Exchange for maximum security - **State Parameter**: CSRF protection during OAuth flow - **Secure Cookies**: httpOnly, secure, SameSite settings - **Input Sanitization**: All user inputs properly validated - **Token Storage**: Secure server-side session management ## 🌟 User Flow 1. **Click "Login with FACEIT"** → Redirect to FACEIT OAuth 2. **User authorizes** → FACEIT redirects back with code 3. **Exchange code for token** → Get access token securely 4. **Fetch user profile** → Display user info and gaming stats 5. **Session management** → Maintain login state ## šŸ“š API Reference ### FaceitVisa Class ```typescript interface FaceitUser { user_id: string player_id: string nickname: string avatar: string country: string level?: number } class FaceitVisa { getAuthUrl(): { url: string, codeVerifier: string } exchangeCode(code: string, codeVerifier: string): Promise<TokenResponse> getUserProfile(accessToken: string): Promise<FaceitUser> } ``` ## 🚨 Troubleshooting | Issue | Solution | |-------|----------| | `404 on callback` | Check redirect URI matches exactly | | `HTTPS required` | Use `--experimental-https` for Next.js dev | | `Missing credentials` | Verify `.env` file has correct values | | `CORS errors` | Ensure same origin for frontend/backend | ## šŸ“¦ Requirements - **Next.js**: Node.js 18+, Next.js 13+ - **PHP**: PHP 7.4+, cURL extension - **Vanilla**: Node.js 16+, Express.js ## šŸ¤ Contributing Contributions welcome! Please check the [issues page](https://github.com/shadiflo/faceit-visa/issues). ## šŸ“„ License MIT License - see [LICENSE](LICENSE) file for details. ## šŸ™‹ Support - šŸ“– **Documentation**: This README - šŸ› **Issues**: [GitHub Issues](https://github.com/shadiflo/faceit-visa/issues) - šŸ’¬ **Discussions**: [GitHub Discussions](https://github.com/shadiflo/faceit-visa/discussions) --- Made with ā¤ļø for the gaming community