@lovelace.gg/auth-sdk
v1.3.4
Published
SDK for Lovelace authentication service
Maintainers
Readme
@lovelace/auth-sdk
SDK pour intégrer l'authentification Lovelace dans vos applications.
Installation
# Depuis GitHub (repo privé)
bun add github:lovelace/auth#sdk
# Ou avec npm
npm install github:lovelace/auth#sdkUsage
Configuration basique
import { LovelaceAuth } from '@lovelace/auth-sdk';
import { Hono } from 'hono';
const app = new Hono();
// Initialiser le SDK
const auth = new LovelaceAuth({
app: 'hub', // 'hub' | 'market' | 'playtest'
authUrl: 'https://auth.lovelace.gg', // Optionnel, par défaut
});
// Protéger toutes les routes
app.use('*', auth.middleware());
// Ou protéger des routes spécifiques
app.use('/admin/*', auth.middleware({ requireAccess: true }));Accéder aux infos utilisateur
app.get('/profile', auth.middleware(), (c) => {
const user = auth.getUser(c);
if (!user) {
return c.text('Not authenticated', 401);
}
return c.json({
id: user.id,
email: user.email,
name: user.name,
access: user.access
});
});Vérification manuelle
app.get('/api/data', async (c) => {
const { user, hasAccess, isAuthenticated } = await auth.verify(c);
if (!isAuthenticated) {
return c.text('Unauthorized', 401);
}
if (!hasAccess) {
return c.text('Access denied for this app', 403);
}
// User is authenticated and has access
return c.json({ data: 'secret data' });
});Options du middleware
// Rediriger vers login si pas authentifié (défaut: true)
auth.middleware({ redirectToLogin: true })
// Vérifier l'accès à l'app (défaut: true)
auth.middleware({ requireAccess: true })
// Juste vérifier l'auth, pas l'accès app
auth.middleware({ requireAccess: false })
// API JSON (pas de redirect)
auth.middleware({ redirectToLogin: false })Déconnexion
app.get('/logout', (c) => {
return auth.logout(c, 'https://hub.lovelace.gg');
});Vérifier accès à d'autres apps
app.get('/switch-app', auth.middleware(), (c) => {
const hasMarketAccess = auth.hasAccessTo(c, 'market');
const hasPlaytestAccess = auth.hasAccessTo(c, 'playtest');
return c.json({
availableApps: {
market: hasMarketAccess,
playtest: hasPlaytestAccess
}
});
});URLs utilitaires
// URL de connexion avec redirect
const loginUrl = auth.getLoginUrl('https://hub.lovelace.gg/dashboard');
// URL du portail
const portalUrl = auth.getPortalUrl();Types TypeScript
interface LovelaceUser {
id: string;
email: string;
name: string;
access: {
hub: boolean;
market: boolean;
playtest: boolean;
};
}
interface VerifyResult {
user: LovelaceUser | null;
hasAccess: boolean;
isAuthenticated: boolean;
}Exemple complet
import { Hono } from 'hono';
import { LovelaceAuth } from '@lovelace/auth-sdk';
const app = new Hono();
const auth = new LovelaceAuth({ app: 'hub' });
// Routes publiques
app.get('/', (c) => c.text('Home page'));
// Routes protégées
app.use('/dashboard/*', auth.middleware());
app.get('/dashboard', (c) => {
const user = auth.getUser(c);
return c.html(`
<h1>Welcome ${user?.name}!</h1>
<a href="/logout">Logout</a>
`);
});
app.get('/logout', (c) => {
return auth.logout(c);
});
export default app;