npm package: @lovelace.gg/auth-sdk
Description: SDK for Lovelace authentication service
Latest version: 1.3.4

# @lovelace/auth-sdk

SDK pour intégrer l'authentification Lovelace dans vos applications.

## Installation

```bash
# Depuis GitHub (repo privé)
bun add github:lovelace/auth#sdk

# Ou avec npm
npm install github:lovelace/auth#sdk
```

## Usage

### Configuration basique

```typescript
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

```typescript
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

```typescript
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

```typescript
// 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

```typescript
app.get('/logout', (c) => {
  return auth.logout(c, 'https://hub.lovelace.gg');
});
```

### Vérifier accès à d'autres apps

```typescript
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

```typescript
// URL de connexion avec redirect
const loginUrl = auth.getLoginUrl('https://hub.lovelace.gg/dashboard');

// URL du portail
const portalUrl = auth.getPortalUrl();
```

## Types TypeScript

```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

```typescript
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;
```